f188d7d478efc807f1cbd190e45d5e022369c32b
[mono.git] / mcs / mcs / ChangeLog
1 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
2
3         * cs-parser.jay: Removed CS0134.
4         
5         * driver.cs: Removed CS1901.
6         
7         * expression.cs (SizeOf.DoResolve): Don't report CS0233
8         for predefined types.
9
10 2005-03-07  Duncan Mak  <duncan@novell.com>
11
12         * codegen.cs (Save):  Catch UnauthorizedAccessException as
13         well. Fixes bug #73454.
14
15 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
16
17         * cs-tokenizer.cs (xtoken): Add CS1035.
18         
19         * class.cs (MethodData.Define): Add CS0683.
20         (FieldMember.ctor): Add CS0681.
21
22 2005-03-07  Raja R Harinath  <rharinath@novell.com>
23
24         * ecore.cs (SimpleName.DoResolve): Rename from
25         SimpleName.DoResolveAllowStatic.
26         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
27         Pass 'intermediate' flag to MemberStaticCheck.
28         (SimpleName.MemberStaticCheck): Skip "static check" only in case
29         of "intermediate" lookups via MemberAccess.
30         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
31         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
32
33 2005-03-07  Raja R Harinath  <rharinath@novell.com>
34
35         Fix #73394.
36         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
37         slipped in because of variable names that are identical to a
38         builtin type's BCL equivalent ('string String;', 'int Int32;').
39         (PropertyExpr.EmitInstance): Likewise.
40
41 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
42
43         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
44         
45         * report.cs (warning_ignore_table): Made public.
46
47 2005-03-04  Raja R Harinath  <rharinath@novell.com>
48
49         Fix #73282.
50         * class.cs (MethodData.Emit): Pass 'container' to
51         container.GetObsoleteAttribute instead of 'container.Parent'.
52
53 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
54
55         * cs-parser.jay: Add 1534 error test.
56
57         * iterators.cs (Yield.CheckContext): Add error 1629.
58         (Iterator.ctor): Save unsafe modifier.
59         (MoveNextMethod.DoEmit): Restore unsafe context.
60
61         * namespace.cs (UsingAlias): Better error message.
62
63 2005-03-03  Dan Winship  <danw@novell.com>
64
65         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
66         the warning message [#73219]
67
68 2005-03-03  Raja R Harinath  <rharinath@novell.com>
69
70         Fix compile with MCS 1.0.0.0.
71         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
72         w_restore to not depend on string constant folding.
73
74 2005-03-03  Raja R Harinath  <rharinath@novell.com>
75
76         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
77         CS0246 check to users who passed 'silent = false'.
78         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
79         check.
80         (SimpleName.SimpleNameResolve): Update.
81         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
82         (MemberAccess.IdenticalNameAndTypeName): Update.
83         * doc.cs (FindDocumentedTypeNonArray): Update.
84
85 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
86
87         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
88         * parameters.cs (ComputeAndDefineParameters): Remove.
89         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
90         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
91         Use GetParameterInfo.
92
93 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
94
95         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
96
97 2005-03-02  Raja R Harinath  <rharinath@novell.com>
98
99         Unify DeclSpace.LookupType and DeclSpace.FindType.
100         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
101         is in charge of defining nested types on demand.
102         (DeclSpace.LookupType): Use it when the current_type is a
103         TypeBuilder.  Use LookupTypeDirect for reflected types.
104         (DeclSpace.FindType): Remove.
105         (DeclSpace.LookupInterfaceOrClass): Likewise.
106         (DeclSpace.DefineTypeAndParents): Likewise.
107         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
108         DeclSpace.LookupType.
109         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
110         * typemanager.cs (LookupType): Simplify.
111         (AddUserType): Remove type from negative_hits.
112         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
113         * class.cs (TypeContainer.FindMembers): Move handling of nested
114         types ...
115         (TypeContainer.FindMembers_NestedTypes): ... here.
116         (TypeContainer.FindNestedType): Implement override.
117         (ClassPart.FindNestedType): Delegate to PartialContainer.
118         (ClassPart.PartFindNestedType): Looks up the nested types of the
119         part alone.
120
121 2005-03-02  Martin Baulig  <martin@ximian.com>
122
123         * class.cs (TypeContainer.DoDefineMembers): We also need a default
124         static constructor in static classes.
125
126 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
127
128         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
129         sizeParamIndex is not specified.
130
131 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
132
133         Fix #73117
134         * report.cs (WarningMessage.IsEnabled): Missing null check.
135
136 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
137
138         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
139         in the fields and not in the properties.
140
141 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
142
143         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
144         fields as well.
145
146 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
147
148         * attribute.cs: Small refactoring (improved robustness).
149         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
150         (ValidateGuid): Removed.
151         (Resolve): Removed referenced to above mentioned.
152         (GetAttributeUsage): Made private and changed to work without
153         class assistance.
154         (GetIndexerAttributeValue): Don't crash.
155         (GetConditionalAttributeValue): Ditto.
156         (GetClsCompliantAttributeValue): Ditto.
157         (ExtractSecurityPermissionSet): All attributes exceptions are
158         error 648.
159         (GetPropertyValue): New helper.
160         (GetMethodImplOptions): New method.
161         (DefinePInvokeMethod): Reuse common code. Implemented handling of
162         some missing properties.
163         
164         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
165         (Method.ApplyAttributeBuilder): Updated.
166         
167         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
168         exception.
169
170 2005-02-28  Raja R Harinath  <rharinath@novell.com>
171
172         Fix #73052.
173         * report.cs (Report.SymbolRelatedToPreviousError): Handle
174         non-simple types (array, pointer, reference).
175
176 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
177
178         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
179
180         * class.cs (MethodCore.IsDuplicateImplementation): Special error
181         for operators.
182         (Method.CheckBase): Catch wrong destructor here.
183         (MethodData.Define): Add errors 550, 668.
184
185         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
186
187         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
188
189         * pending.cs (VerifyPendingMethods): Add error 551.
190
191         * typemanager.cs (CSharpName): Next error report helper.
192
193 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
194
195         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
196         attributes. Removed useless attribute double check.
197         It saves almost 2MBs for corlib.
198
199 2005-02-25  Raja R Harinath  <rharinath@novell.com>
200
201         Fix #72924.
202         * statement.cs (ExpressionStatement.Resolve): Make robust to being
203         called twice in case of error.
204
205 2005-02-23  Chris Toshok  <toshok@ximian.com>
206
207         Fix compiler portions of #72827.
208         * statement.cs (Block.Emit): call Begin/EndScope on the
209         EmitContext instead of the ILGenerator.
210
211         * codegen.cs (EmitContext.BeginScope): new method, call
212         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
213         we have one.)
214         (EmitContext.BeginScope): same, but EndScope and CloseScope
215
216         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
217         offset and call the superclass's OpenScope(int) with it.
218         (SymbolWriter.CloseScope): get the current il
219         offset and call superclass's CloseScope(int) with it.
220
221 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
222
223         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
224         CS1677 for out and ref as well.
225
226         * class.cs (Method.Define): Add error CS1599 detection.
227         
228         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
229         
230         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
231         
232         * delegate.cs (Delegate.Define): Add error CS1599 detection.
233         
234         * support.cs.cs (ModifierDesc): New helper method.
235
236 2005-02-23  Raja R Harinath  <rharinath@novell.com>
237             Abin Thomas  <projectmonokochi@rediffmail.com>
238             Anoob V E  <projectmonokochi@rediffmail.com>
239             Harilal P R  <projectmonokochi@rediffmail.com>
240
241         Fix #57851, #72718.
242         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
243         MemberLookup (used for error reporting) actually returns a result.
244         Fix error report number (122, not 112).
245
246 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
247             Anoob V E  <projectmonokochi@rediffmail.com>
248             Harilal P R  <projectmonokochi@rediffmail.com>
249
250         Fix #71134.
251         * pending.cs (PendingImplementation.GetAbstractMethods):
252         Find NonPublic members too.
253
254 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
255
256         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
257         Fixed error 217.
258         
259         * class.cs (MethodCore.CheckMethodAgainstBase):
260         Add error 239 report.
261
262 2005-02-21  Raja R Harinath  <rharinath@novell.com>
263
264         Fix #68955.
265         * expression.cs (Invocation.IsApplicable): Make public.
266         (Invocation.IsParamsMethodApplicable): Likewise.
267         * delegate.cs (Delegate.VerifyApplicability): Don't use
268         Invocation.VerifyArgumentCompat for parameter applicability
269         testing.  Use Invocation.IsApplicable and
270         Invocation.IsParamsMethodApplicable.
271
272 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
273
274         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
275         
276         * class.cs (Operator.Define): Add error 217 report.
277         
278 2005-02-21  Raja R Harinath  <rharinath@novell.com>
279
280         * namespace.cs (UsingEntry.Resolve): Undo change below.
281
282 2005-02-21  Raja R Harinath  <rharinath@novell.com>
283
284         Fix #72756.
285         * ecore.cs (Expression.MemberLookupFailed): Add argument to
286         disable the error message when the extended MemberLookup also
287         fails.
288         (Expression.MemberLookupFinal): Update.
289         (SimpleName.DoSimpleNameResolve): Update.
290         * expression.cs (MemberAccess.ResolveNamespaceOrType):
291         Don't use MemberLookupFinal.
292         (New.DoResolve): Update.
293         (BaseAccess.CommonResolve): Update.
294
295 2005-02-21  Raja R Harinath  <rharinath@novell.com>
296
297         Fix #72732.
298         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
299         occured previously, don't resolve again.
300
301 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
302
303         Fix #69949
304         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
305         argument. Call ResolveAttributeUsage for unresolved.
306         when types doesn't match ctor arguments.
307         
308         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
309         for nested attribute classes.
310         (Class.attribute_usage): Removed.
311         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
312         for attribute class.
313         
314         * ecore.cs (IsAttribute): Removed.
315         
316         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
317         
318         * rootcontext.cs (RegisterAttribute): Removed, attributes are
319         now normal types.
320         (attribute_types): Removed.
321         (EmitCode): Global attributes are emited as the latest.
322
323 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
324
325         * class.cs (EmitFieldInitializers): Don't emit field initializer
326         for default values when optimilization is on.
327         
328         * constant.cs (Constant.IsDefaultValue): New property.
329         
330         * driver.cs: Add /optimize handling.
331         
332         * constant.cs,
333         * ecore.cs,
334         * literal.cs: Implement new IsDefaultValue property.
335         
336         * rootcontext.cs (Optimize): New field, holds /optimize option.
337
338 2005-02-18  Raja R Harinath  <rharinath@novell.com>
339
340         Fix crasher in re-opened #72347.
341         * namespace.cs (Namespace.Lookup): Return null if
342         DeclSpace.DefineType returns null.
343
344         Fix #72678.
345         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
346
347 2005-02-18  Raja R Harinath  <rharinath@novell.com>
348
349         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
350         now returns null if it cannot resolve to an lvalue.
351         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
352         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
353         returned null.  Remove check for SimpleName.
354         (EventExpr.DoResolveLValue): New.
355         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
356         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
357         error from ...
358         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
359         avoid CS0131 error.
360         (Unary.ResolveOperator): Move CS0211 check ...
361         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
362         CS0131 error.
363         (Unary.DoResolveLValue): Simplify.
364         (AddressOf.DoResolveLValue): New.
365         (ArrayAccess.DoResolveLValue): New.
366
367 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
368
369         * attribute.cs (Attribute.Resolve): Add arguments casting for
370         when types doesn't match ctor arguments.
371
372 2005-02-16  Raja R Harinath  <rharinath@novell.com>
373
374         Fix parts of #63202.
375         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
376         lookup of operator in base type.  Ensure that all checks happen
377         when the operator resolves to an "op_..." method.
378
379 2005-02-15  Raja R Harinath  <rharinath@novell.com>
380
381         Fix #71992.
382         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
383         'ignore_cs0104' parameter.  Pass it to ...
384         (NamespaceEntry.Lookup): ... this.
385         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
386         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
387         (TypeLookupExpression.DoResolveAsTypeStep): Update.
388         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
389         Update.  Request that cs0104 errors be ignored.
390         (ComposedCast.ResolveAsTypeStep): Update.
391
392 2005-02-14  Raja R Harinath  <rharinath@novell.com>
393
394         Fix #59209.
395         * expression.cs (Invocation.BetterFunction): Remove support for
396         comparing virtual functions and their overrides.
397         (Invocation.IsOverride): New.
398         (Invocation.OverloadResolve): Don't consider 'override' functions
399         during candidate selection.  Store them in a lookaside list.
400         If the selected method is a 'virtual' function, use the list to
401         find any overrides that are closer to the LHS type.
402
403 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
404
405         * expression.cs (New.DoResolve): Add complex core type reduction.
406         (New.Constantify): Converts complex core type syntax like 'new int ()'
407         to simple constant.
408         
409 2005-02-14  Raja R Harinath  <rharinath@novell.com>
410
411         * decl.cs (EntryType.EntryType): New constructor to create an
412         updated copy of a cache entry.
413         (MemberCache.AddMethods): Use it.
414         (MemberCache.ClearDeclaredOnly): Remove.
415         (MemberCache.MemberCache): Update.
416
417 2005-02-11  Miguel de Icaza  <miguel@novell.com>
418
419         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
420         variable.  This one is represents the actual low-level declaration
421         of the method, as opposed to the semantic level `IsStatic'.   
422
423         An anonymous method which is hosted into a static method might be
424         actually an instance method.  IsStatic would reflect the
425         container, while MethodIsStatic represents the actual code
426         generated.
427
428         * expression.cs (ParameterReference): Use the new MethodIsStatic
429         instead of IsStatic.
430
431         * anonymous.cs (AnonymousMethod.Compatible): Pass the
432         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
433         set on the current EmitContext. 
434
435         * expression.cs (Cast): Overload DoResolveLValue so we can pass
436         resolve our casted expression as an LValue.  This triggers the
437         proper LValue processing that is later required by Assign.
438
439         This fixes 72347.
440
441         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
442
443 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
444
445         C# 2.0 Fixed buffer implementation
446
447         * anonymous.cs: Update after RegisterHelperClass renaming.
448
449         * attribute.cs (AttributeTester.fixed_buffer_cache):
450         Cache of external fixed buffers.
451         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
452         implementation if field is fixed buffer else null.
453
454         * class.cs
455         (TypeContainer.AddField): Accept FieldMember instead of Field.
456         (FieldBase.IsFieldClsCompliant): Extracted code from
457         VerifyClsCompliance descendant customization.
458         (FixedField): New class handles fixed buffer fields.
459         (FixedFieldExternal): Keeps information about imported fixed
460         buffer.
461         (IFixedField): Make access to internal or external fixed buffer
462         same.
463
464         * cs-parser.jay: Add fixed buffer parsing.
465
466         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
467         buffer.
468
469         * expression.cs (Indirection): Extended implementation to accept
470         fixed buffer field.
471         (PointerArithmetic.Emit): Get element from fixed buffer as well.
472         (ElementAccess.MakePointerAccess): Get type as parameter.
473         (DoResolve): Add fixed buffer field expression conversion.
474         (DoResolveLValue): Ditto.
475         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
476         (ArrayPtr): Derives from FixedBufferPtr.
477         (ArrayPtr.Emit): Add extra emit for array elements.
478
479         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
480
481         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
482         for compiler generated types.
483         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
484
485         * statement.cs (Fixed): Refactored to be easier add fixed buffer
486         and consume less memory.
487         (Fixed.Resolve): Add fixed buffer case.
488
489         * typemanager.cs (compiler_generated_attr_ctor,
490         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
491         (HasElementType): Add our own implementation to work on every
492         runtime.
493
494 2005-02-11  Miguel de Icaza  <miguel@novell.com>
495
496         * anonymous.cs (CaptureContext): Track whether `this' has been
497         referenced.   
498
499         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
500         only captured `this' if it was implicitly done (instance
501         methods/variables were used). 
502
503         * codegen.cs (EmitContext.CaptureThis): New method to flag that
504         `this' must be captured.
505
506 2005-01-30  Miguel de Icaza  <miguel@novell.com>
507  
508         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
509         is null it means that there has been no need to capture anything,
510         so we just create a sibling.
511
512         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
513
514         Just a partial fix.  The other half is fairly elusive.
515         
516 2005-02-10  Raja R Harinath  <rharinath@novell.com>
517
518         Fix #52586, cs0121-4.cs.
519         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
520         and return a hashtable.
521         (MemberCache.ClearDeclaredOnly): New.
522         (MemberCache.MemberCache): Update to change.  Make a deep copy of
523         the method_hash of a base type too.
524         (MemberCache.AddMethods): Adapt to having a deep copy of the base
525         type methods.  Overwrite entries with the same MethodHandle so
526         that the ReflectedType is correct.  The process leaves in base
527         virtual functions and their overrides as distinct entries.
528         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
529         matters since it was boxed in a ArrayList before.
530         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
531         modifier.
532         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
533         case of a virtual function and its override (choose the overload
534         as better).
535         (Invocation.OverloadResolve): Avoid 'override' members during
536         'applicable_type' calculation.
537
538 2005-02-09  Raja R Harinath  <rharinath@novell.com>
539
540         Combine two near-redundant caches.
541         * typemanager.cs (method_params): Rename from method_internal_params.
542         (TypeManager.GetParameterData): New.  Replace
543         Invocation.GetParameterData.
544         (TypeManager.LookupParametersByBuilder): Remove.
545         * expression.cs (Invocation.method_parameter_cache): Remove.
546         (Invocation.GetParameterData): Remove.
547         Update to changes.
548         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
549         Update to changes.
550
551 2005-02-08  Raja R Harinath  <rharinath@novell.com>
552
553         Fix #72015.
554         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
555         TypeManager.multicast_delegate_type is null, resolve it by looking
556         up "System.MulticastDelegate".
557         * rootcontext.cs (RootContext.ResolveCore): Simplify.
558
559 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
560             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
561             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
562
563         Fix cs0164.cs.
564         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
565         (LabeledStatement.AddReference): New.  Set 'referenced'.
566         (Goto.Resolve): Use it.
567
568 2005-02-05  John Luke  <john.luke@gmail.com>
569
570         * driver.cs: remove duplicate -doc line in Usage ()
571
572 2005-02-04  Raja R Harinath  <rharinath@novell.com>
573
574         * location.cs (Location.AddFile): Fix CS2002 error report.
575
576 2005-02-02  Martin Baulig  <martin@ximian.com>
577
578         * delegate.cs (Delegate.DefineType): Report an internal error if
579         TypeManager.multicast_delegate_type is null.  See bug #72015 for
580         details.        
581
582 2005-02-02  Raja R Harinath  <rharinath@novell.com>
583
584         Fix a crasher in a variant of #31984.
585         * const.cs (Constant.CheckBase): New override that defers the
586         new-or-override check in case the base type hasn't been populated
587         yet.
588         (Constant.Define): Ensure the new-or-override check is performed.
589
590 2005-02-01  Duncan Mak  <duncan@ximian.com>
591
592         * const.cs (LookupConstantValue): Check that `ce' is not null
593         before calling GetValue ().
594
595 2005-02-01  Raja R Harinath  <rharinath@novell.com>
596
597         Fix test-334.cs (#69519).
598         * cs-parser.jay (using_alias_directive): Pass in an expression to
599         NamespaceEntry.UsingAlias.
600         (using_namespace_directive): Pass in an expression to
601         NamespaceEntry.Using.
602         (namespace_name): Don't flatten to a string.
603         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
604         (NamespaceEntry.AliasEntry.Resolve): Lookup using
605         ResolveAsTypeStep.
606         (NamespaceEntry.UsingEntry): Likewise.
607         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
608         changes.
609         (NamespaceEntry.LookupForUsing): Remove.
610         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
611         names.
612         (NamespaceEntry.Lookup): Remove support for dotted names.
613
614 2005-02-01  Raja R Harinath  <rharinath@novell.com>
615
616         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
617         split into two.
618         (NamespaceEntry.ImplicitParent): Compute on demand.
619         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
620         parallels the current.
621         (NamespaceEntry.LookupForUsing): Use it.
622         (NamespaceEntry.Lookup): If the current namespace-entry is
623         implicit, don't search aliases and using tables.
624
625 2005-02-01  Raja R Harinath  <rharinath@novell.com>
626
627         Fix #31984.
628         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
629         BaseCache here.
630         (TypeContainer.BaseCache): Compute on demand.
631         (TypeContainer.FindMembers): Define constants and types if they're
632         not already created.
633         (FieldMember.Define): Move resetting of ec.InUnsafe before error
634         check.
635         * const.cs (Constant.Define): Make idempotent.
636
637 2005-01-29  Miguel de Icaza  <miguel@novell.com>
638
639         * pending.cs: Produce better code (no nops produced by using Ldarg
640         + value).
641         
642         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
643         i - 1' it should be arg + 1.
644
645         Fixes bug #71819.
646
647 2005-01-28  Raja R Harinath  <rharinath@novell.com>
648
649         * attribute.cs (Attribute.CheckAttributeType): Make private
650         non-virtual.
651         (Attribute.ResolveType): Make virtual.
652         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
653         handling of RootContext.Tree.Types.
654
655 2005-01-27  Raja R Harinath  <rharinath@novell.com>
656
657         Update attribute-handling to use the SimpleName/MemberAccess
658         mechanisms.
659         * cs-parser.jay (attribute): Pass in an expression to the
660         constructors of Attribute and GlobalAttribute.
661         * attribute.cs (Attribute): Take an expression for the name.
662         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
663         passed in attribute name expression.
664         (Attribute.CheckAttributeType): Use it.
665         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
666         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
667         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
668         argument to prevent error messages if the lookup fails.
669
670 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
671
672         * expression.cs (Indirection): Implemented IVariable interface
673         to support indirection in AddressOf operator.
674         (PointerArithmetic.Emit): Add optimalization for case where
675         result can be precomputed.
676
677 2005-01-26  Martin Baulig  <martin@ximian.com>
678
679         * class.cs (TypeContainer.AttributeTargets): Return the correct
680         AttributeTargets depending on our `Kind' instead of throwing an
681         exception; fixes #71632.
682
683 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
684
685         Fix #71257
686         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
687         constant members.
688
689 2005-01-25  Raja R Harinath  <rharinath@novell.com>
690
691         Fix #71602.
692         * expression.cs (MemberAccess.DoResolve): Don't complain with
693         cs0572 when the LHS of a member access has identical name and type
694         name.
695
696 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
697
698         Fix #71651, #71675
699         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
700         CreatePermission.
701         Create custom PermissionSet only for PermissionSetAttribute.
702
703 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
704
705         Fix #71649
706         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
707         delegates in static class.
708
709 2005-01-24  Martin Baulig  <martin@ximian.com>
710
711         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
712         merging an implicit block, just use its reachability.
713
714         * statement.cs (Block.Resolve): Make the unreachable code check
715         work wrt. implicit blocks; see test-337 from #63842.
716
717 2005-01-21  Alp Toker  <alp@atoker.com>
718  
719         * cs-parser.jay: destructor_declaration's container is PartialContainer
720         not Class when partial types are used, so use Kind prop instead of
721         'is'.
722         
723 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
724
725         * cs-parser.jay: Improve error reporting when an interface
726         declares new types.
727
728 2005-01-20  Dick Porter  <dick@ximian.com>
729
730         * support.cs: SeekableStreamReader fix from Sandor Dobos
731         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
732         chars are read.  Fixes bug 70369.
733
734 2005-01-20  Raja R Harinath  <rharinath@novell.com>
735
736         * cs-parser.jay (catch_clause): Simplify current_block handling
737         somewhat.
738
739 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
740
741         * convert.cs (ImplicitStandardConversionExists): Synchronize the
742         code with ImplicitStandardConversion to handle the implicit
743         conversion of method groups into valid delegate invocations. 
744
745         The problem is that in parameter handling we were using this code
746         path.  Fixes bug #64698
747
748 2005-01-19  Raja R Harinath  <rharinath@novell.com>
749
750         * cs-parser.jay: Fix several infelicities.
751         - Avoid assigning to the parser value stack.  Code like 
752           '$3 = null' is unclean.  Synthesize a value for the code block
753           instead. 
754         - Avoid using oob_stack for storing location information.  Use ...
755         (_mark_): ... this.  New (empty) rule.  Saves the current location
756         in $$.
757         (foreach_statement): Avoid using oob_stack for current_block
758         handling.  Use technique used in for_statement and
759         using_statement.  Synthesize a value for the code block to store
760         additional intermediate information.
761
762 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
763
764         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
765         of a different type is only allowed to private fields of a
766         containing type, not on fields of a base class.
767
768         See test-174.cs and error cs0122-9.cs
769
770 2005-01-13  Raja R Harinath  <rharinath@novell.com>
771
772         Fix test-335.cs (bug #58126).
773         * cs-parser.jay (argument): Split out non-expression parts of the
774         rule into 'non_simple_argument'.
775         (invocation_expression): Support parenthesized invocations with
776         multiple arguments, and with single non-simple arguments.
777
778 2005-01-13  Raja R Harinath  <rharinath@novell.com>
779
780         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
781         places.
782
783 2005-01-12  Raja R Harinath  <rharinath@novell.com>
784
785         Fix cs0038-1.cs, cs1640-6.cs.
786         * ecore.cs (Expression.Resolve): Remove special-case for
787         SimpleName in error-handling.
788         (Expression.almostMatchedMembers): Relax access permission to
789         protected.
790         (Expression.MemberLookupFailed): Handle duplicates in
791         almostMatchedMembers list.
792         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
793         * expression.cs (New.DoResolve): Report CS1540 for more cases.
794         * typemanager.cs (GetFullNameSignature): Use the MethodBase
795         overload if the passed in MemberInfo is a MethodBase.
796
797 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
798
799         Fix #70749
800         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
801         for non-CAS & merge permission sets properly.
802
803 2005-01-11  Raja R Harinath  <rharinath@novell.com>
804
805         Improve standard-compliance of simple name and member access 
806         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
807         * ecore.cs (FullNamedExpression): New abstract base class 
808         for Namespaces and TypeExpressions.
809         (ResolveFlags.SimpleName): Remove.
810         (SimpleName): Remove support for dotted names.
811         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
812         DeclSpace.FindType and DeclSpace.LookupType.
813         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
814         (Expression.ExprClassName): Make member function.
815         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
816         a namespace.  Remove creation of dotted "SimpleName"s.
817         (MemberAccess.DoResolve): Likewise.
818         * decl.cs (DeclSpace.Cache): Make private.
819         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
820         (DeclSpace.FindType): Update.
821         (DeclSpace.LookupType): Move here from RootContext.  Return a 
822         FullNamedExpression.
823         * namespace.cs (Namespace): Derive from FullNamedExpression
824         so that it can be part of expression resolution.
825         (Namespace.Lookup): Return an FullNamedExpression.
826         (NamespaceEntry.LookupAlias): Lookup aliases only in current
827         namespace.
828         * rootcontext.cs (NamespaceLookup): Remove.
829         (LookupType): Move to DeclSpace.
830         * attribute.cs (CheckAttributeType): Update.
831         * doc.cs (FindDocumentedType): Remove allowAlias argument.
832         (FindDocumentedTypeNonArray): Likewise.
833
834 2005-01-11  Raja R Harinath  <rharinath@novell.com>
835
836         Fix cs0509.cs, cs1632.cs.
837         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
838         is the same as IsInterface.
839         (TypeContainer.GetClassBases): Likewise.
840         * statement.cs (LabeledStatement.ig): New field.
841         (LabeledStatement.LabelTarget): Save ILGenerator which created the
842         label.
843         (LabeledStatement.DoEmit): Check that the label was created with
844         the same ILGenerator.
845
846 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
847
848         Fix #71058
849         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
850         accessors to its properties.
851
852         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
853         from accessors to property.
854         
855 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
856
857         Fix #70722
858         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
859         only for overrides.
860         
861 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
862
863         * attribute.cs: Check for null and empty strings.  
864
865         I have lost another battle to Paolo.
866
867 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
868
869         Fix #70942
870         * class.cs (PropertyMethod): Set Parent field in ctors.
871         (SetMethod.InternalParameters): Add unsafe switch hack.
872         Override MarkForDuplicationCheck where it is appropriate.
873
874         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
875         It says whether container allows members with the same name.
876         Base default is no.
877         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
878         Removed is_method parameter.
879
880 2005-01-06  Duncan Mak  <duncan@ximian.com>
881
882         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
883         because the previous change led to incorrect reporting of CS1032
884         ("Cannot define/undefine preprocessor symbols after first token in
885         file"). Instead of using `tokens_seen' as the only flag that
886         triggers CS1040, introduce `comments_seen'. This new flag is used
887         to signify having seen comments on the current line, so it is
888         unset after a newline.
889
890 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
891
892         * doc.cs : When searching for a type, find nested type too.
893           This fixes bug #71040.
894
895 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
896
897         * doc.cs :
898           - Warn missing member comment on those classes which also does not
899             have doc comments. Fixed bug #71041.
900           - Don't warn missing doc comment on default constructor.
901             Fixed bug #71042.
902
903 2005-01-06  Duncan Mak  <duncan@ximian.com>
904
905         * cs-tokenizer.cs (xtoken): After handling traditional C-style
906         comments, set `tokens_seen' to true. This allows us to detect
907         misplaced preprocessor directives (i.e. not at the beginning of
908         the a line, nor after whitespaces). In that case, report error
909         CS1040. This fixes bug #56460.
910
911         * cs-parser.jay (interface_member_declaration): Add checks for
912         IsExplicitImpl, and report CS0541 error if an interface member is
913         defined as an explicit interface declaration.
914
915 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
916
917         Fix #70817
918         * class.cs (PropertyMethod): Set Parent field in ctors.
919         (SetMethod.InternalParameters): Add unsafe switch hack.
920         
921         * decl.cs (MemberCore.Parent): Cannot be readonly.
922
923 2005-01-06  Raja R Harinath  <rharinath@novell.com>
924
925         * decl.cs (DeclSpace.ResolveType): Remove.
926         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
927         Merge in code from ...
928         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
929         * class.cs, enum.cs: Update to changes.
930
931 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
932
933         * anonymous.cs: Ensure that we init the scope of our parent if it
934         has not been initialized yet.
935
936 2004-12-30  Duncan Mak  <duncan@ximian.com>
937
938         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
939         if field.FieldBuilder is null. Fixes #70758.
940
941         * convert.cs: Fixed some typos and updated some of the comments.
942         (ImplicitStandardConversionExists):
943         (TryImplicitIntConversion): If `target_type' is an interface and
944         the type of `ic' implements this interface, return true or a new
945         BoxedCast instead of null. This fixes #70468.
946
947 2004-12-29  Duncan Mak  <duncan@ximian.com>
948
949         * expression.cs (Argument.Emit): Check that Expr is
950         IMemoryLocation before casting to it, and report CS1510 otherwise.
951
952         This fixes #70402.
953
954 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
955
956         * statement.cs (Block.ThisVariable): remove the recursion here, to
957         make the --profile more sane.
958
959 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
960
961         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
962         assembly, by JB Evain.
963
964 2004-12-17  Raja R Harinath  <rharinath@novell.com>
965
966         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
967           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
968         "parent" refers to enclosing type/class.  "base" refers to superclass.
969
970 2004-12-17  Raja R Harinath  <rharinath@novell.com>
971
972         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
973         Ensure that we only have GlobalAttributes.
974         * attribute.cs (Attribute.Emit): Make non-virtual.
975         (GlobalAttribute.Emit): Remove.
976         (Attribute.Resolve): Make virtual.
977         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
978         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
979         the argument. Don't create one.
980         (Attribute.GetObsoleteAttribute): Likewise.
981         (Attribute.GetClsCompliantAttributeValue): Likewise.
982         * class.cs, decl.cs: Update to changes.
983
984 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
985
986         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
987         
988         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
989         
990         * statement.cs (Foreach.Resolve): Add error 186 report.
991
992 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
993
994         * expression.cs (Conditional.DoResolve): Add warning 429.
995         
996         * statement.cs (If.Resolve): Add warning 665.
997
998 2004-12-16  Raja R Harinath  <rharinath@novell.com>
999
1000         New invariant: RootContext.Tree.Types.NamespaceEntry == null
1001         except when in the parser, and in GlobalAttribute.
1002         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
1003         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
1004         RootContext.Tree.Types.NamespaceEntry once work is done.
1005         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
1006         and resets RootContext.Tree.Types.NamespaceEntry.
1007
1008 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
1009
1010         * cs-parser.jay: Don't create a block for every variable.
1011
1012 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
1013
1014         * location.cs: Provide extra information.
1015
1016         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
1017         variables from the captured environment, it is the ldarg_0.
1018
1019 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
1020
1021         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
1022         find a conclusion.
1023         
1024         * class.cs: Changed warning level for 169 to avoid developer
1025         displeasure from warning flooding. It will be changed back when they
1026         fix most of current BCL warnings.
1027         
1028         * RootContext.cs: Pushed default WarningLevel to 3.
1029         
1030         * statement.cs: Removed unused variable.
1031
1032 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
1033
1034         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
1035         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
1036         Add error 502 report.
1037         (StaticClass.DefineType): Add error 441 report.
1038         (Class.AllowedModifiersProp): New virtual property as temporary
1039         extension to AllowedModifiers.
1040         (Class.DefineType): Add error 418 report. Moved ModFlags check here
1041         to share implementation with StaticClass and don't call virtual
1042         methods from ctor.
1043         
1044         * driver.cs (MainDriver): Add error 1558 test.
1045
1046         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
1047         report. Moved error 36 test here.
1048
1049         * statement.cs (Throw.Resolve): Add error 724 report.
1050
1051         * typemanager.cs: Add out_attribute_type core type.
1052         
1053 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
1054
1055         * class.cs (TypeContainer.VerifyClsCompliance): Add error
1056         3018 report.
1057         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
1058
1059         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
1060         3017 report.
1061         
1062         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
1063
1064         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
1065         Add error 3023 report.
1066         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
1067
1068         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
1069         implementation.
1070
1071 2004-12-12  John Luke  <john.luke@gmail.com>
1072
1073         * driver.cs (AddArgs): take -- into account when
1074         adding arguments, fixes bug 65710 
1075
1076 2004-12-12  Martin Baulig  <martin@ximian.com>
1077
1078         * expression.cs (Unary.TryReduceNegative): Added support for
1079         SByteConstant and ByteConstant.
1080         (Unary.Reduce): Check error values from TryReduceNegative().
1081
1082 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
1083
1084         * attributes.cs (Attribute.Resolve): Avoid multiple error report
1085         and report exception as error 182.
1086
1087 2004-12-10  Raja R Harinath  <rharinath@novell.com>
1088
1089         * driver.cs (Main): Fix message when there are warnings.
1090
1091 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
1092
1093         * delegate.cs: Fixed my fix from yesterday, sorry about that.
1094
1095 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
1096
1097         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
1098         Reduced number of warnings.
1099         
1100         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
1101
1102 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
1103
1104         * driver.cs: Removed message.
1105
1106         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
1107
1108 2004-12-08    <vargaz@freemail.hu>
1109
1110         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
1111
1112 2004-12-08  Martin Baulig  <martin@ximian.com>
1113
1114         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
1115         instead of a CS3002 for properties and indexer.
1116
1117 2004-12-08  Martin Baulig  <martin@ximian.com>
1118
1119         * decl.cs (MemberName.ToString): Make this work again.
1120
1121 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
1122
1123         * attribute.cs (Resolve): Add error 591 detection.
1124
1125         * class.cs (FieldMember.Define): Add error 1547 detection.
1126         (Indexer.Define): Add error 620 detection.
1127         (Operator.Define): Add error 590 detection.
1128
1129         * ecore.cs: Missing argument for error 79.
1130
1131         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
1132         detection.
1133
1134 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
1135
1136         Fix #70106
1137         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
1138         only.
1139
1140 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
1141
1142         * cs-parser.jay : handle doc comments on implicit/explicit operators.
1143           Some operator comments were suppressed.
1144         * doc.cs : Implicit/explicit operator name in doc comments are like
1145           "op_Explicit(type)~returnType", so added suffix handling.
1146
1147 2004-12-07  Martin Baulig  <martin@ximian.com>
1148
1149         * decl.cs
1150         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
1151         (MemberCore.GetClsCompliantAttributeValue): Likewise.
1152         (DeclSpace.ec): New protected field; store the EmitContext here.
1153         (DeclSpace.EmitContext): New public property; moved here from
1154         `TypeContainer'.
1155         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
1156         EmitContext.
1157
1158         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
1159         (Enum.Emit): Don't create a new EmitContext.
1160
1161         * delegate.cs (Delegate.DefineType): Always create the
1162         EmitContext.
1163
1164         * iterators.cs (Iterators.DefineIterator): Create a new
1165         EmitContext and store it in `ec'.
1166
1167 2004-08-24  Martin Baulig  <martin@ximian.com>
1168
1169         * typemanager.cs
1170         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
1171         this for accessibility checks.
1172         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
1173         IsNestedFamilyAccessible.
1174         (TypeManager.IsSubclassOf): New method, do what the name actually
1175         says.   
1176
1177 2004-12-06  Raja R Harinath  <rharinath@novell.com>
1178
1179         Fix crash on cs0657-17.cs.
1180         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
1181         Use RootContext.Tree.Types, not 'new RootTypes ()'.
1182         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
1183         the case where the NamespaceEntry gets overwritten.
1184
1185 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
1186
1187         Fixed #69195, #56821
1188         * ecore.cs (ResolveBoolean): Tiny refactoring.
1189
1190         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
1191         of right expression resolving when left is false constant and
1192         operator is LogicalAnd OR true constant and operator is LogicalOr.
1193
1194         * statement.cs (ResolveUnreachable): Always reports warning.
1195
1196 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
1197
1198         * class.cs: Distinguish between 1721 and 1722 (just a little help
1199         for the programmer).
1200
1201 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
1202
1203         * delegate.cs: Only allow this on new versions of the language. 
1204
1205 2004-12-02  Duncan Mak  <duncan@ximian.com>
1206
1207         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
1208         Expression class.
1209         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
1210         here as a static method. Take an additional bool out parameter
1211         `must_do_cs1540_check' for signaling to InstanceResolve.
1212         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
1213         member field from PropertyExpr class and made it an argument of
1214         the method instead.
1215         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
1216         check for MarshalByRefObject, and report CS0122 instead of CS1540.
1217         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
1218         and `remove_accessor' as well as InstanceResolve: report CS0122
1219         where applicable.
1220
1221         Fixes #70129.
1222
1223 2004-12-03  Raja R Harinath  <rharinath@novell.com>
1224
1225         Fix test-327.cs, test-328.cs, and put in early infrastructure
1226         for eventually fixing #52697.
1227         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
1228         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
1229         from other methods.
1230         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
1231         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
1232         (VerifyUsing, error246): Update.
1233         * rootcontext.cs (RootContext.NamespaceLookup): Just use
1234         'NamespaceEntry.LookupNamespaceOrType'.
1235
1236 2004-12-03  Martin Baulig  <martin@ximian.com>
1237
1238         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
1239         method as our child, call AnonymousMethod.Compatible() on it.
1240
1241 2004-12-03  Raja R Harinath  <rharinath@novell.com>
1242
1243         Disable XML documentation support in 'basic' profile.
1244         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
1245         Redirect XmlElement to System.Object.
1246         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
1247         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
1248         * mcs.exe.sources: Add doc-bootstrap.cs.
1249         * doc-bootstrap.cs: New file.  Contains empty stub implementation
1250         of doc.cs.
1251
1252 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
1253
1254         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
1255           comments are allowed.
1256
1257 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
1258
1259         * delegate.cs: Add checks for subtypes in paramaters and return values
1260         in VerifyMethod () to add support for Covariance/Contravariance
1261         in delegates.
1262         
1263 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
1264
1265         * report.cs: Remove extra closing parenthesis.
1266
1267         * convert.cs (Error_CannotImplicitConversion): If the name of the
1268         types are the same, provide some extra information.
1269
1270         * class.cs (FieldBase): Use an unused bit field from the field to
1271         encode the `has_offset' property from the FieldMember.  This saves
1272         a couple of Ks on bootstrap compilation.
1273
1274         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
1275         method as our child, return the AnonymousMethod resolved
1276         expression.
1277
1278         * expression.cs (New.DoResolve): Allow return values from
1279         NewDelegate to also include AnonymousMethods.
1280
1281         Fixes #70150.
1282
1283 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
1284
1285         Fix bug #70102
1286         * attribute.cs (Resolve): Improved implementation of params
1287         attribute arguments.
1288
1289         * support.cs (ParameterData): Add HasParams to be faster.
1290
1291 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
1292
1293         all things are for /doc support:
1294
1295         * doc.cs: new file that supports XML documentation generation.
1296         * mcs.exe.sources: added doc.cs.
1297         * driver.cs:
1298           Handle /doc command line option.
1299           Report error 2006 instead of 5 for missing file name for /doc.
1300           Generate XML documentation when required, after type resolution.
1301         * cs-tokenizer.cs:
1302           Added support for picking up documentation (/// and /** ... */),
1303           including a new XmlCommentState enumeration.
1304         * cs-parser.jay:
1305           Added lines to fill Documentation element for field, constant,
1306           property, indexer, method, constructor, destructor, operator, event
1307           and class, struct, interface, delegate, enum.
1308           Added lines to warn incorrect comment.
1309         * rootcontext.cs :
1310           Added Documentation field (passed only when /doc was specified).
1311         * decl.cs:
1312           Added DocComment, DocCommentHeader, GenerateDocComment() and
1313           OnGenerateDocComment() and some supporting private members for
1314           /doc feature to MemberCore.
1315         * class.cs:
1316           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
1317         * delegate.cs:
1318           Added overriden DocCommentHeader.
1319         * enum.cs:
1320           Added overriden DocCommentHeader and GenerateDocComment().
1321
1322 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
1323
1324         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
1325         unwrapping the enumeration values, chain to
1326         DoConstantNumericPromotions again, so we can promote things to the
1327         fundamental types (takes care of enums that are bytes, sbytes).
1328
1329         Fixes bug #62054.
1330
1331 2004-12-01  Raja R Harinath  <rharinath@novell.com>
1332
1333         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
1334         Fix long-standing bug in type-lookup.  Use FindType instead of
1335         LookupType when ec.ResolvingTypeTree.
1336         (Attribute.ResolveType, Attribute.Resolve)
1337         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
1338         Update to changes.
1339         (Attributes.Search): Remove internal version.  Update.
1340         (Attributes.SearchMulti): Update.
1341         (Attributes.GetClsCompliantAttribute): Remove.
1342         (Attributes.GetIndexerNameAttribute): Remove.
1343         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
1344         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
1345         * class.cs (Indexer.Define): Likewise.
1346
1347 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
1348
1349         Fix bug #68790
1350         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
1351         MarshallByReference members access.
1352
1353         * expression.cs: Use CheckMarshallByRefAccess;
1354         Better error CS0197 message.
1355
1356         * report.cs: Print whole related error message.
1357
1358 2004-11-30  Raja R Harinath  <rharinath@novell.com>
1359
1360         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
1361         the current directory to help debugging.
1362
1363 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
1364
1365         * class (GetClassBases): Better error 60 report.
1366         (EventProperty): Disabled warning 67 detection.
1367
1368 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
1369
1370         Fix bug #60324
1371         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
1372
1373         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
1374         precise values.
1375
1376 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
1377
1378         Fix bug #49488
1379         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
1380
1381         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
1382
1383 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
1384
1385         * attribute.cs (Attribute.Resolve): Refine error reporting and
1386         report a cs0117 if the identifier does not exist, to distinguish
1387         from 0617 which is a miss-use of the actual identifier.
1388
1389         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
1390         between cs0070 and cs0079.
1391
1392         * class.cs (MemberBase.DoDefine): When reporting a wrong
1393         accessibility level, we use MethodCore to compare instead of
1394         Method (this was a regression in some refactoring effort).
1395
1396         So now we correctly report cs0056 again.
1397
1398         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
1399         testing the target_type (which was known to be object_type) and
1400         not the source type (which is anonymous_method).
1401
1402         Fixed reporting of error cs1660.
1403
1404         * expression.cs (UserCast.Source): Expose the underlying cast.
1405
1406         * statement.cs (Switch.SwitchGoverningType): Sort the list of
1407         allowed types to find a match to int32 first (most common).
1408
1409         In addition, it ignores any ImplicitUserConversions that did an
1410         internal implicit conversion (as the switch statement allows only
1411         one integral conversion to exist).
1412
1413         * class.cs (PartialContainer.Create): rename `name' to
1414         `member_name' for clarity.  Then replace the string calls with a
1415         call to MemberName.GetPartialName, as now using
1416         MemberName.ToString is an error (this is due to the side effects
1417         it had, that were fixed in the past).
1418
1419         This will restore the error reporting on a number of partial class
1420         errors that were missusing this (and getting an exception as a
1421         results, which is now just a plain textual warning, because
1422         yyparse debug output would crash otherwise).
1423
1424 2004-11-26  Raja R Harinath  <rharinath@novell.com>
1425
1426         * Makefile (PROGRAM_INSTALL_DIR): Remove.
1427
1428 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
1429
1430         * rootcontext.cs (LookupType): Make sure to cache lookups that
1431         don't give us a negative result. This saves about 5% of corlib
1432         compilation time.
1433
1434 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
1435
1436         * report.cs (AbstractMessage.Print): messages are sent to stderr
1437
1438         * class.cs (TypeContainer.GetClassBases): It is an error to have a
1439         non-interface in the list of interfaces (at this point, either
1440         parent was properly set, or a base class is being listed in the
1441         interfaces section).
1442
1443         This flags error 1722, and resolves the crash from bug 69259.
1444
1445 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
1446
1447         * statement.cs (Using.EmitExpressionFinally): make this work right
1448         for valuetypes. Fixes 69926.
1449
1450 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
1451
1452         * const.cs (Const.ChangeType): Cope with the "0 literal can be
1453         converted to an enum" here, before we try to change the underlying
1454         type.  This code exists, but it is a different code path than the
1455         one used while encoding constants.
1456
1457         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
1458         old bug: when converting from the null literal to a pointer,
1459         return an EmptyCast, not the NullLiteral.
1460
1461         This fixes #69921, the recent null_type changes probably made this
1462         bug more prominent.
1463
1464         (ImplicitReferenceConversionExists): In addition, resynchronized
1465         the code here, so it matches the same code in
1466         ImplicitReferenceConversionExists for the `from any class-type S
1467         to any interface-type T'.
1468         
1469
1470 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
1471
1472         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
1473
1474 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
1475
1476         * cs-parser.jay: Use verbosity accordingly. 
1477
1478 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
1479
1480         * expression.cs (Unary.ResolveOperator): Do not report warning;
1481         AddressOf reads from variable.
1482         
1483         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
1484
1485 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
1486
1487         Fix bug #69462
1488
1489         * attribute.cs (Attributable): Removed CheckTargets.
1490         (Attributes.Emit): Explicit attribute targets are tested here.
1491
1492         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
1493         not enabled for interfaces.
1494
1495         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
1496         (GetAssemblyName): Ouch next bug there.
1497
1498 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
1499
1500         * expression.cs: Error 275 added.
1501         
1502 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
1503
1504         Fix bug #69177 (Implemented decimal constant support)
1505
1506         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
1507         (BinaryFold): Add DecimalConstant.
1508
1509         * const.cs (Define): Decimal constant 
1510         (is not constant.
1511         (ChangeType): Add decimal type handling.
1512         (LookupConstantValue): Don't set value for decimal type but
1513         emit DecimalConstantAttribute. Needed for constant optimization.
1514
1515         * constant.cs (ToDecimal): New method.
1516         (ConvertToDecimal): New method.
1517         (IntConstant): Implemented ConvertToDecimal.
1518         (DecimalConstant.Emit): Emit optimized version for decimals in
1519         int range.
1520
1521         * expression.cs (ResolveOperator): Changed order of constant
1522         reduction to work correctly with native types which have
1523         overloaded operators.
1524         (ResolveMemberAccess): Extract constant value from attribute
1525         for decimal type.
1526
1527         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
1528
1529         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
1530         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
1531         (ChangeType): Decimal is special.
1532         (TypeToCoreType): Add decimal type.
1533
1534 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
1535
1536         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
1537         decimal types.
1538
1539 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
1540
1541         * class.cs (EventField.ApplyAttributeBuilder): Fix error
1542         test cs1667-5.cs.
1543
1544 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
1545
1546         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
1547
1548         * pending.cs (PendingImplementation): Grab only interfaces.
1549
1550 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
1551
1552         * statement.cs (ForeachHelperMethods): Add location member and
1553         error 202 detection.
1554
1555 2004-11-19  Raja R Harinath  <rharinath@novell.com>
1556
1557         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
1558         automatically handled by executable.make.
1559         (PROGRAM): Make profile-specific.
1560
1561 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
1562
1563         * expression.cs (DoResolveBase): Fixed wrong warning for out
1564         variables.
1565
1566 2004-11-18  Martin Baulig  <martin@ximian.com>
1567
1568         Merged latest changes into gmcs.  Please keep this comment in
1569         here, it makes it easier for me to see what changed in MCS since
1570         the last time I merged.
1571
1572 2004-11-17  Raja R Harinath  <rharinath@novell.com>
1573
1574         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
1575         (TypeHandle.GetMemberCache): New.
1576         (TypeHandle.TypeHandle): Update.
1577         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
1578         (TypeManager.LookupParentInterfacesCache):
1579         Rename from LookupInterfaceCache.  Optimize slightly.
1580         (TypeManager.MemberLookup_FindMembers): Update.
1581         * decl.cs (MemberCache.MemberCache): Set Container to null in the
1582         multi-type variant.
1583         (AddCacheContents): Rename from AddHashtable.
1584         * class.cs (TypeContainer.parent_container): Remove.
1585         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
1586         (TypeContainer.DoDefineMembers): Don't initialize it.
1587         Update to name changes.
1588         
1589 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
1590
1591         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
1592         that factors the code to check access modifiers on override.  
1593
1594         (PropertyBase): Use the code here.
1595
1596         Patch from Lluis S'anchez, fixes bug #69361.
1597
1598 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
1599
1600         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
1601         routine that is used to report the use of a captured variable
1602         whose address has been taken.
1603
1604         There are two checks: one when variables are being captured and
1605         the other check is when the address of a variable is taken. 
1606         
1607         (because an anonymous methods might be resolved before *or* after
1608         the address has been taken) and 
1609
1610         * expression.cs (Conditional.DoResolve): Remove the special
1611         casing that Martin added to trueExpr and falseExpr being both
1612         NullLiteral.  We get the right behavior now just by introducing
1613         the null_type into the compiler. 
1614
1615         * convert.cs (ExplicitConversion): Change the code to use
1616         null_type instead of testing `expr is NullLiteral'.
1617         (ImplicitConversionStandard): use null_type too.
1618         (ImplicitReferenceConversionExists): use null_type too.
1619         (ImplicitReferenceConversion): use null_type too.
1620
1621         * literal.cs: The type of `NullLiteral' is now null_type instead
1622         of object_type. 
1623         (Resolve): Set the type here.
1624
1625         * typemanager.cs: Introduce null_type.
1626
1627 2004-11-17  Martin Baulig  <martin@ximian.com>
1628
1629         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
1630         direction, like FindMembers() does.  Fixes #69546, testcase is in
1631         test-315.cs.    
1632
1633 2004-11-16  Martin Baulig  <martin@ximian.com>
1634
1635         This is based on a patch from Marek Safar, see bug #69082.
1636         Fixes bugs #63705 and #67130.
1637
1638         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
1639         method; create a MemberCache for an interface type and cache the
1640         result.
1641
1642         * decl.cs (IMemberContainer.ParentContainer): Removed.
1643         (IMemberContainer.ParentCache): New property.
1644         (MemberCache.SetupCacheForInterface): Removed.
1645         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
1646         to create a cache for an interface's "parent".
1647
1648         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
1649         interfaces too.
1650
1651 2004-11-16  Martin Baulig  <martin@ximian.com>
1652
1653         Merged back from gmcs; these changes already went into gmcs a
1654         couple of weeks ago.
1655
1656         * typemanager.cs
1657         (TypeManager.AddUserType): Removed the `ifaces' argument.
1658         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
1659         `TypeExpr []'.
1660         (TypeManager.AddUserInterface): Removed.
1661         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
1662         `TypeExpr []'.
1663         (TypeManager.GetInterfaces): Likewise.
1664         (TypeManager.GetExplicitInterfaces): Likewise.
1665
1666         * ecore.cs (TypeExpr.GetInterfaces): Removed.
1667
1668         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
1669         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
1670
1671 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
1672
1673         * statement.cs: Avoid adding bools to a hashtable.
1674
1675 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
1676
1677         * expression.cs (Invocation.OverloadResolve): Flag error if we are
1678         calling an unsafe method from a safe location.
1679
1680 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
1681
1682         Fix #69167
1683         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
1684
1685 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
1686
1687         * namespace.cs (VerifyUsing): use GetPartialName instead of
1688         ToString. 
1689
1690 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
1691
1692         * statement.cs (Return.Resolve): Fix regression in typo: if
1693         `in_exc', we have to request a NeedReturnLabel, this was a typo
1694         introduced in the anonymous method check-in.  Fixes #69131.
1695
1696         * Indexers were using the ShortName when defining themselves,
1697         causing a regression in the compiler bootstrap when applying the
1698         patch from 2004-11-02 (first part), now they use their full name
1699         and the bug is gone.
1700
1701 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
1702
1703         * driver.cs: Strip the path from the names of embedded resources. Fixes
1704         #68519.
1705
1706 2004-11-04  Raja R Harinath  <rharinath@novell.com>
1707
1708         Fix error message regression: cs0104-2.cs.
1709         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
1710         (AliasEntry.Resolve): Update.
1711         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
1712         'silent' flag.
1713         (RootContext.LookupType): Update.
1714
1715 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
1716
1717         * cs-parser.jay: Add support for handling accessor modifiers
1718         * class: Add support port accessor modifiers and error checking,
1719         define PropertyMethod.Define as virtual (not abstract anymore)
1720         * ecore.cs: Add checking for proeprties access with access modifiers
1721         * iterators.cs: Modify Accessor constructor call based in the modified
1722         constructor
1723 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
1724
1725         * expression.cs (StringConcat): Handle being called twice,
1726         as when we have a concat in a field init with more than two
1727         ctors in the class
1728
1729 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
1730
1731         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
1732         special case explicit implementations, we should always produce
1733         the .property or .event declaration.
1734         
1735         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
1736         since it will not return correct data if people use this
1737         unresolved in the presence of using statements (see test-313).
1738
1739         * class.cs (MethodData.Define): If we are an explicit interface
1740         implementation, set the method name to the full name of the
1741         interface plus the name of the method.  
1742
1743         Notice that using the method.MethodName.GetFullName() does not
1744         work, as it will only contain the name as declared on the source
1745         file (it can be a shorthand in the presence of using statements)
1746         and not the fully qualifed type name, for example:
1747
1748         using System;
1749
1750         class D : ICloneable {
1751                 object ICloneable.Clone ()  {
1752                 }
1753         }
1754
1755         Would produce a method called `ICloneable.Clone' instead of
1756         `System.ICloneable.Clone'.
1757
1758         * namespace.cs (Alias.Resolve): Use GetPartialName.
1759         
1760 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
1761
1762         * cs-parser.jay: Add error 1055 report.
1763
1764 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
1765
1766         * assign.cs (Assign.DoResolve): Only do the transform of
1767         assignment into a New if the types are compatible, if not, fall
1768         through and let the implicit code deal with the errors and with
1769         the necessary conversions. 
1770
1771 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
1772
1773         * cs-parser.jay: Add error 1031 report.
1774
1775         * cs-tokenizer.cs: Add location for error 1038.
1776
1777 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1778
1779         * cs-parser.jay: Add error 1016 report.
1780
1781 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1782
1783         * cs-parser.jay: Add errors 1575,1611 report.
1784
1785 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1786
1787         * cs-parser.jay: Add error 1001 report.
1788
1789 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1790
1791         Fix #68850
1792         * attribute.cs (GetMarshal): Add method argument for
1793         caller identification.
1794
1795         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
1796         agument for GetMarshal and RuntimeMissingSupport.
1797
1798 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1799
1800         * attribute.cs (ExtractSecurityPermissionSet): Removed
1801         TypeManager.code_access_permission_type.
1802
1803         * typemanager.cs: Removed TypeManager.code_access_permission_type.
1804
1805 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
1806
1807         * expression.cs (LocalVariableReference.DoResolveLValue): Check
1808         for obsolete use of a variable here.   Fixes regression on errors
1809         cs0619-25 and cs0619-26.
1810
1811 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
1812
1813         Fix #62358, implemented security attribute encoding.
1814
1815         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
1816         Tests permitted SecurityAction for assembly or other types.
1817         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
1818         data from SecurityPermissionAttribute to PermisionSet class.
1819
1820         * class.cs (ApplyAttributeBuilder): Added special handling
1821         for System.Security.Permissions.SecurityAttribute based types.
1822
1823         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
1824         special handling for System.Security.Permissions.SecurityAttribute
1825         based types.
1826
1827         * enum.cs (ApplyAttributeBuilder): Added special handling
1828         for System.Security.Permissions.SecurityAttribute based types.
1829
1830         * parameter.cs (ApplyAttributeBuilder): Added special handling
1831         for System.Security.Permissions.SecurityAttribute based types.
1832
1833         * rootcontext.cs: Next 2 core types.
1834
1835         * typemanager.cs (TypeManager.security_permission_attr_type):
1836         Built in type for the SecurityPermission Attribute.
1837         (code_access_permission_type): Build in type.
1838
1839 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
1840
1841         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
1842         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
1843         all of this information into
1844         EmitContext.EmitCapturedVariableInstance.
1845         
1846         * codegen.cs (EmitCapturedVariableInstance): move here the
1847         funcionality of emitting an ldarg.0 in the presence of a
1848         remapping.   This centralizes the instance emit code.
1849
1850         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
1851         then emit a load of this: it means that we have reached the
1852         topmost ScopeInfo: the one that contains the pointer to the
1853         instance of the class hosting the anonymous method.
1854
1855         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
1856         captures to the topmost CaptureContext.
1857
1858 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
1859
1860         * expression.cs (LocalVariableReference): Move the knowledge about
1861         the iterators into codegen's EmitCapturedVariableInstance.
1862
1863 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
1864
1865         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
1866         all code paths return a value from an anonymous method (it is the
1867         same as the 161 error, but for anonymous methods).
1868
1869 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
1870
1871         The introduction of anonymous methods in the compiler changed
1872         various ways of doing things in the compiler.  The most
1873         significant one is the hard split between the resolution phase
1874         and the emission phases of the compiler.
1875
1876         For instance, routines that referenced local variables no
1877         longer can safely create temporary variables during the
1878         resolution phase: they must do so from the emission phase,
1879         since the variable might have been "captured", hence access to
1880         it can not be done with the local-variable operations from the runtime.
1881         
1882         * statement.cs 
1883
1884         (Block.Flags): New flag `IsTopLevel' to indicate that this block
1885         is a toplevel block.
1886
1887         (ToplevelBlock): A new kind of Block, these are the blocks that
1888         are created by the parser for all toplevel method bodies.  These
1889         include methods, accessors and anonymous methods.
1890
1891         These contain some extra information not found in regular blocks:
1892         A pointer to an optional CaptureContext (for tracking captured
1893         local variables and parameters).  A pointer to the parent
1894         ToplevelBlock.
1895         
1896         (Return.Resolve): Catch missmatches when returning a value from an
1897         anonymous method (error 1662).
1898         Invoke NeedReturnLabel from the Resolve phase instead of the emit
1899         phase.
1900
1901         (Break.Resolve): ditto.
1902
1903         (SwitchLabel): instead of defining the labels during the
1904         resolution phase, we now turned the public ILLabel and ILLabelCode
1905         labels into methods called GetILLabelCode() and GetILLabel() that
1906         only define the label during the Emit phase.
1907
1908         (GotoCase): Track the SwitchLabel instead of the computed label
1909         (its contained therein).  Emit the code by using
1910         SwitchLabel.GetILLabelCode ().
1911
1912         (LocalInfo.Flags.Captured): A new flag has been introduce to track
1913         whether the Local has been captured or not.
1914
1915         (LocalInfo.IsCaptured): New property, used to tell whether the
1916         local has been captured.
1917         
1918         * anonymous.cs: Vastly updated to contain the anonymous method
1919         support.
1920
1921         The main classes here are: CaptureContext which tracks any
1922         captured information for a toplevel block and ScopeInfo used to
1923         track the activation frames for various local variables.   
1924
1925         Each toplevel block has an optional capture context associated
1926         with it.  When a method contains an anonymous method both the
1927         toplevel method and the anonymous method will create a capture
1928         context.   When variables or parameters are captured, they are
1929         recorded on the CaptureContext that owns them, for example:
1930
1931         void Demo () {
1932              int a;
1933              MyDelegate d = delegate {
1934                  a = 1;
1935              }
1936         }
1937
1938         Here `a' will be recorded as captured on the toplevel
1939         CapturedContext, the inner captured context will not have anything
1940         (it will only have data if local variables or parameters from it
1941         are captured in a nested anonymous method.
1942
1943         The ScopeInfo is used to track the activation frames for local
1944         variables, for example:
1945
1946         for (int i = 0; i < 10; i++)
1947                 for (int j = 0; j < 10; j++){
1948                    MyDelegate d = delegate {
1949                         call (i, j);
1950                    }
1951                 }
1952
1953         At runtime this captures a single captured variable `i', but it
1954         captures 10 different versions of the variable `j'.  The variable
1955         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
1956         recorded on a child.  
1957
1958         The toplevel ScopeInfo will also track information like the `this'
1959         pointer if instance variables were referenced (this is necessary
1960         as the anonymous method lives inside a nested class in the host
1961         type of the method). 
1962
1963         (AnonymousMethod): Expanded to track the Toplevel, implement
1964         `AnonymousMethod.Compatible' to tell whether an anonymous method
1965         can be converted to a target delegate type. 
1966
1967         The routine now also produces the anonymous method content
1968
1969         (AnonymousDelegate): A helper class that derives from
1970         DelegateCreation, this is used to generate the code necessary to
1971         produce the delegate for the anonymous method that was created. 
1972
1973         * assign.cs: API adjustments for new changes in
1974         Convert.ImplicitStandardConversionExists.
1975
1976         * class.cs: Adjustments to cope with the fact that now toplevel
1977         blocks are of type `ToplevelBlock'. 
1978
1979         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
1980         insteda of standard blocks.
1981
1982         Flag errors if params arguments are passed to anonymous methods.
1983
1984         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
1985         `CurrentAnonymousMethod' which points to the current Anonymous
1986         Method.  The variable points to the AnonymousMethod class that
1987         holds the code being compiled.  It is set in the new EmitContext
1988         created for the anonymous method.
1989
1990         (EmitContext.Phase): Introduce a variable and an enumeration to
1991         assist in enforcing some rules about when and where we are allowed
1992         to invoke certain methods (EmitContext.NeedsReturnLabel is the
1993         only one that enfonces this right now).
1994
1995         (EmitContext.HaveCaptureInfo): new helper method that returns
1996         whether we have a CapturedContext initialized.
1997
1998         (EmitContext.CaptureVariable): New method used to register that a
1999         LocalInfo must be flagged for capturing. 
2000
2001         (EmitContext.CapturedParameter): New method used to register that a
2002         parameters must be flagged for capturing. 
2003         
2004         (EmitContext.CapturedField): New method used to register that a
2005         field must be flagged for capturing. 
2006
2007         (EmitContext.HaveCapturedVariables,
2008         EmitContext.HaveCapturedFields): Return whether there are captured
2009         variables or fields. 
2010
2011         (EmitContext.EmitMethodHostInstance): This is used to emit the
2012         instance for the anonymous method.  The instance might be null
2013         (static methods), this (for anonymous methods that capture nothing
2014         and happen to live side-by-side with the current method body) or a
2015         more complicated expression if the method has a CaptureContext.
2016
2017         (EmitContext.EmitTopBlock): Routine that drives the emission of
2018         code: it will first resolve the top block, then emit any metadata
2019         and then emit the code.  The split is done so that we can extract
2020         any anonymous methods and flag any captured variables/parameters.
2021         
2022         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
2023         during this phase, the ILGenerator should not be used as labels
2024         and local variables declared here might not be accessible to any
2025         code that is part of an anonymous method.  
2026
2027         Exceptions to this include the temporary variables that are
2028         created by some statements internally for holding temporary
2029         variables. 
2030         
2031         (EmitContext.EmitMeta): New routine, in charge of emitting all the
2032         metadata for a cb
2033
2034         (EmitContext.TemporaryReturn): This method is typically called
2035         from the Emit phase, and its the only place where we allow the
2036         ReturnLabel to be defined other than the EmitMeta.  The reason is
2037         that otherwise we would have to duplicate a lot of logic in the
2038         Resolve phases of various methods that today is on the Emit
2039         phase. 
2040
2041         (EmitContext.NeedReturnLabel): This no longer creates the label,
2042         as the ILGenerator is not valid during the resolve phase.
2043
2044         (EmitContext.EmitThis): Extended the knowledge in this class to
2045         work in anonymous methods in addition to iterators. 
2046
2047         (EmitContext.EmitCapturedVariableInstance): This emits whatever
2048         code is necessary on the stack to access the instance to a local
2049         variable (the variable will be accessed as a field).
2050
2051         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
2052         EmitContext.EmitAddressOfParameter): Routines to support
2053         parameters (not completed at this point). 
2054         
2055         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
2056         will also remove the parameters.
2057
2058         * convert.cs (Convert): Define a `ConstantEC' which points to a
2059         null.  This is just to prefity some code that uses
2060         ImplicitStandardConversion code and do not have an EmitContext
2061         handy.
2062
2063         The idea is to flag explicitly that at that point in time, it is
2064         known that the conversion will not trigger the delegate checking
2065         code in implicit conversions (which requires a valid
2066         EmitContext). 
2067
2068         Everywhere: pass new EmitContext parameter since
2069         ImplicitStandardConversionExists now requires it to check for
2070         anonymous method conversions. 
2071
2072         (Convert.ImplicitStandardConversionExists): If the type of an
2073         expression is the anonymous_method_type, and the type is a
2074         delegate, we invoke the AnonymousMethod.Compatible method to check
2075         whether an implicit conversion is possible. 
2076
2077         (Convert.ImplicitConversionStandard): Only do implicit method
2078         group conversions if the language level is not ISO_1.
2079
2080         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
2081         MethodInfo for the Invoke method.  used by Delegate and
2082         AnonymousDelegate.
2083
2084         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
2085         method conversions if the target type is a delegate.
2086
2087         Removed extra debugging nops.
2088
2089         (LocalVariableReference): Turn the `local_info' into a public
2090         field. 
2091
2092         Add `prepared' field, the same hack used for FieldExprs to cope
2093         with composed assignments, as Local variables do not necessarily
2094         operate purely on the stack as they used to: they can be captured
2095         fields. 
2096
2097         Add `temp' for a temporary result, like fields.
2098
2099         Refactor DoResolve and DoResolveLValue into DoResolveBase.
2100
2101         It now copes with Local variables that are captured and emits the
2102         proper instance variable to load it from a field in the captured
2103         case. 
2104
2105         (ParameterReference.DoResolveBase): During the resolve phase,
2106         capture parameters if we are in an anonymous method.
2107
2108         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
2109         anonymous method, use the EmitContext helper routines to emit the
2110         parameter reference.
2111
2112         * iterators.cs: Set RemapToProxy to true/false during the
2113         EmitDispose class.
2114
2115         * parameters.cs (GetParameterByName): New helper method. 
2116
2117         * typemanager.cs (anonymous_method_type) a new type that
2118         represents an anonyous method.  This is always an internal type,
2119         used as a fencepost to test against the anonymous-methodness of an
2120         expression. 
2121         
2122 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
2123
2124         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
2125         561 report.
2126         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
2127
2128 2004-10-18  Martin Baulig  <martin@ximian.com>
2129
2130         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
2131         `Type' directly, but call ResolveType() on it.
2132         (Catch.Resolve): Likewise.
2133         (Foreach.Resolve): Likewise.
2134
2135 2004-10-18  Martin Baulig  <martin@ximian.com>
2136
2137         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
2138         `Type' directly, but call ResolveType() on it.
2139         (Probe.DoResolve): Likewise.
2140         (ArrayCreation.LookupType): Likewise.
2141         (TypeOf.DoResolve): Likewise.
2142         (SizeOf.DoResolve): Likewise.
2143
2144 2004-10-18  Martin Baulig  <martin@ximian.com>
2145
2146         * expression.cs (Invocation.BetterFunction): Put back
2147         TypeManager.TypeToCoreType().
2148
2149 2004-10-18  Raja R Harinath  <rharinath@novell.com>
2150
2151         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
2152         the ResolveType.
2153
2154 2004-10-18  Martin Baulig  <martin@ximian.com>
2155
2156         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
2157         `Type' directly, but call ResolveType() on it.
2158
2159 2004-10-18  Martin Baulig  <martin@ximian.com>
2160
2161         * class.cs (FieldMember.Define): Don't access the TypeExpr's
2162         `Type' directly, but call ResolveType() on it.
2163         (MemberBase.DoDefine): Likewise.
2164
2165         * expression.cs (New.DoResolve): Don't access the TypeExpr's
2166         `Type' directly, but call ResolveType() on it.
2167         (ComposedCast.DoResolveAsTypeStep): Likewise.
2168
2169         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
2170         `Type' directly, but call ResolveType() on it.
2171
2172 2004-10-17  John Luke  <john.luke@gmail.com>
2173
2174         * class.cs (Operator.GetSignatureForError): use CSharpName
2175
2176         * parameter.cs (Parameter.GetSignatureForError): Returns
2177         correct name even if was not defined.
2178
2179 2004-10-13  Raja R Harinath  <rharinath@novell.com>
2180
2181         Fix #65816.
2182         * class.cs (TypeContainer.EmitContext): New property.
2183         (DefineNestedTypes): Create an emitcontext for each part.
2184         (MethodCore.DoDefineParameters): Use container's emitcontext.
2185         Pass type array to InternalParameters.
2186         (MemberBase.DoDefine): Use container's emitcontext.
2187         (FieldMember.Define): Likewise.
2188         (Event.Define): Likewise.
2189         (SetMethod.GetParameterInfo): Change argument to EmitContext.
2190         Pass type array to InternalParameters.
2191         (SetIndexerMethod.GetParameterInfo): Likewise.
2192         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
2193         * delegate.cs (Define): Pass emitcontext to
2194         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
2195         array to InternalParameters.
2196         * expression.cs (ParameterReference.DoResolveBase): Pass
2197         emitcontext to GetParameterInfo.
2198         (ComposedCast.DoResolveAsTypeStep): Remove check on
2199         ec.ResolvingTypeTree.
2200         * parameter.cs (Parameter.Resolve): Change argument to
2201         EmitContext.  Use ResolveAsTypeTerminal.
2202         (Parameter.GetSignature): Change argument to EmitContext.
2203         (Parameters.ComputeSignature): Likewise.
2204         (Parameters.ComputeParameterTypes): Likewise.
2205         (Parameters.GetParameterInfo): Likewise.
2206         (Parameters.ComputeAndDefineParameterTypes): Likewise.
2207         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
2208         * support.cs (InternalParameters..ctor): Remove variant that takes
2209         a DeclSpace.
2210         * typemanager.cs (system_intptr_expr): New.
2211         (InitExpressionTypes): Initialize it.
2212
2213 2004-10-12  Chris Toshok  <toshok@ximian.com>
2214
2215         * cs-parser.jay: fix location for try_statement and catch_clause.
2216
2217 2004-10-11  Martin Baulig  <martin@ximian.com>
2218
2219         * report.cs: Don't make --fatal abort on warnings, we have
2220         -warnaserror for that.
2221
2222 2004-10-07  Raja R Harinath  <rharinath@novell.com>
2223
2224         More DeclSpace.ResolveType avoidance.
2225         * decl.cs (MemberCore.InUnsafe): New property.
2226         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
2227         with newly created EmitContext.
2228         (FieldMember.Define): Likewise.
2229         * delegate.cs (Delegate.Define): Likewise.
2230         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
2231         only if normal name-lookup fails.
2232         (TypeExpr.DoResolve): Enable error-checking.
2233         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
2234         (SizeOf.DoResolve): Likewise.
2235         (ComposedCast.DoResolveAsTypeStep): Likewise.
2236         (StackAlloc.DoResolve): Likewise.
2237         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
2238         (Block.Unsafe): New property.
2239         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
2240         (Unsafe): Set 'unsafe' flag of contained block.
2241         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
2242         (Fixed.Resolve): Likewise.
2243         (Catch.Resolve): Likewise.
2244         (Using.ResolveLocalVariableDecls): Likewise.
2245         (Foreach.Resolve): Likewise.
2246
2247 2004-10-05  John Luke <john.luke@gmail.com>
2248
2249         * cs-parser.jay: add location to error CS0175
2250
2251 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
2252
2253         * ecore.cs (Expression.Constantity): Add support for turning null
2254         into a constant.
2255
2256         * const.cs (Const.Define): Allow constants to be reference types
2257         as long as the value is Null.
2258
2259 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
2260
2261         * namespace.cs (NamespaceEntry.Using): No matter which warning
2262         level is set, check if this namespace name has already been added.
2263
2264 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
2265
2266         * expression.cs: reftype [!=]= null should always use br[true,false].
2267         # 67410
2268
2269 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
2270
2271         Fix #67108
2272         * attribute.cs: Enum conversion moved to 
2273         GetAttributeArgumentExpression to be applied to the all
2274         expressions.
2275
2276 2004-10-01  Raja R Harinath  <rharinath@novell.com>
2277
2278         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
2279         * class.c (TypeContainer.DefineType): Flag error if
2280         base types aren't accessible due to access permissions.
2281         * decl.cs (DeclSpace.ResolveType): Move logic to
2282         Expression.ResolveAsTypeTerminal.
2283         (DeclSpace.ResolveTypeExpr): Thin layer over
2284         Expression.ResolveAsTypeTerminal.
2285         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
2286         Refactor code into NestedAccess.  Use it.
2287         (DeclSpace.NestedAccess): New.
2288         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
2289         argument to silence errors.  Check access permissions.
2290         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
2291         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
2292         (Cast.DoResolve): Likewise.
2293         (New.DoResolve): Likewise.
2294         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
2295         (TypeOf.DoResolve): Likewise.
2296
2297         * expression.cs (Invocation.BetterConversion): Return the Type of
2298         the better conversion.  Implement section 14.4.2.3 more faithfully.
2299         (Invocation.BetterFunction): Make boolean.  Make correspondence to
2300         section 14.4.2.2 explicit.
2301         (Invocation.OverloadResolve): Update.
2302         (Invocation): Remove is_base field.
2303         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
2304         (Invocation.Emit): Likewise.
2305
2306 2004-09-27  Raja R Harinath  <rharinath@novell.com>
2307
2308         * README: Update to changes.
2309
2310 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
2311
2312         * cs-parser.jay: Reverted 642 warning fix.
2313
2314 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
2315
2316         Fix bug #66615
2317         * decl.cs (FindMemberWithSameName): Indexer can have more than
2318         1 argument.
2319
2320 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
2321
2322         * expression.cs (LocalVariableReference.DoResolveLValue):
2323         Do not report warning 219 for out values.
2324         (EmptyExpression.Null): New member to avoid extra allocations.
2325
2326 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
2327
2328         * cs-parser.jay: Fix wrong warning 642 report.
2329
2330         * cs-tokenizer.cs (CheckNextToken): New helper;
2331         Inspect next character if is same as expected.
2332
2333 2004-09-23  Martin Baulig  <martin@ximian.com>
2334
2335         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
2336         (Convert.ImplicitReferenceConversionExists): Likewise.
2337
2338 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
2339
2340         * class.cs (Operator.Define): Add error 448 and 559 report.
2341
2342 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
2343
2344         * class.cs (MemberBase.IsTypePermitted): New protected
2345         method for checking error CS0610.
2346
2347 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
2348
2349         * class.cs (TypeContainer.HasExplicitLayout): New property
2350         Returns whether container has StructLayout attribute set Explicit.
2351         (FieldMember): New abstract class for consts and fields.
2352         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
2353         (Field): Reuse FieldMember.
2354
2355         * const.cs (Const): Reuse FieldMember.
2356
2357         * rootcontext.cs: EmitConstants call moved to class.
2358
2359 2004-09-22  Martin Baulig  <martin@ximian.com>
2360
2361         Thanks to Peter Sestoft for this bug report.
2362
2363         * expression.cs (Conditional): If both the `trueExpr' and the
2364         `falseExpr' is a NullLiteral, return a NullLiteral.
2365
2366 2004-09-22  Martin Baulig  <martin@ximian.com>
2367
2368         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
2369         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
2370         for the "get_Current" call.
2371
2372 2004-09-22  Martin Baulig  <martin@ximian.com>
2373
2374         Marek and me just fixed one of our oldest bugs: #28562 :-)
2375
2376         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
2377
2378         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
2379         we're an EnumConstant, just return that.
2380         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
2381         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
2382         to get the value which'll actually be written into the attribute.
2383         However, we have to use GetValue() to access the attribute's value
2384         in the compiler.        
2385
2386 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
2387
2388         * constant.cs (Constant.IsNegative): New abstract property
2389         IsNegative.
2390
2391         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
2392         (StackAlloc.DoResolve): Reused IsNegative.
2393
2394 2004-09-21  Martin Baulig  <martin@ximian.com>
2395
2396         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
2397         if we're used in an iterator, we may be called from different
2398         methods.
2399
2400         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
2401         we actually have an exception block.
2402
2403 2004-09-20  John Luke <jluke@cfl.rr.com>
2404
2405         * class.cs, cs-parser.jay: Improve the error report for 1520:
2406         report the actual line where the error happens, not where the
2407         class was declared.
2408
2409         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
2410         Pass location information that was available elsewhere.
2411
2412 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
2413
2414         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
2415         runtime to delay sign assemblies.
2416
2417 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
2418
2419         * cs-parser.jay: Do not report the stack trace, this is barely
2420         used nowadays.
2421
2422 2004-08-22  John Luke  <john.luke@gmail.com>
2423  
2424         * driver.cs : check that a resource id is not already used
2425         before adding it, report CS1508 if it is, bug #63637
2426
2427 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
2428
2429         * ecore.cs: Removed dead code.
2430
2431 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
2432
2433         * class.cs: Do not report warning CS0067 on the interfaces.
2434
2435 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
2436
2437         * cs-parser.jay: Add error 504 report.
2438
2439 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
2440
2441         * rootcontext.cs: WarningLevel is 4 by default now.
2442
2443         * statement.cs (Fixed.Resolve): Do not null
2444         VariableInfo.
2445
2446 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
2447
2448         Fixed bug #55780
2449         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
2450         deep search when property is not virtual.
2451         (PropertyExpr.ResolveAccessors): Make one call for both
2452         accessors.
2453
2454 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
2455
2456         Fixed bug #65766
2457         * statement.cs: Error 152 report constains also location.
2458
2459 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
2460
2461         Fixed bug #65766
2462         * const.cs: Explicitly set constant as static.
2463
2464 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
2465
2466         Fixed bug #64226
2467         * cs-parser.jay: Add error 1017 report.
2468
2469 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
2470
2471         Fixed bug #59980, #64224
2472         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
2473
2474         * typemanager.cs (IsSpecialMethod): Simplified
2475
2476 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
2477
2478         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
2479         condition with better params.
2480
2481 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
2482
2483         Fixed bug #65238
2484         * attribute.cs (Resolve): Property has to have both
2485         accessors.
2486
2487 2004-09-14  Martin Baulig  <martin@ximian.com>
2488
2489         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
2490
2491 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
2492
2493         Fixed bug #61902
2494         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
2495         called and is obsolete then this member suppress message
2496         when call is inside next [Obsolete] method or type.
2497
2498         * expression.cs: Use TestObsoleteMethodUsage member.
2499
2500 2004-09-14  Martin Baulig  <martin@ximian.com>
2501
2502         * cs-parser.jay: Sync a bit with the GMCS version.
2503
2504 2004-09-14  Martin Baulig  <martin@ximian.com>
2505
2506         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
2507         (CSharpParser.yacc_verbose_flag): New public field.
2508
2509         * genericparser.cs: Removed.
2510
2511 2004-09-14  Raja R Harinath  <rharinath@novell.com>
2512
2513         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
2514
2515 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
2516
2517         * class.cs (MethodCore.CheckBase): Fix bug #65757.
2518
2519 2004-09-10  Martin Baulig  <martin@ximian.com>
2520
2521         Backported my MemberName changes from GMCS into MCS.
2522
2523         - we are now using a special `MemberName' class instead of using
2524         strings; in GMCS, the `MemberName' also contains the type
2525         arguments.
2526
2527         - changed the grammar rules a bit:
2528           * the old `member_name' is now a `namespace_or_type_name':
2529             The rule is that we use `namespace_or_type_name' everywhere
2530             where we expect either a "member name" (GetEnumerator) or a
2531             "member name" with an explicit interface name
2532             (IEnumerable.GetEnumerator).
2533             In GMCS, the explicit interface name may include type arguments
2534             (IEnumerable<T>.GetEnumerator).
2535           * we use `member_name' instead of just `IDENTIFIER' for
2536             "member names":
2537             The rule is that we use `member_name' wherever a member may
2538             have type parameters in GMCS.       
2539
2540         * decl.cs (MemberName): New public class.
2541         (MemberCore.MemberName): New public readonly field.
2542         (MemberCore.ctor): Take a `MemberName' argument, not a string.
2543         (DeclSpace): Likewise.
2544
2545         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
2546         * enum.cs (Enum.ctor): Likewise.
2547
2548         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
2549         MemberName.     
2550         (AliasEntry.ctor): Take a MemberName, not an Expression.
2551         (AliasEntry.UsingAlias): Likewise.
2552
2553         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
2554         (IMethodData.MemberName): Changed type from string to MemberName.
2555         (MemberBase.ExplicitInterfaceName): Likewise.
2556         (AbstractPropertyEventMethod.SetupName): Make this private.
2557         (AbstractPropertyEventMethod.ctor): Added `string prefix'
2558         argument; compute the member name here.
2559         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
2560         on the `member.MemberName' and the `prefix'.
2561
2562         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
2563         not `type_name'.
2564         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
2565         thus, we get a `MemberName' instead of a `string'.  These
2566         declarations may have type parameters in GMCS.
2567         (interface_method_declaration, delegate_declaration): Likewise.
2568         (class_declaration, interface_declaration): Likewise.
2569         (method_header): Use `namespace_or_type_name' instead of
2570         `member_name'.  We may be an explicit interface implementation.
2571         (property_declaration, event_declaration): Likewise.
2572         (member_name): This is now just an `IDENTIFIER', not a
2573         `namespace_or_type_name'.
2574         (type_name, interface_type): Removed.
2575         (namespace_or_type_name): Return a MemberName, not an Expression.
2576         (primary_expression): Use `member_name' instead of `IDENTIFIER';
2577         call GetTypeExpression() on the MemberName to get an expression.
2578         (IndexerDeclaration.interface_type): Changed type from string to
2579         MemberName.
2580         (MakeName): Operate on MemberName's instead of string's.
2581
2582 2004-09-13  Raja R Harinath  <rharinath@novell.com>
2583
2584         Fix bug #55770.
2585         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
2586         (NamespaceEntry.Lookup): Add new argument to flag if we want the
2587         lookup to avoid symbols introduced by 'using'.
2588         * rootcontext.cs (NamespaceLookup): Update.
2589
2590 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
2591
2592         * class.cs (TypeContainer.DoDefineMembers): Do not call
2593         DefineDefaultConstructor for static classes.
2594
2595 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
2596
2597         * attribute.cs (Attribute.Resolve): Add error 653 report.
2598
2599         * class.cs (Class.ApplyAttributeBuilder): Add error 641
2600         report.
2601         (Method.ApplyAttributeBuilder): Add error 685 report.
2602         (Operator.Define): Add error 564 report.
2603
2604         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
2605
2606         * expression.cs (Invocation.DoResolve): Add error
2607         245 and 250 report.
2608
2609         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
2610         error 674 report.
2611
2612 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2613
2614         * class.cs (ConstructorInitializer.Resolve):
2615         Wrong error number (515->516).
2616
2617 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2618
2619         * class.cs (Indexer.Define): Add error 631 report.
2620
2621 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2622
2623         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
2624
2625 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2626
2627         * expression.cs (Probe.DoResolve): Add error CS0241 report.
2628
2629 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
2630
2631         * cs-parser.jay: Added error CS0241 report.
2632
2633 2004-09-10  Raja R Harinath  <rharinath@novell.com>
2634
2635         * cs-parser.jay (fixed_statement): Introduce a scope for the
2636         declaration in the 'fixed' statement.
2637
2638 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2639
2640         * cs-parser.jay: Added CS0230 error report.
2641
2642 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2643
2644         * cs-parser.jay: Added errors CS0231 and CS0257 report.
2645
2646 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2647
2648         * expression.cs (Argument.Resolve): Added error CS0192 and
2649         CS0199 report.
2650
2651 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2652
2653         C# 2.0 #pragma warning feature
2654
2655         * cs-tokenizer.cs (PreProcessPragma): New method; 
2656         Handles #pragma directive.
2657
2658         * report.cs (WarningRegions): New class; Support
2659         class for #pragma warning directive. It tests whether
2660         warning is enabled for a given line.
2661
2662 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
2663
2664         * const.cs: Add more descriptive error report, tahnks to
2665         Sebastien. 
2666
2667 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
2668
2669         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
2670
2671 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
2672
2673         * expression.cs: Apply patch from Ben: Remove dead code from
2674         ArrayCreation, and remove the TurnintoConstant call in const.cs,
2675         as that code just threw an exception anwyays.
2676
2677         * const.cs: Remove the call to the turnintoconstant, for details
2678         see bug: #63144
2679         
2680         * literal.cs: The type of the null-literal is the null type;  So
2681         we use a placeholder type (literal.cs:System.Null, defined here)
2682         for it.
2683
2684         * expression.cs (Conditional.DoResolve): Remove some old code that
2685         is no longer needed, conversions have been fixed.
2686
2687         (ArrayCreationExpression.DoResolve): Return false if we fail to
2688         resolve the inner expression.
2689
2690 2004-09-07  Raja R Harinath  <rharinath@novell.com>
2691
2692         Fix test-290.cs.
2693         * cs-parser.jay (delegate_declaration): Record a delegate
2694         declaration as a type declaration.
2695         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
2696
2697 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
2698
2699         * parameter.cs: Do not crash if the type can not be resolved. 
2700
2701         * expression.cs: Report errors with unsafe pointers, fixes #64896
2702
2703 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
2704
2705         * expression.cs: Pointer arith always needs to do a conv.i
2706         if the operand is a long. fix 65320
2707
2708 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
2709
2710         Fixed cs0619-37.cs, cs0619-38.cs
2711
2712         * enum.cs (GetObsoleteAttribute): Removed.
2713
2714         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
2715         on Enum member is double staged. The first is tested member
2716         and then enum.
2717
2718 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
2719
2720         Fixed #56986, #63631, #65231
2721
2722         * class.cs: (TypeContainer.AddToMemberContainer): New method,
2723         adds member to name container.
2724         (TypeContainer.AddToTypeContainer): New method, adds type to
2725         name container.
2726         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
2727         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
2728         AddOperator): Simplified by reusing AddToMemberContainer.
2729         (TypeContainer.UserDefinedStaticConstructor): Changed to property
2730         instead of field.
2731         (Method.CheckForDuplications): Fixed implementation to test all
2732         possibilities.
2733         (MemberBase): Detection whether member is explicit interface
2734         implementation is now in constructor.
2735         (MemberBase.UpdateMemberName): Handles IndexerName.
2736         (Accessor): Changed to keep also location information.
2737         (AbstractPropertyEventMethod): Is derived from MemberCore.
2738         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
2739         will be emited or not.
2740         (PropertyBase.AreAccessorsDuplicateImplementation):
2741         Tests whether accessors are not in collision with some method.
2742         (Operator): Is derived from MethodCore to simplify common
2743         operations.
2744
2745         * decl.cs (Flags.TestMethodDuplication): Test for duplication
2746         must be performed.
2747         (DeclSpace.AddToContainer): Adds the member to defined_names
2748         table. It tests for duplications and enclosing name conflicts.
2749
2750         * enum.cs (EnumMember): Clean up to reuse the base structures
2751
2752 2004-09-03  Martin Baulig  <martin@ximian.com>
2753
2754         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
2755         into TypeContainer, to make partial classes work again.
2756
2757 2004-09-03  Martin Baulig  <martin@ximian.com>
2758
2759         * rootcontext.cs (RootContext.V2): Removed.
2760
2761 2004-03-23  Martin Baulig  <martin@ximian.com>
2762
2763         * expression.cs (Invocation.OverloadResolve): Added `bool
2764         may_fail' argument and use it instead of the Location.IsNull() hack.
2765
2766 2004-09-03  Martin Baulig  <martin@ximian.com>
2767
2768         Merged latest changes into gmcs.  Please keep this comment in
2769         here, it makes it easier for me to see what changed in MCS since
2770         the last time I merged.
2771
2772 2004-09-03  Raja R Harinath  <rharinath@novell.com>
2773
2774         Fix #61128.
2775         * expression.cs (BetterConversion): Don't allow either conversion 
2776         to be null.  Remove redundant implicit conversion test when 'q ==
2777         null' -- when this function is invoked, we already know that the
2778         implicit conversion exists.
2779         (BetterFunction): Assume that 'best' is non-null.  Remove
2780         redundant reimplementation of IsApplicable when 'best' is null.
2781         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
2782         number of arguments.
2783         (IsAncestralType): Extract from OverloadResolve.
2784         (OverloadResolve): Make robust to the MethodGroupExpr being
2785         unsorted.  Implement all the logic of Section 14.5.5.1, and
2786         support overloading of methods from multiple applicable types.
2787         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
2788
2789         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
2790         (RealError, Warning): Append type of report to related symbol.
2791
2792 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
2793
2794         * enum.cs: Fixed CLS-Compliance checks for enum members.
2795         Error tests cs3008-8.cs, cs3014-8.cs
2796
2797 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
2798
2799         Fixed bug #62342, #63102
2800         * class.cs: ImplementIndexer uses member.IsExplicitImpl
2801         like ImplementMethod.
2802
2803 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
2804
2805         * attribute.cs (Attribute.GetAttributeArgumentExpression):
2806         Fixed bug #65170.
2807
2808 2004-09-02  Martin Baulig  <martin@ximian.com>
2809
2810         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
2811         TypeManager.GetArgumentTypes() rather than calling GetParameters()
2812         on the MethodBase.
2813
2814 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
2815
2816         C# 2.0 Static classes implemented
2817
2818         * class.cs (TypeContainer): instance_constructors,
2819         initialized_fields, initialized_static_fields,
2820         default_constructor, base_inteface_types are protected to be
2821         accessible from StaticClass.
2822         (TypeContainer.DefineDefaultConstructor): New virtual method
2823         for custom default constructor generating
2824         (StaticClass): New class to handle "Static classes" feature.
2825
2826         * cs-parser.jay: Handle static keyword on class like instance
2827         of StaticClass.
2828
2829         * driver.cs: Added "/langversion" command line switch with two
2830         options (iso-1, default).
2831
2832 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
2833
2834         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
2835
2836 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
2837
2838         * delegate.cs: Style.
2839
2840 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
2841
2842         * delegate.cs: Add seperate instance expr field for miguel.
2843
2844 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
2845
2846         * PointerArithmetic (Resolve): make sure we are not doing
2847         pointer arith on void*. Also, make sure we are resolved
2848         by not setting eclass until resolve.
2849
2850         All callers: Make sure that PointerArithmetic gets resolved.
2851
2852 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
2853
2854         * ArrayCreation (LookupType): If the type does not resolve 
2855         to an array, give an error.
2856
2857 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
2858
2859         * statement.cs (Try.Resolve): Fixed bug #64222
2860
2861 2004-08-27  Martin Baulig  <martin@ximian.com>
2862
2863         * class.cs
2864         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
2865         crash here.     
2866
2867 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
2868
2869         * ecore.cs (Constantify): Get underlying type via
2870         System.Enum.GetUnderlyingType to avoid StackOverflow on the
2871         Windows in special cases.
2872
2873 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
2874
2875         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
2876         for obtaining also private methods.
2877         (GetRemoveMethod): Used GetRemoveMethod (true)
2878         for obtaining also private methods.
2879
2880 2004-08-24  Martin Baulig  <martin@ximian.com>
2881
2882         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
2883         MethodAttributes.HideBySig for operators.
2884
2885 2004-08-23  Martin Baulig  <martin@ximian.com>
2886
2887         Back to the old error reporting system :-)
2888
2889         * report.cs (Message): Removed.
2890         (Report.MessageData, ErrorData, WarningData): Removed.
2891         (Report.Error, Warning): Back to the old system.
2892
2893 2004-08-23  Martin Baulig  <martin@ximian.com>
2894
2895         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
2896
2897         * class.cs (TypeContainer.ParentContainer): New public virtual
2898         method; replaces the explicit interface implementation.
2899         (ClassPart.ParentContainer): Override.
2900
2901 2004-08-23  Martin Baulig  <martin@ximian.com>
2902
2903         * statement.cs (Switch): Added support for constant switches; see
2904         #59428 or test-285.cs.
2905
2906 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
2907
2908         Fixed bug #62740.
2909         * statement.cs (GetEnumeratorFilter): Removed useless
2910         logic because C# specs is strict. GetEnumerator must be
2911         public.
2912
2913 2004-08-22  Martin Baulig  <martin@ximian.com>
2914
2915         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
2916         a switch and may break, reset the barrier.  Fixes #59867.
2917
2918 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
2919
2920         CLS-Compliance speed up (~5% for corlib)
2921
2922         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
2923         New method. Tests container for CLS-Compliant names
2924
2925         * class.cs (TypeContainer.VerifyClsName): New method.
2926         Checks whether container name is CLS Compliant.
2927         (Constructor): Implements IMethodData.
2928
2929         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
2930         low-case table for CLS Compliance test.
2931         (MemberCache.VerifyClsParameterConflict): New method.
2932         Checks method parameters for CS3006 error.
2933
2934         * enum.cs (EnumMember): Is derived from MemberCore.
2935         (Enum.VerifyClsName): Optimized for better performance.
2936
2937 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
2938
2939         * report.cs: Renamed Error_T to Error and changed all
2940         references.
2941
2942 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
2943
2944         * class.cs (TypeContainer.IndexerArrayList): New inner class
2945         container for indexers.
2946         (TypeContainer.DefaultIndexerName): New constant for default
2947         indexer name. Replaced all "Item" with this constant.
2948         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
2949
2950         * typemanager.cs (TypeManager.default_member_ctor): Cache here
2951         DefaultMemberAttribute constructor.
2952
2953 2004-08-05  Martin Baulig  <martin@ximian.com>
2954
2955         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
2956         Fix bug #59429.
2957
2958 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
2959
2960         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
2961         multi platforms problem.
2962
2963         * compiler.csproj: Included shared files.
2964
2965 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
2966
2967         Fix bug 60333, 55971 in the more general way
2968         * attribute.cs (Attribute.GetAttributeArgumentExpression):
2969         Added arg_type argument for constant conversion.
2970         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
2971
2972 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
2973
2974         Fix bug #59760
2975         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
2976         OperatorArrayList, MethodCoreArrayList for typecontainer
2977         containers. Changed class member types to these new types.
2978         (MethodArrayList.DefineMembers): Added test for CS0659.
2979
2980 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
2981
2982         * cfold.cs: Synchronize the folding with the code in expression.cs
2983         Binary.DoNumericPromotions for uint operands.
2984
2985         * attribute.cs: Revert patch from Raja, it introduced a regression
2986         while building Blam-1.2.1 (hard to isolate a test case).
2987
2988 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
2989
2990         Fix for #55382
2991         * class.cs:
2992         (TypeContainer.Define): Renamed to DefineContainerMembers because of
2993         name collision.
2994         (MethodCore.parent_method): New member. The method we're overriding
2995         if this is an override method.
2996         (MethodCore.CheckBase): Moved from Method class and made common.
2997         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
2998         private.
2999         (MethodCore.CheckForDuplications): New abstract method. For custom
3000         member duplication search in a container
3001         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
3002         method and its return type.
3003         (Event.conflict_symbol): New member. Symbol with same name in the
3004         parent class.
3005
3006         * decl.cs:
3007         (MemberCache.FindMemberWithSameName): New method. The method
3008         is looking for conflict with inherited symbols.
3009
3010 2004-08-04  Martin Baulig  <martin@ximian.com>
3011
3012         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
3013
3014         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
3015
3016 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
3017
3018         * report.cs (Message): New enum for better error, warning reference in
3019         the code.
3020         (MessageData): New inner abstract class. It generally handles printing of
3021         error and warning messages.
3022         Removed unused Error, Warning, Message methods.
3023
3024 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
3025
3026         Fix for cs0592-8.cs test
3027         * attribute.cs
3028         (Attributable.ValidAttributeTargets): Made public.
3029         (Attribute.ExplicitTarget): New member for explicit target value.
3030         (Attribute.CheckTargets): Now we translate explicit attribute
3031         target to Target here.
3032
3033 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
3034
3035         * ecore.cs (MethodGroupExpr): new IsBase property.
3036
3037         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
3038
3039         * delegate.cs (DelegateCreation): store a MethodGroupExpr
3040         rather than an instance expr.
3041
3042         (DelegateCreation.Emit): Use the method group rather than
3043         the instance expression. Also, if you have base.Foo as the
3044         method for a delegate, make sure to emit ldftn, not ldftnvirt.
3045
3046         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
3047
3048         (NewDelegate.DoResolve): Only check for the existance of Invoke
3049         if the method is going to be needed. Use MethodGroupExpr.
3050
3051         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
3052
3053         * expression.cs: For pointer arith., make sure to use
3054         the size of the type, not the size of the pointer to
3055         the type.
3056
3057 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
3058
3059         Fix for #60722
3060         * class.cs (Class): Added error CS0502 test.
3061
3062 2004-08-03  John Luke  <jluke@cfl.rr.com>
3063             Raja R Harinath  <rharinath@novell.com>
3064
3065         Fix for #60997.
3066         * attribute.cs (Attribute.complained_before): New flag.
3067         (Attribute.ResolveType, Attribute.Resolve),
3068         (Attribute.DefinePInvokeMethod): Set it.
3069         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
3070         
3071 2004-08-03  Martin Baulig  <martin@ximian.com>
3072
3073         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
3074         use a user-defined operator; we still need to do numeric
3075         promotions in case one argument is a builtin type and the other
3076         one has an implicit conversion to that type.  Fixes #62322.
3077
3078 2004-08-02  Martin Baulig  <martin@ximian.com>
3079
3080         * statement.cs (LocalInfo.Flags): Added `IsThis'.
3081         (LocalInfo.IsThis): New public property.
3082         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
3083
3084 2004-08-01  Martin Baulig  <martin@ximian.com>
3085
3086         * class.cs (TypeContainer.GetClassBases): Don't set the default
3087         here since we may get called from GetPartialBases().
3088         (TypeContainer.DefineType): If GetClassBases() didn't return a
3089         parent, use the default one.
3090
3091 2004-07-30  Duncan Mak  <duncan@ximian.com>
3092
3093         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
3094
3095 2004-07-30  Martin Baulig  <martin@ximian.com>
3096
3097         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
3098
3099         * class.cs (SourceMethod): New public class, derive from the
3100         symbol writer's ISourceMethod.
3101         (Method): Use the new symbol writer API.
3102
3103         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
3104         as argument and use the new symbol writer.
3105
3106         * location.cs
3107         (SourceFile): Implement the symbol writer's ISourceFile.
3108         (Location.SymbolDocument): Removed.
3109         (Location.SourceFile): New public property.
3110
3111         * symbolwriter.cs: Use the new symbol writer API.
3112
3113 2004-07-30  Raja R Harinath  <rharinath@novell.com>
3114
3115         * Makefile (install-local): Remove.  Functionality moved to
3116         executable.make.
3117
3118 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
3119
3120         * Makefile: Install mcs.exe.config file together with mcs.exe.
3121         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
3122         correct runtime version.
3123         
3124 2004-07-25  Martin Baulig  <martin@ximian.com>
3125
3126         * class.cs
3127         (TypeContainer.RegisterOrder): Removed, this was unused.
3128         (TypeContainer, interface_order): Removed.
3129         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
3130         TypeContainer as argument since we can also be called with a
3131         `PartialContainer' for a partial class/struct/interface.
3132         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
3133         of checking whether we're an `Interface' - we could be a
3134         `PartialContainer'.
3135         (PartialContainer.Register): Override; call
3136         AddClass()/AddStruct()/AddInterface() on our parent.
3137
3138         * cs-parser.jay (interface_member_declaration): Add things to the
3139         `current_container', not the `current_class'.
3140
3141         * rootcontext.cs (RegisterOrder): The overloaded version which
3142         takes an `Interface' was unused, removed.
3143
3144         * typemanager.cs (TypeManager.LookupInterface): Return a
3145         `TypeContainer', not an `Interface'.
3146         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
3147         contain a `PartialContainer' for an interface, so check it's
3148         `Kind' to figure out what it is.
3149
3150 2004-07-25  Martin Baulig  <martin@ximian.com>
3151
3152         * class.cs (Class.DefaultTypeAttributes): New public constant.
3153         (Struct.DefaultTypeAttributes): Likewise.
3154         (Interface.DefaultTypeAttributes): Likewise.
3155         (PartialContainer.TypeAttr): Override this and add the
3156         DefaultTypeAttributes.
3157
3158 2004-07-25  Martin Baulig  <martin@ximian.com>
3159
3160         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
3161         we can just use the `Parent' field instead.
3162
3163 2004-07-25  Martin Baulig  <martin@ximian.com>
3164
3165         * class.cs (TypeContainer.Emit): Renamed to EmitType().
3166
3167 2004-07-25  Martin Baulig  <martin@ximian.com>
3168
3169         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
3170         our parts before defining any methods.
3171         (TypeContainer.VerifyImplements): Make this virtual.
3172         (ClassPart.VerifyImplements): Override and call VerifyImplements()
3173         on our PartialContainer.
3174
3175 2004-07-25  Martin Baulig  <martin@ximian.com>
3176
3177         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
3178
3179         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
3180         argument, we can just use the `Parent' field instead.
3181
3182         * class.cs
3183         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
3184         (MemberBase.DoDefine): Likewise.
3185
3186 2004-07-24  Martin Baulig  <martin@ximian.com>
3187
3188         * decl.cs (MemberCore.Parent): New public field.
3189         (DeclSpace.Parent): Moved to MemberCore.
3190
3191         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
3192         (MemberBase.ctor): Added TypeContainer argument, pass it to our
3193         parent's .ctor.
3194         (FieldBase, Field, Operator): Likewise.
3195         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
3196         (EventField, Event): Likewise.
3197
3198 2004-07-23  Martin Baulig  <martin@ximian.com>
3199
3200         * class.cs (PartialContainer): New public class.
3201         (ClassPart): New public class.
3202         (TypeContainer): Added support for partial classes.
3203         (TypeContainer.GetClassBases): Splitted some of the functionality
3204         out into GetNormalBases() and GetPartialBases().
3205
3206         * cs-tokenizer.cs (Token.PARTIAL): New token.
3207         (Tokenizer.consume_identifier): Added some hacks to recognize
3208         `partial', but only if it's immediately followed by `class',
3209         `struct' or `interface'.
3210
3211         * cs-parser.jay: Added support for partial clases.
3212
3213 2004-07-23  Martin Baulig  <martin@ximian.com>
3214
3215         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
3216         a `DeclSpace' and also made it readonly.
3217         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
3218         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
3219         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
3220
3221         * cs-parser.jay: Pass the `current_class', not the
3222         `current_container' (at the moment, this is still the same thing)
3223         to a new Method, Property, Event, Indexer or Constructor.
3224
3225 2004-07-23  Martin Baulig  <martin@ximian.com>
3226
3227         * cs-parser.jay (CSharpParser): Added a new `current_class' field
3228         and removed the `current_interface' one.
3229         (struct_declaration, class_declaration, interface_declaration):
3230         Set `current_class' to the newly created class/struct/interface;
3231         set their `Bases' and call Register() before parsing their body.
3232
3233 2004-07-23  Martin Baulig  <martin@ximian.com>
3234
3235         * class.cs (Kind): New public enum.
3236         (TypeContainer): Made this class abstract.
3237         (TypeContainer.Kind): New public readonly field.
3238         (TypeContainer.CheckDef): New public method; moved here from
3239         cs-parser.jay.
3240         (TypeContainer.Register): New public abstract method.
3241         (TypeContainer.GetPendingImplementations): New public abstract
3242         method.
3243         (TypeContainer.GetClassBases): Removed the `is_class' and
3244         `is_iface' parameters.
3245         (TypeContainer.DefineNestedTypes): Formerly known as
3246         DoDefineType().
3247         (ClassOrStruct): Made this class abstract.
3248
3249         * tree.cs (RootTypes): New public type. 
3250
3251 2004-07-20  Martin Baulig  <martin@ximian.com>
3252
3253         * tree.cs (Tree.RecordNamespace): Removed.
3254         (Tree.Namespaces): Removed.
3255
3256         * rootcontext.cs (RootContext.IsNamespace): Removed.
3257
3258         * cs-parser.jay (namespace_declaration): Just create a new
3259         NamespaceEntry here.
3260
3261 2004-07-20  Martin Baulig  <martin@ximian.com>
3262
3263         * statement.cs (ExceptionStatement): New abstract class.  This is
3264         now used as a base class for everyone who's using `finally'.
3265         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
3266         our local variables before using them.
3267
3268         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
3269         virtual method.  This is used by Yield.Resolve() to "steal" an
3270         outer block's `finally' clauses.
3271         (FlowBranchingException): The .ctor now takes an ExceptionStatement
3272         argument.
3273
3274         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
3275         version which takes an ExceptionStatement.  This version must be
3276         used to create exception branchings.
3277
3278         * iterator.cs
3279         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
3280         (Iterator.EmitMoveNext): Added exception support; protect the
3281         block with a `fault' clause, properly handle 'finally' clauses.
3282         (Iterator.EmitDispose): Run all the `finally' clauses here.
3283
3284 2004-07-20  Martin Baulig  <martin@ximian.com>
3285
3286         * iterator.cs: This is the first of a set of changes in the
3287         iterator code.  Match the spec more closely: if we're an
3288         IEnumerable, then GetEnumerator() must be called.  The first time
3289         GetEnumerator() is called, it returns the current instance; all
3290         subsequent invocations (if any) must create a copy.
3291
3292 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
3293
3294         * expression.cs: Resolve the constant expression before returning
3295         it. 
3296
3297 2004-07-19  Martin Baulig  <martin@ximian.com>
3298
3299         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
3300         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
3301         the return type of the new EmitContext.
3302
3303 2004-07-18  Martin Baulig  <martin@ximian.com>
3304
3305         * class.cs (Property.Define): Fix iterators.
3306
3307         * iterators.cs (Iterator.Define): Moved the
3308         `container.AddInterator (this)' call here from the .ctor; only do
3309         it if we resolved successfully.
3310
3311 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
3312
3313         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
3314         `true' for preprocessing directives that we parse.  The return
3315         value indicates whether we should return to regular tokenizing or
3316         not, not whether it was parsed successfully.
3317
3318         In the past if we were in: #if false ... #line #endif, we would
3319         resume parsing after `#line'.  See bug 61604.
3320
3321         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
3322         building: IsEnumType should return true only for enums, not for
3323         enums or System.Enum itself.  This fixes #61593.
3324
3325         Likely what happened is that corlib was wrong: mcs depended on
3326         this bug in some places.  The bug got fixed, we had to add the
3327         hack, which caused bug 61593.
3328
3329         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
3330         that was a workaround for the older conditions.
3331
3332 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
3333
3334         * assign.cs: IAssignMethod has a new interface, as documented
3335         inline. All assignment code now uses this new api.
3336
3337         * ecore.cs, expression.cs: All classes which implement
3338         IAssignMethod now use the new interface.
3339
3340         * expression.cs (Invocation): add a hack to EmitCall so that
3341         IndexerAccess can be the target of a compound assignment without
3342         evaluating its arguments twice.
3343
3344         * statement.cs: Handle changes in Invocation api.
3345
3346 2004-07-16  Martin Baulig  <martin@ximian.com>
3347
3348         * iterators.cs: Rewrote this.  We're now using one single Proxy
3349         class for both the IEnumerable and the IEnumerator interface and
3350         `Iterator' derives from Class so we can use the high-level API.
3351
3352         * class.cs (TypeContainer.AddIterator): New method.
3353         (TypeContainer.DoDefineType): New protected virtual method, which
3354         is called from DefineType().
3355         (TypeContainer.DoDefineMembers): Call DefineType() and
3356         DefineMembers() on all our iterators.
3357         (TypeContainer.Emit): Call Emit() on all our iterators.
3358         (TypeContainer.CloseType): Call CloseType() on all our iterators.
3359
3360         * codegen.cs (EmitContext.CurrentIterator): New public field.
3361
3362 2004-07-15  Martin Baulig  <martin@ximian.com>
3363
3364         * typemanager.cs
3365         (TypeManager.not_supported_exception_type): New type.   
3366
3367 2004-07-14  Martin Baulig  <martin@ximian.com>
3368
3369         * iterators.cs: Use real error numbers.
3370
3371 2004-07-14  Martin Baulig  <martin@ximian.com>
3372
3373         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
3374         requires this to be a System.Collection.IEnumerable and not a
3375         class implementing that interface.
3376         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
3377
3378 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
3379
3380         * class.cs: Fixed previous fix, it broke some error tests.
3381
3382 2004-07-12  Martin Baulig  <martin@ximian.com>
3383
3384         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
3385         Fixes #61293.
3386
3387 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
3388
3389         * assign.cs (LocalTemporary): Add new argument: is_address,If
3390         `is_address' is true, then the value that we store is the address
3391         to the real value, and not the value itself.
3392         
3393         * ecore.cs (PropertyExpr): use the new local temporary
3394         stuff to allow us to handle X.Y += z (where X is a struct)
3395
3396 2004-07-08  Martin Baulig  <martin@ximian.com>
3397
3398         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
3399         not always return, just like we're doing in Using.Resolve().
3400
3401 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
3402
3403         * cs-parser.jay (fixed_statement): flag this as Pinned.
3404
3405 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
3406
3407         * typemanager.cs (TypeManager): Removed MakePinned method, this
3408         mechanism is replaced with the .NET 2.x compatible mechanism of
3409         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
3410
3411         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
3412         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
3413         `IsFixed' property which has a different meaning.
3414
3415 2004-07-02  Raja R Harinath  <rharinath@novell.com>
3416
3417         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
3418         visible from inside a nested class, not just the names of the
3419         immediately enclosing class.
3420         Fix for bug #60730.
3421
3422 2004-06-24  Raja R Harinath  <rharinath@novell.com>
3423
3424         * expression.cs (BetterConversion): Remove buggy special-case
3425         handling of "implicit constant expression conversions".  At this
3426         point, we already know that the conversion is possible -- we're
3427         only checking to see which is better.
3428
3429 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3430
3431         * cs-parser.jay: Added error CS0210 test.
3432
3433 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3434
3435         * cs-parser.jay: Added error CS0134 test.
3436
3437 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3438
3439         Fix bug #52507
3440         * cs-parser.jay: Added error CS0145 test.
3441
3442 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3443
3444         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
3445
3446 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
3447         
3448         * expression.cs (StackAlloc.Resolve): The argument may not
3449         be a constant; deal with this case.
3450         
3451 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
3452
3453         * attribute.cs (IndexerName_GetIndexerName): Renamed to
3454         GetIndexerAttributeValue.
3455         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
3456
3457         * class.cs (Indexer.Define): Added error tests for CS0415,
3458         CS0609.
3459
3460 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
3461
3462         * attribute.cs (Attribute.Resolve): Keep field code in sync with
3463         property code.
3464
3465 2004-06-23  Martin Baulig  <martin@ximian.com>
3466
3467         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
3468         neither return nor throw, reset the barrier as well.  Fixes #60457.
3469
3470 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
3471
3472         * class.cs : EventAttributes is now set to None by default.
3473           This fixes bug #60459.
3474
3475 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
3476
3477         Fix bug #60219
3478         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
3479         Don't throw exception but return null (it's sufficient now).
3480
3481 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
3482
3483         * typemanager.cs (GetArgumentTypes): Faster implementation.
3484
3485 2004-06-18  Martin Baulig  <martin@ximian.com>
3486
3487         * attribute.cs (Attribute.Resolve): Check whether we're an
3488         EmptyCast which a Constant child.  Fixes #60333.
3489
3490 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
3491
3492         * statement.cs (EmitCollectionForeach): Account for the fact that
3493         not all valuetypes are in areas which we can take the address of.
3494         For these variables, we store to a temporary variable. Also, make
3495         sure that we dont emit a `callvirt' on a valuetype method.
3496
3497 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
3498
3499         * expression.cs (StackAlloc.DoReSolve): Added test for
3500         negative parameter (CS0247).
3501
3502 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
3503
3504         Fix bug #59792
3505         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
3506
3507 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
3508
3509         Fix bug #59781
3510         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
3511         ulong.
3512
3513 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
3514
3515         Fix bug #58254 & cs1555.cs, cs1556.cs
3516         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
3517
3518 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
3519
3520         * cs-parser.jay: Added error CS1669 test for indexers.
3521
3522 2004-06-11  Martin Baulig  <martin@ximian.com>
3523
3524         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
3525         call this twice: for params and varargs methods.
3526
3527 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
3528
3529         * class.cs:
3530         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
3531
3532 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
3533
3534         * attribute.cs (Attribute.GetValidTargets): Made public.
3535
3536         * class.cs: 
3537         (AbstractPropertyEventMethod): New class for better code sharing.
3538         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
3539         CS1667 report.
3540         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
3541
3542 2004-06-11  Raja R Harinath  <rharinath@novell.com>
3543
3544         Fix bug #59477.
3545         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
3546         that the call to Resolve is part of a MemberAccess.
3547         (Expression.Resolve): Use it for SimpleName resolution.
3548         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
3549         Add 'intermediate' boolean argument.
3550         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
3551         error message when the SimpleName can be resolved ambiguously
3552         between an expression and a type.
3553         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
3554         public.
3555         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
3556         call on the left-side.
3557
3558 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
3559
3560         * class.cs:
3561         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
3562
3563 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
3564
3565         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
3566
3567 2004-06-11  Martin Baulig  <martin@ximian.com>
3568
3569         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
3570         varargs methods if applicable.
3571
3572 2004-06-11  Martin Baulig  <martin@ximian.com>
3573
3574         * expression.cs (Invocation.EmitCall): Don't use
3575         `method.CallingConvention == CallingConventions.VarArgs' since the
3576         method could also have `CallingConventions.HasThis'.
3577
3578 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
3579
3580         * class.cs (Event.GetSignatureForError): Implemented.
3581         Fixed crash in error test cs3010.cs
3582
3583 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
3584
3585         * cs-tokenizer.cs: Change the way we track __arglist to be
3586         consistent with the other keywords.
3587
3588 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
3589
3590         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
3591         tomorrow.
3592
3593 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
3594
3595         * codegen.cs: Check that all referenced assemblies have a strongname
3596         before strongnaming the compiled assembly. If not report error CS1577.
3597         Fix bug #56563. Patch by Jackson Harper.
3598         * typemanager.cs: Added a method to return all referenced assemblies.
3599         Fix bug #56563. Patch by Jackson Harper.
3600
3601 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
3602
3603         * class.cs:
3604         (Method.ApplyAttributeBuilder): Moved and added conditional
3605         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
3606
3607         * delegate.cs:
3608         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
3609
3610 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
3611
3612         Fixed #59640
3613         * class.cs: (EventField.attribute_targets): Changed default target.
3614
3615 2004-06-08  Martin Baulig  <martin@ximian.com>
3616
3617         * expression.cs (Invocation.EmitCall): Enable varargs methods.
3618
3619 2004-06-08  Martin Baulig  <martin@ximian.com>
3620
3621         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
3622
3623 2004-06-07  Martin Baulig  <martin@ximian.com>
3624
3625         Added support for varargs methods.
3626
3627         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
3628         keyword.
3629
3630         * cs-parser.jay: Added support for `__arglist'.
3631
3632         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
3633
3634         * expression.cs (Argument.AType): Added `ArgList'.
3635         (Invocation): Added support for varargs methods.
3636         (ArglistAccess): New public class.
3637         (Arglist): New public class.
3638
3639         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
3640
3641         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
3642         a method's top-level block if the method has varargs.
3643
3644         * support.cs (ReflectionParameters, InternalParameters): Added
3645         support for varargs methods.    
3646
3647 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
3648
3649         * class.cs: Provide location in indexer error report.
3650
3651         * driver.cs: Use standard names.
3652
3653         * namespace.cs: Catch the use of using after a namespace has been
3654         declared also on using aliases.
3655
3656 2004-06-03  Raja R Harinath  <rharinath@novell.com>
3657
3658         Bug #50820.
3659         * typemanager.cs (closure_private_ok, closure_invocation_type)
3660         (closure_qualifier_type, closure_invocation_assembly)
3661         (FilterWithClosure): Move to ...
3662         (Closure): New internal nested class.
3663         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
3664         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
3665         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
3666         (MemberLookup, MemberLookupFailed): Use it.
3667         * expression.cs (New.DoResolve): Treat the lookup for the
3668         constructor as being qualified by the 'new'ed type.
3669         (Indexers.GetIndexersForTypeOrInterface): Update.
3670
3671 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
3672
3673         * attribute.cs
3674         (GetConditionalAttributeValue): New method. Returns
3675         condition of ConditionalAttribute.
3676         (SearchMulti): New method.  Returns all attributes of type 't'.
3677         Use it when attribute is AllowMultiple = true.
3678         (IsConditionalMethodExcluded): New method.
3679
3680         * class.cs
3681         (Method.IsExcluded): Implemented. Returns true if method has conditional
3682         attribute and the conditions is not defined (method is excluded).
3683         (IMethodData): Extended interface for ConditionalAttribute support.
3684         (PropertyMethod.IsExcluded): Implemented.
3685
3686         * decl.cs
3687         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
3688
3689         * expression.cs
3690         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
3691         on the method.
3692
3693 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
3694
3695         * expression.cs (ArrayCreationExpression): Make this just an
3696         `expression'. It can't be a statement, so the code here was
3697         dead.
3698
3699 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
3700
3701         Fixed #59072
3702         * typemanager.cs (GetFullNameSignature): New method for
3703         MethodBase types.
3704
3705 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
3706
3707         Fixed #56452
3708         * class.cs (MemberBase.GetSignatureForError): New virtual method.
3709         Use this method when MethodBuilder is null.
3710         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
3711         Added test for error CS0626 (MONO reports error for this situation).
3712         (IMethodData.GetSignatureForError): Extended interface.
3713
3714 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
3715
3716         * attribute.cs
3717         (AttributeTester.GetObsoleteAttribute): Returns instance of
3718         ObsoleteAttribute when type is obsolete.
3719
3720         * class.cs
3721         (TypeContainer.VerifyObsoleteAttribute): Override.
3722         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
3723         (MethodCode.VerifyObsoleteAttribute): Override.
3724         (MemberBase.VerifyObsoleteAttribute): Override.
3725
3726         * decl.cs
3727         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
3728         and report proper error.
3729
3730         *delegate.cs
3731         Delegate.VerifyObsoleteAttribute): Override.
3732
3733         * ecore.cs
3734         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
3735         and report proper error.
3736         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
3737
3738         * enum.cs
3739         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
3740         and enum member.
3741
3742         * expression.cs
3743         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
3744         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
3745         Added test for ObsoleteAttribute.
3746
3747         * statement.cs
3748         (Catch): Derived from Statement.
3749
3750 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
3751  
3752         Fixed bug #59071 & cs0160.cs
3753  
3754         * statement.cs (Try.Resolve): Check here whether order of catch
3755         clauses matches their dependencies.
3756
3757 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
3758
3759         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
3760         caused a regression: #59343.  Referencing nested classes from an
3761         assembly stopped working.
3762
3763 2004-05-31  Martin Baulig  <martin@ximian.com>
3764
3765         MCS is now frozen for beta 2.
3766
3767 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3768
3769         * convert.cs: add a trivial cache for overload operator resolution.
3770
3771 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3772
3773         * decl.cs: If possible, use lookuptypedirect here. We can only do
3774         this if there is no `.' after the namespace. Avoids using
3775         LookupType, which does lots of slow processing.
3776         (FindNestedType) New method, does what it says :-).
3777         * namespace.cs: use LookupTypeDirect.
3778         * rootcontext.cs: use membercache, if possible.
3779         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
3780
3781 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3782
3783         * expression.cs:
3784         According to the spec, 
3785
3786         In a member access of the form E.I, if E is a single identifier,
3787         and if the meaning of E as a simple-name (§7.5.2) is a constant,
3788         field, property, localvariable, or parameter with the same type as
3789         the meaning of E as a type-name (§3.8), then both possible
3790         meanings of E are permitted.
3791
3792         We did not check that E as a simple-name had the same type as E as
3793         a type name.
3794
3795         This trivial check gives us 5-7% on bootstrap time.
3796
3797 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3798
3799         * expression.cs (Invocation.OverloadResolve): Avoid the
3800         use of hashtables and boxing here by allocating on demand.
3801
3802 2004-05-30  Martin Baulig  <martin@ximian.com>
3803
3804         * rootcontext.cs (RootContext.LookupType): Don't cache things if
3805         we're doing a silent lookup.  Don't try to lookup nested types in
3806         TypeManager.object_type (thanks to Ben Maurer).
3807
3808 2004-05-30  Martin Baulig  <martin@ximian.com>
3809
3810         Committing a patch from Ben Maurer.
3811
3812         * rootcontext.cs (RootContext.LookupType): Cache negative results.
3813
3814 2004-05-29  Martin Baulig  <martin@ximian.com>
3815
3816         * class.cs (IMethodData.ShouldIgnore): New method.
3817
3818         * typemanager.cs (TypeManager.MethodFlags): Don't take a
3819         `Location' argument, we don't need it anywhere.  Use
3820         `IMethodData.ShouldIgnore ()' instead of
3821         `MethodData.GetMethodFlags ()'.
3822         (TypeManager.AddMethod): Removed.
3823         (TypeManager.AddMethod2): Renamed to AddMethod.
3824
3825 2004-05-29  Martin Baulig  <martin@ximian.com>
3826
3827         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
3828
3829         * convert.cs (Convert.ImplicitReferenceConversion): If we're
3830         converting from a class type S to an interface type and we already
3831         have an object on the stack, don't box it again.  Fixes #52578.
3832
3833 2004-05-29  Martin Baulig  <martin@ximian.com>
3834
3835         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
3836         Added support for `params' parameters.  Fixes #59267.
3837
3838 2004-05-29  Martin Baulig  <martin@ximian.com>
3839
3840         * literal.cs (NullPointer): Provide a private .ctor which sets
3841         `type' to TypeManager.object_type.  Fixes #59048.
3842
3843 2004-05-29  Martin Baulig  <martin@ximian.com>
3844
3845         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
3846         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
3847
3848         * ecore.cs (EventExpr.instance_expr): Make the field private.
3849
3850 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
3851
3852         Fixed bug #50080 & cs0214-2.cs
3853         * expression.cs (Cast.DoResolve): Check unsafe context here.
3854         
3855         * statement.cs (Resolve.DoResolve): Likewise.
3856
3857 2004-05-26  Martin Baulig  <martin@ximian.com>
3858
3859         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
3860
3861         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
3862         (RootContext.LookupType): Pass down the `silent' flag.
3863
3864 2004-05-25  Martin Baulig  <martin@ximian.com>
3865
3866         * expression.cs
3867         (MethodGroupExpr.IdenticalTypeName): New public property.
3868         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
3869         expression actually refers to a type.
3870
3871 2004-05-25  Martin Baulig  <martin@ximian.com>
3872
3873         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
3874         for #56176 and made it actually work.
3875
3876 2004-05-25  Martin Baulig  <martin@ximian.com>
3877
3878         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
3879         (FieldExpr, PropertyExpr): Override and implement
3880         CacheTemporaries.  Fixes #52279.
3881
3882 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
3883
3884         * location.cs: In the new compiler listing a file twice is a
3885         warning, not an error.
3886
3887 2004-05-24  Martin Baulig  <martin@ximian.com>
3888
3889         * enum.cs (Enum.DefineType): For the `BaseType' to be a
3890         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
3891
3892 2004-05-24  Martin Baulig  <martin@ximian.com>
3893
3894         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
3895         walking the `using' list.  Fixes #53921.
3896
3897 2004-05-24  Martin Baulig  <martin@ximian.com>
3898
3899         * const.cs (Const.LookupConstantValue): Added support for
3900         EmptyCast's; fixes #55251.
3901
3902 2004-05-24  Martin Baulig  <martin@ximian.com>
3903
3904         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
3905         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
3906         which does the CS0135 check.  The reason is that we first need to
3907         check whether the variable actually exists.
3908
3909 2004-05-24  Martin Baulig  <martin@ximian.com>
3910
3911         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
3912         than RootContext.LookupType() to find the explicit interface
3913         type.  Fixes #58584.
3914
3915 2004-05-24  Raja R Harinath  <rharinath@novell.com>
3916
3917         * Makefile: Simplify.  Use executable.make.
3918         * mcs.exe.sources: New file.  List of sources of mcs.exe.
3919
3920 2004-05-24  Anders Carlsson  <andersca@gnome.org>
3921
3922         * decl.cs:
3923         * enum.cs:
3924         Use the invariant culture when doing String.Compare for CLS case
3925         sensitivity.
3926         
3927 2004-05-23  Martin Baulig  <martin@ximian.com>
3928
3929         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
3930         don't have any dots.  Fixes #52622, added cs0246-8.cs.
3931
3932         * namespace.cs (NamespaceEntry.Lookup): Likewise.
3933         
3934 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
3935
3936         * class.cs (MemberBase.Define): Reuse MemberType member for 
3937         resolved type. Other methods can use it too.
3938
3939 2004-05-23  Martin Baulig  <martin@ximian.com>
3940
3941         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
3942         the variable also exists in the current block (otherwise, we need
3943         to report a CS0103).  Fixes #58670.
3944
3945 2004-05-23  Martin Baulig  <martin@ximian.com>
3946
3947         * flowanalysis.cs (Reachability.Reachable): Compute this
3948         on-the-fly rather than storing it as a field.
3949
3950 2004-05-23  Martin Baulig  <martin@ximian.com>
3951
3952         * flowanalysis.cs (Reachability.And): Manually compute the
3953         resulting `barrier' from the reachability.      
3954        
3955 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
3956
3957         Fix bug #57835
3958         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
3959         instance of ObsoleteAttribute when symbol is obsolete.
3960
3961         * class.cs
3962         (IMethodData): Extended interface for ObsoleteAttribute support.
3963
3964 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
3965
3966         * attribute.cs: Fix bug #55970
3967
3968 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
3969
3970         Fix bug #52705
3971         * attribute.cs
3972         (GetObsoleteAttribute): New method. Creates the instance of
3973         ObsoleteAttribute.
3974         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
3975         ObsoleteAttribute when member is obsolete.
3976         (AttributeTester.Report_ObsoleteMessage): Common method for
3977         Obsolete error/warning reporting.
3978
3979         * class.cs
3980         (TypeContainer.base_classs_type): New member for storing parent type.
3981
3982         * decl.cs
3983         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
3984         for this MemberCore.
3985
3986 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
3987
3988         * attribute.cs, const.cs: Fix bug #58590
3989
3990 2004-05-21  Martin Baulig  <martin@ximian.com>
3991
3992         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
3993         out parameters if the end of the method is unreachable.  Fixes
3994         #58098. 
3995
3996 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
3997
3998         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
3999         Hari was right, why extra method.
4000
4001 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
4002
4003         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
4004
4005 2004-05-20  Martin Baulig  <martin@ximian.com>
4006
4007         Merged this back from gmcs to keep the differences to a minumum.
4008
4009         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
4010         instead of a Declspace.
4011         (Attribute.ResolveType): Likewise.
4012         (Attributes.Search): Likewise.
4013         (Attributes.Contains): Likewise.
4014         (Attributes.GetClsCompliantAttribute): Likewise.
4015
4016         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
4017         argument.
4018         (MethodData.ApplyAttributes): Take an EmitContext instead of a
4019         DeclSpace.
4020
4021 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
4022
4023         Fix bug #58688 (MCS does not report error when the same attribute
4024         is assigned twice)
4025
4026         * attribute.cs (Attribute.Emit): Distinction between null and default.
4027
4028 2004-05-19  Raja R Harinath  <rharinath@novell.com>
4029
4030         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
4031         of a top-level attribute without an attribute target.
4032         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
4033         Make non-static.
4034         (Attribute.Conditional_GetConditionName), 
4035         (Attribute.Obsolete_GetObsoleteMessage): Update.
4036         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
4037         part of ScanForIndexerName.
4038         (Attribute.CanIgnoreInvalidAttribute): New function.
4039         (Attribute.ScanForIndexerName): Move to ...
4040         (Attributes.ScanForIndexerName): ... here.
4041         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
4042         (Attributes.Search): New internal variant that can choose not to
4043         complain if types aren't resolved.  The original signature now
4044         complains.
4045         (Attributes.GetClsCompliantAttribute): Use internal variant, with
4046         complaints suppressed.
4047         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
4048         only if it not useful.
4049         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
4050         top-level for attributes that are shared between the assembly
4051         and a top-level class.
4052         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
4053         * class.cs: Update to reflect changes.
4054         (DefineIndexers): Fuse loops.
4055         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
4056         a couple more variants of attribute names.
4057
4058 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
4059
4060         Fix bug #52585 (Implemented explicit attribute declaration)
4061
4062         * attribute.cs:
4063         (Attributable.ValidAttributeTargets): New abstract method. It gets
4064         list of valid attribute targets for explicit target declaration.
4065         (Attribute.Target): It holds target itself.
4066         (AttributeSection): Removed.
4067         (Attribute.CheckTargets): New method. It checks whether attribute
4068         target is valid for the current element.
4069
4070         * class.cs:
4071         (EventProperty): New class. For events that are declared like
4072         property (with add and remove accessors).
4073         (EventField): New class. For events that are declared like field.
4074         class.cs
4075
4076         * cs-parser.jay: Implemented explicit attribute target declaration.
4077
4078         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
4079         Override ValidAttributeTargets.
4080
4081         * parameter.cs:
4082         (ReturnParameter): Class for applying custom attributes on 
4083         the return type.
4084         (ParameterAtribute): New class. Class for applying custom
4085         attributes on the parameter type.
4086
4087 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
4088
4089         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
4090         definitions. 
4091
4092         (Method): Allow UNSAFE here.
4093
4094         * modifiers.cs: Support unsafe reporting.
4095
4096 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
4097
4098         * decl.cs: Fix bug #58478.
4099
4100 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
4101
4102         * statement.cs: When checking for unreachable code on an EmptyStatement,
4103         set the location. Fixes bug #58488.
4104
4105 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
4106
4107         * driver.cs: Add -pkg handling.
4108
4109         From Gonzalo: UseShelLExecute=false
4110
4111 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
4112
4113         * attribute.cs:
4114         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
4115         for attribute.
4116         (Attribute.IsClsCompliaceRequired): Moved to base for better
4117         accesibility.
4118         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
4119         when attribute is AttributeUsageAttribute.
4120         (Attribute.GetValidTargets): Simplified.
4121         (Attribute.GetAttributeUsage): New method returns AttributeUsage
4122         attribute for this type.
4123         (Attribute.ApplyAttributes): Method renamed to Emit and make
4124         non-static.
4125         (GlobalAttributeSection): New class for special handling of global
4126         attributes (assembly, module).
4127         (AttributeSection.Emit): New method.
4128
4129         * class.cs: Implemented Attributable abstract methods.
4130         (MethodCore.LabelParameters): Moved to Parameter class.
4131         (Accessor): Is back simple class.
4132         (PropertyMethod): Implemented Attributable abstract class.
4133         (DelegateMethod): Implemented Attributable abstract class.
4134         (Event): New constructor for disctintion between normal Event
4135         and Event with accessors.
4136
4137         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
4138
4139         * codegen.cs, const.cs, decl.cs, delegate.cs:
4140         (CommonAssemblyModulClass): Implemented Attributable abstract class
4141         and simplified.
4142
4143         * enum.cs: Implement IAttributeSupport interface.
4144         (EnumMember): New class for emum members. Implemented Attributable
4145         abstract class
4146
4147         * parameter.cs:
4148         (ParameterBase): Is abstract.
4149         (ReturnParameter): New class for easier [return:] attribute handling.
4150
4151         * typemanager.cs: Removed builder_to_attr.
4152
4153 2004-05-11  Raja R Harinath  <rharinath@novell.com>
4154
4155         Fix bug #57151.
4156         * attribute.cs (Attribute.GetPositionalValue): New function.
4157         * class.cs (TypeContainer.VerifyMembers): New function.
4158         (TypeContainer.Emit): Use it.
4159         (ClassOrStruct): New base class for Class and Struct.
4160         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
4161         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
4162         class.
4163         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
4164         then each non-static field should have a FieldOffset attribute.
4165         Otherwise, none of the fields should have a FieldOffset attribute.
4166         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
4167         and FieldOffset attributes.
4168         * typemanager.cs (TypeManager.struct_layout_attribute_type)
4169         (TypeManager.field_offset_attribute_type): New core types.
4170         (TypeManager.InitCoreTypes): Initialize them.
4171
4172 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
4173
4174         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
4175         Return correct type.
4176         From bug #58270.
4177
4178 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
4179
4180         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
4181         be implicitly converted to ulong.
4182         
4183         * expression.cs: The logic for allowing operator &, | and ^ worked
4184         was wrong, it worked before because we did not report an error in
4185         an else branch.  Fixes 57895.
4186
4187         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
4188         allow volatile fields to be reference types.
4189
4190 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
4191
4192         * driver.cs: Add support for /debug-
4193
4194 2004-05-07  Raja R Harinath  <rharinath@novell.com>
4195
4196         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
4197         Add a 'complain' parameter to silence errors.
4198         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
4199         silently overlooked type-resolutions.
4200         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
4201         to reflect changes.
4202         (Attributes.Search): New function.
4203         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
4204         (Attributes.GetAttributeFullName): Remove hack.
4205         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
4206         Update to reflect changes.
4207         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
4208         Use Attributes.Search instead of nested loops.
4209
4210 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
4211
4212         * decl.cs:
4213         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
4214         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
4215         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
4216
4217         * report.cs: (Report.Warning): Renamed to Warning_T because of
4218         parameter collision.
4219
4220 2004-05-05  Raja R Harinath  <rharinath@novell.com>
4221
4222         * expression.cs (MemberAccess.ResolveMemberAccess):
4223         Exit with non-zero status after Report.Error.
4224         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
4225         Likewise.
4226         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
4227
4228 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
4229
4230         * support.cs: Don't hang when the file is empty.
4231
4232 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
4233
4234         * support.cs: In SeekableStreamReader, compute the preamble size of the
4235           underlying stream. Position changes should take into account that initial
4236           count of bytes.
4237
4238 2004-05-03  Todd Berman  <tberman@sevenl.net>
4239
4240         * driver.cs: remove unused GetSysVersion function.
4241
4242 2004-05-03  Todd Berman  <tberman@sevenl.net>
4243
4244         * driver.cs: Remove the hack from saturday, as well as the hack
4245         from jackson (LoadAssemblyFromGac), also adds the CWD to the
4246         link_paths to get that bit proper.
4247
4248 2004-05-01  Todd Berman  <tberman@sevenl.net>
4249
4250         * driver.cs: Try a LoadFrom before a Load, this checks the current
4251         path. This is currently a bug in mono that is be fixed, however, this
4252         provides a workaround for now. This will be removed when the bug
4253         is fixed.
4254
4255 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
4256
4257         * CryptoConvert.cs: Updated to latest version. Fix issue with 
4258         incomplete key pairs (#57941).
4259
4260 2004-05-01  Todd Berman  <tberman@sevenl.net>
4261
4262         * driver.cs: Remove '.' from path_chars, now System.* loads properly
4263         from the GAC
4264
4265 2004-04-30  Jackson Harper  <jackson@ximian.com>
4266
4267         * codegen.cs: Open keys readonly.
4268         
4269 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
4270
4271         * typemanager.cs: don't report cyclic struct layout when a struct
4272         contains 2 or more fields of the same type. Failed for Pango.AttrShape
4273         which has 2 Pango.Rectangle fields.
4274
4275 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4276
4277         * expression.cs: Handle IntPtr comparisons with IL code
4278         rather than a method call.
4279
4280 2004-04-29  Martin Baulig  <martin@ximian.com>
4281
4282         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
4283         the list of PropertyInfo's in class hierarchy and find the
4284         accessor.  Fixes #56013.
4285
4286 2004-04-29  Martin Baulig  <martin@ximian.com>
4287
4288         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
4289
4290 2004-04-29  Martin Baulig  <martin@ximian.com>
4291
4292         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
4293
4294         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
4295
4296 2004-04-29  Martin Baulig  <martin@ximian.com>
4297
4298         * class.cs (ConstructorInitializer.Resolve): Check whether the
4299         parent .ctor is accessible.  Fixes #52146.
4300
4301 2004-04-29  Martin Baulig  <martin@ximian.com>
4302
4303         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
4304
4305         * statement.cs (Using.EmitLocalVariableDecls): Use
4306         TypeManager.idisposable_type, not typeof (IDisposable).
4307         (Foreach.EmitCollectionForeach): Added support for valuetypes.
4308
4309 2004-04-29  Martin Baulig  <martin@ximian.com>
4310
4311         * class.cs (Event.Define): Don't emit the field and don't set
4312         RTSpecialName and SpecialName for events on interfaces.  Fixes
4313         #57703. 
4314
4315 2004-04-29  Raja R Harinath  <rharinath@novell.com>
4316
4317         Refactor Attribute.ApplyAttributes.
4318         * attribute.cs (Attributable): New base class for objects that can
4319         have Attributes applied on them.
4320         (Attribute): Make AttributeUsage fields public.
4321         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
4322         (Attribute.IsInternalCall): New property.
4323         (Attribute.UsageAttr): Convert to a public read-only property.
4324         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
4325         (Attribute.ResolveType, Attribute.Resolve)
4326         (Attribute.ScanForIndexerName): Update to reflect changes.
4327         (Attribute.CheckAttributeTarget): Re-format.
4328         (Attribute.ApplyAttributes): Refactor, to various
4329         Attributable.ApplyAttributeBuilder methods.
4330         * decl.cs (MemberCore): Make Attributable.
4331         * class.cs (Accessor): Make Attributable.
4332         (MethodData.ApplyAttributes): Use proper attribute types, not
4333         attribute names.
4334         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
4335         (TypeContainer.ApplyAttributeBuilder)
4336         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
4337         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
4338         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
4339         (Operator.ApplyAttributeBuilder): New factored-out methods.
4340         * const.cs (Const.ApplyAttributeBuilder): Likewise.
4341         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
4342         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
4343         * parameter.cs (ParameterBase): New Attributable base class
4344         that can also represent Return types.
4345         (Parameter): Update to the changes.
4346
4347 2004-04-29  Jackson Harper  <jackson@ximian.com>
4348
4349         * driver.cs: Prefer the corlib system version when looking for
4350         assemblies in the GAC. This is still a hack, but its a better hack
4351         now.
4352         
4353 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
4354
4355         * decl.cs, enum.cs: Improved error 3005 reporting.
4356   
4357         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
4358         (related_symbols): New private member for list of symbols
4359         related to reported error/warning.
4360         
4361         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
4362
4363 2004-04-29  Martin Baulig  <martin@ximian.com>
4364
4365         * ecore.cs (Expression.Constantify): If we're an enum and
4366         TypeManager.TypeToCoreType() doesn't give us another type, use
4367         t.UnderlyingSystemType.  Fixes #56178.  
4368
4369 2004-04-29  Martin Baulig  <martin@ximian.com>
4370
4371         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
4372         interfaces and for each interface, only add members directly
4373         declared in that interface.  Fixes #53255.
4374
4375 2004-04-28  Martin Baulig  <martin@ximian.com>
4376
4377         * expression.cs (ConditionalLogicalOperator): Use a temporary
4378         variable for `left' to avoid that we evaluate it more than once;
4379         bug #52588.
4380
4381 2004-04-28  Martin Baulig  <martin@ximian.com>
4382
4383         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
4384         `void[]' (CS1547).
4385
4386 2004-04-28  Martin Baulig  <martin@ximian.com>
4387
4388         * statement.cs (LocalInfo.Resolve): Check whether the type is not
4389         void (CS1547).
4390
4391         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
4392         whether the type is not void (CS1547).
4393
4394 2004-04-28  Martin Baulig  <martin@ximian.com>
4395
4396         * expression.cs (Unary.DoResolveLValue): Override this and report
4397         CS0131 for anything but Operator.Indirection.
4398
4399 2004-04-28  Martin Baulig  <martin@ximian.com>
4400
4401         Committing a patch from Ben Maurer; see bug #50820.
4402
4403         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
4404         check for classes.
4405
4406         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
4407         classes.        
4408
4409 2004-04-28  Martin Baulig  <martin@ximian.com>
4410
4411         Committing a patch from Ben Maurer; see bug #50820.
4412
4413         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
4414         check for classes.
4415
4416         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
4417         classes.        
4418
4419 2004-04-28  Martin Baulig  <martin@ximian.com>
4420
4421         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
4422         (Block.AddLabel): Call DoLookupLabel() to only search in the
4423         current block.
4424
4425 2004-04-28  Martin Baulig  <martin@ximian.com>
4426
4427         * cfold.cs (ConstantFold.BinaryFold): Added special support for
4428         comparing StringConstants and NullLiterals in Equality and Inequality.
4429
4430 2004-04-28  Jackson Harper  <jackson@ximian.com>
4431
4432         * driver.cs: Attempt to load referenced assemblies from the
4433         GAC. This is the quick and dirty version of this method that
4434         doesnt take into account versions and just takes the first
4435         canidate found. Will be good enough for now as we will not have more
4436         then one version installed into the GAC until I update this method.
4437
4438 2004-04-28  Martin Baulig  <martin@ximian.com>
4439
4440         * typemanager.cs (TypeManager.CheckStructCycles): New public
4441         static method to check for cycles in the struct layout.
4442
4443         * rootcontext.cs (RootContext.PopulateTypes): Call
4444         TypeManager.CheckStructCycles() for each TypeContainer.
4445         [Note: We only need to visit each type once.]
4446
4447 2004-04-28  Martin Baulig  <martin@ximian.com>
4448
4449         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
4450
4451         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
4452         success and added `out object value'.  Use a `bool resolved' field
4453         to check whether we've already been called rather than
4454         `ConstantValue != null' since this breaks for NullLiterals.
4455
4456 2004-04-28  Raja R Harinath  <rharinath@novell.com>
4457
4458         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
4459         setting of this flag, since the 'set' method may be non-public.
4460
4461 2004-04-28  Raja R Harinath  <rharinath@novell.com>
4462
4463         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
4464         check on current_vector.Block.
4465
4466 2004-04-27  Martin Baulig  <martin@ximian.com>
4467
4468         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
4469         a field initializer.  Fixes #56459.
4470
4471 2004-04-27  Martin Baulig  <martin@ximian.com>
4472
4473         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
4474         we're not attempting to use an indexer.  Fixes #52154.
4475
4476 2004-04-27  Martin Baulig  <martin@ximian.com>
4477
4478         * statement.cs (Return): Don't create a return label if we don't
4479         need it; reverts my change from January 20th.  Thanks to Ben
4480         Maurer for this.
4481
4482 2004-04-27  Martin Baulig  <martin@ximian.com>
4483
4484         According to the spec, `goto' can only leave a nested scope, but
4485         never enter it.
4486
4487         * statement.cs (Block.LookupLabel): Only lookup in the current
4488         block, don't recurse into parent or child blocks.
4489         (Block.AddLabel): Check in parent and child blocks, report
4490         CS0140/CS0158 if we find a duplicate.
4491         (Block): Removed this indexer for label lookups.
4492         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
4493         this already does the error reporting for us.
4494
4495         * flowanalysis.cs
4496         (FlowBranching.UsageVector.Block): New public variable; may be null.
4497         (FlowBranching.CreateSibling): Added `Block' argument.
4498         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
4499         label for the target of a `goto' and check whether we're not
4500         leaving a `finally'.
4501
4502 2004-04-27  Martin Baulig  <martin@ximian.com>
4503
4504         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
4505         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
4506         just for returns).
4507
4508 2004-04-27  Martin Baulig  <martin@ximian.com>
4509
4510         * statement.cs (Block.AddLabel): Also check for implicit blocks
4511         and added a CS0158 check.
4512
4513 2004-04-27  Martin Baulig  <martin@ximian.com>
4514
4515         * flowanalysis.cs (FlowBranchingLoop): New class.
4516         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
4517         UsageVector's instead of an ArrayList.
4518         (FlowBranching.Label): Likewise.
4519         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
4520         (FlowBranching.AddBreakVector): New method.
4521
4522 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
4523
4524         * attribute.cs: Small regression fix: only convert the type if we
4525         the type is different, fixes System.Drawing build.
4526
4527 2004-04-27  Martin Baulig  <martin@ximian.com>
4528
4529         * attribute.cs (Attribute.Resolve): If we have a constant value
4530         for a named field or property, implicity convert it to the correct
4531         type.
4532
4533 2004-04-27  Raja R Harinath  <rharinath@novell.com>
4534
4535         * statement.cs (Block.Block): Implicit blocks share
4536         'child_variable_names' fields with parent blocks.
4537         (Block.AddChildVariableNames): Remove.
4538         (Block.AddVariable): Mark variable as "used by a child block" in
4539         every surrounding block.
4540         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
4541         been used in a child block, complain about violation of "Invariant
4542         meaning in blocks" rule.
4543         * cs-parser.jay (declare_local_variables): Don't use
4544         AddChildVariableNames.
4545         (foreach_statement): Don't create an implicit block: 'foreach'
4546         introduces a scope.
4547
4548 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
4549
4550         * convert.cs (ImplicitNumericConversion): 0 is also positive when
4551         converting from 0L to ulong.  Fixes 57522.
4552
4553 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
4554
4555         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
4556         derived class hides via 'new' keyword field from base class (test-242.cs).
4557         TODO: Handle this in the more general way.
4558         
4559         * class.cs (CheckBase): Ditto.
4560
4561 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
4562
4563         * decl.cs (caching_flags): New member for storing cached values
4564         as bit flags.
4565         (MemberCore.Flags): New enum where bit flags for caching_flags
4566         are defined.
4567         (MemberCore.cls_compliance): Moved to caching_flags.
4568         (DeclSpace.Created): Moved to caching_flags.
4569
4570         * class.cs: Use caching_flags instead of DeclSpace.Created
4571         
4572 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
4573
4574         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
4575         if we are only a derived class, not a nested class.
4576
4577         * typemanager.cs: Same as above, but do this at the MemberLookup
4578         level (used by field and methods, properties are handled in
4579         PropertyExpr).   Allow for the qualified access if we are a nested
4580         method. 
4581
4582 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
4583
4584         * class.cs: Refactoring.
4585         (IMethodData): New inteface; Holds links to parent members
4586         to avoid member duplication (reduced memory allocation).
4587         (Method): Implemented IMethodData interface.
4588         (PropertyBase): New inner classes for get/set methods.
4589         (PropertyBase.PropertyMethod): Implemented IMethodData interface
4590         (Event): New inner classes for add/remove methods.
4591         (Event.DelegateMethod): Implemented IMethodData interface.
4592
4593         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
4594         EmitContext (related to class.cs refactoring).
4595
4596 2004-04-21  Raja R Harinath  <rharinath@novell.com>
4597
4598         * delegate.cs (Delegate.VerifyApplicability): If the number of
4599         arguments are the same as the number of parameters, first try to
4600         verify applicability ignoring  any 'params' modifier on the last
4601         parameter.
4602         Fixes #56442.
4603
4604 2004-04-16  Raja R Harinath  <rharinath@novell.com>
4605
4606         * class.cs (TypeContainer.AddIndexer): Use
4607         'ExplicitInterfaceName' to determine if interface name was
4608         explicitly specified.  'InterfaceType' is not initialized at this time.
4609         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
4610         Indexers array is already in the required order.  Initialize
4611         'IndexerName' only if there are normal indexers.
4612         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
4613         (TypeContainer.Emit): Emit DefaultMember attribute only if
4614         IndexerName is initialized.
4615         Fixes #56300.
4616
4617 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
4618
4619         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
4620         Fixes #57007
4621
4622 2004-04-15  Raja R Harinath  <rharinath@novell.com>
4623
4624         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
4625         attributes.
4626         Fix for #56456.
4627
4628         * attribute.cs (Attribute.Resolve): Check for duplicate named
4629         attributes.
4630         Fix for #56463.
4631
4632 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
4633
4634         * iterators.cs (MarkYield): track whether we are in an exception,
4635         and generate code accordingly.  Use a temporary value to store the
4636         result for our state.
4637
4638         I had ignored a bit the interaction of try/catch with iterators
4639         since their behavior was not entirely obvious, but now it is
4640         possible to verify that our behavior is the same as MS .NET 2.0
4641
4642         Fixes 54814
4643
4644 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
4645
4646         * iterators.cs: Avoid creating temporaries if there is no work to
4647         do. 
4648
4649         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
4650         Enumerations, use TypeManager.EnumToUnderlying and call
4651         recursively. 
4652
4653         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
4654         bug #57013
4655
4656         (This.Emit): Use EmitContext.EmitThis to emit our
4657         instance variable.
4658
4659         (This.EmitAssign): Ditto.
4660
4661         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
4662         codepaths, we will move all the functionality into
4663         Mono.CSharp.This 
4664
4665         (FieldExpr.EmitAssign): Ditto.
4666
4667         This fixes several hidden bugs that I uncovered while doing a code
4668         review of this today.
4669
4670         * codegen.cs (EmitThis): reworked so the semantics are more clear
4671         and also support value types "this" instances.
4672
4673         * iterators.cs: Changed so that for iterators in value types, we
4674         do not pass the value type as a parameter.  
4675
4676         Initialization of the enumerator helpers is now done in the caller
4677         instead of passing the parameters to the constructors and having
4678         the constructor set the fields.
4679
4680         The fields have now `assembly' visibility instead of private.
4681
4682 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
4683
4684         * expression.cs (Argument.Resolve): Check if fields passed as ref
4685         or out are contained in a MarshalByRefObject.
4686
4687         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
4688         another compiler type.
4689
4690 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
4691
4692         * class.cs (Indexer.Define): use the new name checking method.
4693         Also, return false on an error.
4694         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
4695         (is_identifier_[start/part]_character): make static.
4696
4697 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
4698
4699         * expression.cs (Binary.ResolveOperator): Do no append strings
4700         twice: since we can be invoked more than once (array evaluation)
4701         on the same concatenation, take care of this here.  Based on a fix
4702         from Ben (bug #56454)
4703
4704 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
4705
4706         * codegen.cs: Fix another case where CS1548 must be reported (when 
4707         delay-sign isn't specified and no private is available #56564). Fix
4708         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
4709         error when MCS is used on the MS runtime and we need to delay-sign 
4710         (which seems unsupported by AssemblyBuilder - see #56621).
4711
4712 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
4713
4714         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
4715         (TypeManager.ComputeNamespaces): Faster implementation for
4716         Microsoft runtime.
4717
4718         * compiler.csproj: Updated AssemblyName to mcs.
4719
4720 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
4721
4722         * rootcontext.cs: Add new types to the boot resolution.
4723
4724         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
4725         MulticastDelegate is not allowed.
4726
4727         * typemanager.cs: Add new types to lookup: System.TypedReference
4728         and ArgIterator.
4729
4730         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
4731         check for TypedReference or ArgIterator, they are not allowed. 
4732
4733         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
4734         makes us properly catch 1510 in some conditions (see bug 56016 for
4735         details). 
4736
4737 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
4738
4739         * CryptoConvert.cs: update from corlib version
4740         with endian fixes.
4741
4742 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
4743
4744         * class.cs (Indexer.Define): Check indexername declaration
4745
4746 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
4747
4748         * attribute.cs (IsClsCompliant): Fixed problem with handling
4749         all three states (compliant, not-compliant, undetected).
4750
4751 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
4752
4753         * attribute.cs (Attribute): Location is now public.
4754         (Resolve): Store resolved arguments (pos_values) in attribute class.
4755         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
4756         (GetClsCompliantAttributeValue): New method that gets
4757         CLSCompliantAttribute value.
4758         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
4759         if exists else null.
4760         (AttributeTester): New class for CLS-Compliant verification routines.
4761
4762         * class.cs (Emit): Add CLS-Compliant verification.
4763         (Method.GetSignatureForError): Implemented.
4764         (Constructor.GetSignatureForError): Implemented
4765         (Constructor.HasCompliantArgs): Returns if constructor has
4766         CLS-Compliant arguments.
4767         (Constructor.Emit): Override.
4768         (Construcor.IsIdentifierClsCompliant): New method; For constructors
4769         is needed to test only parameters.
4770         (FieldBase.GetSignatureForError): Implemented.
4771         (TypeContainer): New member for storing base interfaces.
4772         (TypeContainer.FindMembers): Search in base interfaces too.
4773
4774         * codegen.cs (GetClsComplianceAttribute): New method that gets
4775         assembly or module CLSCompliantAttribute value.
4776         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
4777         for assembly.
4778         (ModuleClass.Emit): Add error 3012 test.
4779
4780         * const.cs (Emit): Override and call base for CLS-Compliant tests.
4781
4782         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
4783         state for all decl types.
4784         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
4785         if CLS-Compliant tests are required.
4786         (IsClsCompliaceRequired): New method. Analyze whether code
4787         must be CLS-Compliant.
4788         (IsExposedFromAssembly): New method. Returns true when MemberCore
4789         is exposed from assembly.
4790         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
4791         value or gets cached value.
4792         (HasClsCompliantAttribute): New method. Returns true if MemberCore
4793         is explicitly marked with CLSCompliantAttribute.
4794         (IsIdentifierClsCompliant): New abstract method. This method is
4795         used to testing error 3005.
4796         (IsIdentifierAndParamClsCompliant): New method. Common helper method
4797         for identifier and parameters CLS-Compliant testing.
4798         (VerifyClsCompliance): New method. The main virtual method for
4799         CLS-Compliant verifications.
4800         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
4801         null. I don't know why is null (too many public members !).
4802         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
4803         and get value of first CLSCompliantAttribute that found.
4804
4805         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
4806         (VerifyClsCompliance): Override and add extra tests.
4807
4808         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
4809         clscheck- disable CLS-Compliant verification event if assembly is has
4810         CLSCompliantAttribute(true).
4811
4812         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
4813         ApllyAttribute is now called in emit section as in the other cases.
4814         Possible future Emit integration.
4815         (IsIdentifierClsCompliant): New override.
4816         (VerifyClsCompliance): New override.
4817         (GetEnumeratorName): Returns full enum name.
4818
4819         * parameter.cs (GetSignatureForError): Implemented.
4820
4821         * report.cs (WarningData): New struct for Warning message information.
4822         (LocationOfPreviousError): New method.
4823         (Warning): New method. Reports warning based on the warning table.
4824         (Error_T): New method. Reports error based on the error table.
4825
4826         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
4827         verifications are done here.
4828
4829         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
4830
4831         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
4832         CLSCompliantAttribute.
4833         (all_imported_types): New member holds all imported types from other
4834         assemblies.
4835         (LoadAllImportedTypes): New method fills static table with exported types
4836         from all referenced assemblies.
4837         (Modules): New property returns all assembly modules.
4838
4839 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
4840
4841         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
4842         throwing a parser error.
4843
4844         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
4845         which removes the hardcoded get_/set_ prefixes for properties, as
4846         IL allows for the properties to be named something else.  
4847
4848         Bug #56013
4849
4850         * expression.cs: Do not override operand before we know if it is
4851         non-null.  Fix 56207
4852
4853 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4854
4855         * typemanager.cs: support for pinned variables.
4856
4857 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4858
4859         * decl.cs, typemanager.cs: Avoid using an arraylist
4860         as a buffer if there is only one result set.
4861
4862 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4863
4864         * expression.cs: Make sure you cant call a static method
4865         with an instance expression, bug #56174.
4866
4867 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
4868
4869         * class.cs (IsDuplicateImplementation): Improve error reporting to
4870         flag 663 (method only differs in parameter modifier).
4871
4872         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
4873         in preprocessor directives.
4874
4875         * location.cs (LookupFile): Allow for the empty path.
4876
4877         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
4878         better approach for some of that patch, but its failing with the
4879         CharSet enumeration.  For now try/catch will do.
4880
4881         * typemanager.cs: Do not crash if a struct does not have fields.
4882         Fixes 56150.
4883
4884 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4885
4886         * expression.cs: cs0213, cant fix a fixed expression.
4887         fixes 50231.
4888
4889 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4890
4891         * cs-parser.jay: detect invalid embeded statements gracefully.
4892         bug #51113.
4893
4894 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4895
4896         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
4897         As a regex:
4898         s/
4899         the invocation type may not be a subclass of the tye of the item/
4900         The type of the item must be a subclass of the invocation item.
4901         /g
4902
4903         Fixes bug #50820.
4904
4905 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
4906
4907         * attribute.cs: Added methods to get a string and a bool from an
4908         attribute. Required to information from AssemblyKeyFileAttribute,
4909         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
4910         * codegen.cs: Modified AssemblyName creation to include support for
4911         strongnames. Catch additional exceptions to report them as CS1548.
4912         * compiler.csproj: Updated include CryptoConvert.cs.
4913         * compiler.csproj.user: Removed file - user specific configuration.
4914         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
4915         Mono.Security assembly. The original class is maintained and tested in
4916         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
4917         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
4918         like CSC 8.0 (C# v2) supports.
4919         * Makefile: Added CryptoConvert.cs to mcs sources.
4920         * rootcontext.cs: Added new options for strongnames.
4921
4922 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
4923
4924         * driver.cs: For --expect-error, report error code `2'
4925         if the program compiled with no errors, error code `1' if
4926         it compiled with an error other than the one expected.
4927
4928 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
4929
4930         * compiler.csproj: Updated for Visual Studio .NET 2003.
4931         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
4932         * compiler.sln: Updated for Visual Studio .NET 2003.
4933
4934 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
4935
4936         * expression.cs: Fix bug #47234. We basically need to apply the
4937         rule that we prefer the conversion of null to a reference type
4938         when faced with a conversion to 'object' (csc behaviour).
4939
4940 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4941
4942         * statement.cs: Shorter form for foreach, eliminates
4943         a local variable. r=Martin.
4944
4945 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4946
4947         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
4948         checks if we can use brtrue/brfalse to test for 0.
4949         * expression.cs: use the above in the test for using brtrue/brfalse.
4950         cleanup code a bit.
4951
4952 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4953
4954         * expression.cs: Rewrite string concat stuff. Benefits:
4955
4956         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
4957         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
4958         rather than a concat chain.
4959
4960         * typemanager.cs: Add lookups for more concat overloads.
4961
4962 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4963
4964         * expression.cs: Emit shorter il code for array init.
4965
4966         newarr
4967         dup
4968         // set 1
4969
4970         // set 2
4971
4972         newarr
4973         stloc.x
4974
4975         ldloc.x
4976         // set 1
4977
4978         ldloc.x
4979         // set 2
4980
4981 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
4982
4983         * statement.cs: Before, two switch blocks would be merged if the
4984         total size of the blocks (end_item - begin_item + 1) was less than
4985         two times the combined sizes of the blocks.
4986
4987         Now, it will only merge if after the merge at least half of the
4988         slots are filled.
4989
4990         fixes 55885.
4991
4992 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
4993
4994         * class.cs : csc build fix for GetMethods(). See bug #52503.
4995
4996 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
4997
4998         * expression.cs: Make sure fp comparisons work with NaN.
4999         This fixes bug #54303. Mig approved this patch a long
5000         time ago, but we were not able to test b/c the runtime
5001         had a related bug.
5002
5003 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
5004
5005         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
5006
5007 2004-03-19  Martin Baulig  <martin@ximian.com>
5008
5009         * class.cs (MemberCore.IsDuplicateImplementation): Report the
5010         error here and not in our caller.
5011
5012 2004-03-19  Martin Baulig  <martin@ximian.com>
5013
5014         * interface.cs: Completely killed this file.
5015         (Interface): We're now a TypeContainer and live in class.cs.
5016
5017         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
5018         argument; we're now also called for interfaces.
5019         (TypeContainer.DefineMembers): Allow this method being called
5020         multiple times.
5021         (TypeContainer.GetMethods): New public method; formerly known as
5022         Interface.GetMethod().  This is used by PendingImplementation.
5023         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
5024         it's now private and non-static.
5025         (Interface): Moved this here; it's now implemented similar to
5026         Class and Struct.
5027         (Method, Property, Event, Indexer): Added `bool is_interface'
5028         argument to their .ctor's.
5029         (MemberBase.IsInterface): New public field.
5030
5031         * cs-parser.jay: Create normal Method, Property, Event, Indexer
5032         instances instead of InterfaceMethod, InterfaceProperty, etc.
5033         (opt_interface_base): Removed; we now use `opt_class_base' instead.
5034         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
5035
5036 2004-03-19  Martin Baulig  <martin@ximian.com>
5037
5038         * class.cs (MethodCore.IsDuplicateImplementation): New private
5039         method which does the CS0111 checking.
5040         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
5041         Use IsDuplicateImplementation().
5042
5043 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
5044
5045         * decl.cs (FindMemberToOverride): New method to find the correct
5046         method or property to override in the base class.
5047         * class.cs
5048             - Make Method/Property use the above method to find the
5049               version in the base class.
5050             - Remove the InheritableMemberSignatureCompare as it is now
5051               dead code.
5052
5053         This patch makes large code bases much faster to compile, as it is
5054         O(n) rather than O(n^2) to do this validation.
5055
5056         Also, it fixes bug 52458 which is that nested classes are not
5057         taken into account when finding the base class member.
5058
5059         Reviewed/Approved by Martin.
5060
5061 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
5062
5063         * interface.cs: In all interface classes removed redundant
5064         member initialization.
5065
5066 2004-03-16  Martin Baulig  <martin@ximian.com>
5067
5068         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
5069
5070 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
5071
5072         * decl.cs (DefineTypeAndParents): New helper method to define a
5073         type's containers before the type itself is defined;  This is a
5074         bug exposed by the recent changes to Windows.Forms when an
5075         implemented interface was defined inside a class that had not been
5076         built yet.   
5077
5078         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
5079
5080         (Check): Loop correctly to report errors modifiers
5081         (UNSAFE was not in the loop, since it was the same as TOP).
5082
5083         * interface.cs: Every interface member now takes a ModFlags,
5084         instead of a "is_new" bool, which we set on the base MemberCore. 
5085
5086         Every place where we called "UnsafeOk" in the interface, now we
5087         call the proper member (InterfaceMethod.UnsafeOK) instead to get
5088         the unsafe settings from the member declaration instead of the
5089         container interface. 
5090
5091         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
5092
5093         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
5094         `set_indexer_name' to the pending bits (one per type).
5095
5096         We fixed a bug today that was picking the wrong method to
5097         override, since for properties the existing InterfaceMethod code
5098         basically ignored the method name.  Now we make sure that the
5099         method name is one of the valid indexer names.
5100
5101 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
5102  
5103         * support.cs (SeekableStreamReader): Keep track of stream byte
5104         positions and don't mix them with character offsets to the buffer.
5105
5106         Patch from Gustavo Giráldez
5107
5108 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
5109
5110         * interface.cs (InterfaceSetGetBase): Removed double member
5111         initialization, base class does it as well.
5112
5113 2004-03-13  Martin Baulig  <martin@ximian.com>
5114
5115         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
5116         when compiling corlib.
5117
5118 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
5119
5120         * convert.cs (ExplicitConversion): We were reporting an error on
5121         certain conversions (object_type source to a value type, when the
5122         expression was `null') before we had a chance to pass it through
5123         the user defined conversions.
5124
5125         * driver.cs: Replace / and \ in resource specifications to dots.
5126         Fixes 50752
5127
5128         * class.cs: Add check for duplicate operators.  Fixes 52477
5129
5130 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
5131
5132         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
5133         that are in the middle of the statements, not only at the end.
5134         Fixes #54987
5135
5136         * class.cs (TypeContainer.AddField): No longer set the
5137         `HaveStaticConstructor' flag, now we call it
5138         `UserDefineStaticConstructor' to diferentiate the slightly
5139         semantic difference.
5140
5141         The situation is that we were not adding BeforeFieldInit (from
5142         Modifiers.TypeAttr) to classes that could have it.
5143         BeforeFieldInit should be set to classes that have no static
5144         constructor. 
5145
5146         See:
5147
5148         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
5149
5150         And most importantly Zoltan's comment:
5151
5152         http://bugzilla.ximian.com/show_bug.cgi?id=44229
5153
5154         "I think beforefieldinit means 'it's ok to initialize the type sometime 
5155          before its static fields are used', i.e. initialization does not need
5156          to be triggered by the first access to the type. Setting this flag
5157          helps the JIT to compile better code, since it can run the static
5158          constructor at JIT time, and does not need to generate code to call it
5159          (possibly lots of times) at runtime. Unfortunately, mcs does not set
5160          this flag for lots of classes like String. 
5161          
5162          csc sets this flag if the type does not have an explicit static 
5163          constructor. The reasoning seems to be that if there are only static
5164          initalizers for a type, and no static constructor, then the programmer
5165          does not care when this initialization happens, so beforefieldinit
5166          can be used.
5167          
5168          This bug prevents the AOT compiler from being usable, since it 
5169          generates so many calls to mono_runtime_class_init that the AOT code
5170          is much slower than the JITted code. The JITted code is faster, 
5171          because it does not generate these calls if the vtable is type is
5172          already initialized, which is true in the majority of cases. But the
5173          AOT compiler can't do this."
5174
5175 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
5176
5177         * class.cs (MethodData.Emit): Refactor the code so symbolic
5178         information is generated for destructors;  For some reasons we
5179         were taking a code path that did not generate symbolic information
5180         before. 
5181
5182 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
5183
5184         * class.cs: Create a Constructor.CheckBase method that
5185         takes care of all validation type code. The method
5186         contains some code that was moved from Define.
5187
5188         It also includes new code that checks for duplicate ctors.
5189         This fixes bug #55148.
5190
5191 2004-03-09  Joshua Tauberer <tauberer@for.net>
5192
5193         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
5194         a { ... }-style array creation invokes EmitStaticInitializers
5195         which is not good for reference-type arrays.  String, decimal
5196         and now null constants (NullCast) are not counted toward
5197         static initializers.
5198
5199 2004-03-05  Martin Baulig  <martin@ximian.com>
5200
5201         * location.cs (SourceFile.HasLineDirective): New public field;
5202         specifies whether the file contains or is referenced by a "#line"
5203         directive.
5204         (Location.DefineSymbolDocuments): Ignore source files which
5205         either contain or are referenced by a "#line" directive.        
5206
5207 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
5208
5209         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
5210         direct access to our parent, so check the method inline there.
5211
5212 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
5213
5214         * expression.cs (Invocation.EmitCall): Miguel's last commit
5215         caused a regression. If you had:
5216
5217             T t = null;
5218             t.Foo ();
5219
5220         In Foo the implict this would be null.
5221
5222 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
5223
5224         * expression.cs (Invocation.EmitCall): If the method is not
5225         virtual, do not emit a CallVirt to it, use Call.
5226
5227         * typemanager.cs (GetFullNameSignature): Improve the method to
5228         cope with ".ctor" and replace it with the type name.
5229
5230         * class.cs (ConstructorInitializer.Resolve): Now the method takes
5231         as an argument the ConstructorBuilder where it is being defined,
5232         to catch the recursive constructor invocations.
5233
5234 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
5235
5236         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
5237         routines to check if a type is an enumerable/enumerator allow
5238         classes that implement the IEnumerable or IEnumerator interfaces.
5239
5240         * class.cs (Property, Operator): Implement IIteratorContainer, and
5241         implement SetYields.
5242
5243         (Property.Define): Do the block swapping for get_methods in the
5244         context of iterators.   We need to check if Properties also
5245         include indexers or not.
5246
5247         (Operator): Assign the Block before invoking the
5248         OperatorMethod.Define, so we can trigger the Iterator code
5249         replacement. 
5250
5251         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
5252         Property and Operator classes are not created when we parse the
5253         declarator but until we have the block completed, so we use a
5254         singleton SimpleIteratorContainer.Simple to flag whether the
5255         SetYields has been invoked.
5256
5257         We propagate this setting then to the Property or the Operator to
5258         allow the `yield' to function.
5259
5260 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
5261
5262         * codegen.cs: Implemented attribute support for modules.
5263         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
5264         Assembly/Module functionality.
5265
5266         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
5267         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
5268         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
5269
5270 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
5271
5272         * interface.cs (FindMembers): The operation is performed on all base
5273         interfaces and not only on the first. It is required for future CLS Compliance patch.
5274
5275 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
5276
5277         * statement.cs, codegen.cs:
5278         This patch deals with patterns such as:
5279
5280         public class List : IEnumerable {
5281
5282                 public MyEnumerator GetEnumerator () {
5283                         return new MyEnumerator(this);
5284                 }
5285
5286                 IEnumerator IEnumerable.GetEnumerator () {
5287                         ...
5288                 }
5289                 
5290                 public struct MyEnumerator : IEnumerator {
5291                         ...
5292                 }
5293         }
5294
5295         Before, there were a few things we did wrong:
5296         1) we would emit callvirt on a struct, which is illegal
5297         2) we emited ldarg when we needed to emit ldarga
5298         3) we would mistakenly call the interface methods on an enumerator
5299         type that derived from IEnumerator and was in another assembly. For example:
5300
5301         public class MyEnumerator : IEnumerator
5302
5303         Would have the interface methods called, even if there were public impls of the
5304         method. In a struct, this lead to invalid IL code.
5305
5306 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
5307
5308         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
5309           renamed to Emit.
5310
5311         * delegate.cs (Define): Fixed crash when delegate type is undefined.
5312
5313 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
5314
5315         * cs-parser.jay: Fix small regression: we were not testing V2
5316         compiler features correctly.
5317
5318         * interface.cs: If the emit context is null, then create one
5319
5320 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
5321
5322         * decl.cs (GetSignatureForError): New virtual method to get full name
5323           for error messages.
5324
5325         * attribute.cs (IAttributeSupport): New interface for attribute setting.
5326           Now it is possible to rewrite ApplyAttributes method to be less if/else.
5327
5328         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
5329           Duplicated members and code in these classes has been removed.
5330           Better encapsulation in these classes.
5331
5332 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
5333
5334         * assign.cs (Assign.DoResolve): When dealing with compound
5335         assignments, there is a new rule in ECMA C# 2.4 (might have been
5336         there before, but it is documented here) that states that in:
5337
5338         a op= b;
5339
5340         If b is of type int, and the `op' is a shift-operator, then the
5341         above is evaluated as:
5342
5343         a = (int) a op b 
5344
5345         * expression.cs (Binary.ResolveOperator): Instead of testing for
5346         int/uint/long/ulong, try to implicitly convert to any of those
5347         types and use that in pointer arithmetic.
5348
5349         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
5350         method to print information for from the type, not from the
5351         null-method we were given.
5352
5353 2004-02-01  Duncan Mak  <duncan@ximian.com>
5354
5355         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
5356         parsing for cmd, fixes bug #53694.
5357
5358 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
5359
5360         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
5361         in the member name duplication tests. Property and operator name duplication
5362         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
5363
5364 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
5365
5366         * interface.cs (PopulateMethod): Fixed crash when interface method
5367         returns not existing type (error test cs0246-3.cs).
5368
5369 2004-02-02  Ravi Pratap M <ravi@ximian.com>
5370
5371         * cs-parser.jay (interface_accessors): Re-write actions to also
5372         store attributes attached to get and set methods. Fix spelling
5373         while at it.
5374
5375         (inteface_property_declaration): Modify accordingly.
5376
5377         (InterfaceAccessorInfo): New helper class to store information to pass
5378         around between rules that use interface_accessors.
5379
5380         * interface.cs (Emit): Apply attributes on the get and set
5381         accessors of properties and indexers too.
5382
5383         * attribute.cs (ApplyAttributes): Modify accordingly to use the
5384         right MethodBuilder when applying attributes to the get and set accessors.
5385
5386 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
5387
5388         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
5389
5390 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
5391
5392         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
5393
5394 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
5395
5396         * cs-parser.jay: Remove YIELD token, instead use the new grammar
5397         changes that treat `yield' specially when present before `break'
5398         or `return' tokens.
5399
5400         * cs-tokenizer.cs: yield is no longer a keyword.
5401
5402 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
5403
5404         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
5405         setting for default constructors.
5406         For default constructors are almost every time set wrong Modifier. The
5407         generated IL code has been alright. But inside mcs this values was
5408         wrong and this was reason why several of my CLS Compliance tests
5409         failed.
5410
5411 2004-01-22  Martin Baulig  <martin@ximian.com>
5412
5413         * cs-parser.jay (namespace_or_type_name): Return an Expression,
5414         not a QualifiedIdentifier.  This is what `type_name_expression'
5415         was previously doing.
5416         (type_name_expression): Removed; the code is now in
5417         `namespace_or_type_name'.
5418         (qualified_identifier): Removed, use `namespace_or_type_name'
5419         instead.
5420         (QualifiedIdentifier): Removed this class.      
5421
5422 2004-01-22  Martin Baulig  <martin@ximian.com>
5423
5424         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
5425         not a string as alias name.
5426
5427 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
5428
5429         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
5430         #52730 bug, and instead compute correctly the need to use a
5431         temporary variable when requesting an address based on the
5432         static/instace modified of the field and the constructor.
5433  
5434 2004-01-21  Martin Baulig  <martin@ximian.com>
5435
5436         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
5437         class and namespace before looking up aliases.  Fixes #52517.
5438
5439 2004-01-21  Martin Baulig  <martin@ximian.com>
5440
5441         * flowanalysis.cs (UsageVector.Merge): Allow variables being
5442         assinged in a 'try'; fixes exception4.cs.
5443
5444 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5445         * class.cs : Implemented parameter-less constructor for TypeContainer
5446
5447         * decl.cs: Attributes are now stored here. New property OptAttributes
5448
5449         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
5450
5451         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
5452
5453 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5454
5455         * typemanager.cs (CSharpSignature): Now reports also inner class name.
5456           (CSharpSignature): New method for indexer and property signature.
5457
5458 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5459
5460         * pending.cs (IsVirtualFilter): Faster implementation.
5461
5462 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5463
5464         * typemanager.cs: Avoid inclusion of same assembly more than once.
5465
5466 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5467
5468         * cs-parser.jay: Fixed problem where the last assembly attribute
5469           has been applied also to following declaration (class, struct, etc.)
5470           
5471 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5472
5473         * class.cs: Added error CS0538, CS0539 reporting.
5474         Fixed crash on Microsoft runtime when field type is void.
5475
5476         * cs-parser.jay: Added error CS0537 reporting.
5477
5478         * pending.cs: Added error CS0535 reporting.
5479         Improved error report for errors CS0536, CS0534.
5480
5481 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
5482
5483         Merge a few bits from the Anonymous Method MCS tree.
5484
5485         * statement.cs (ToplevelBlock): New class for toplevel methods,
5486         will hold anonymous methods, lifted variables.
5487
5488         * cs-parser.jay: Create toplevel blocks for delegates and for
5489         regular blocks of code. 
5490
5491 2004-01-20  Martin Baulig  <martin@ximian.com>
5492
5493         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
5494         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
5495         and `NeedExplicitReturn'; added `IsLastStatement'.
5496         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
5497         have a `ReturnLabel' or we're not unreachable.
5498
5499         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
5500         child's reachability; don't just override ours with it.  Fixes
5501         #58058 (lluis's example).
5502         (FlowBranching): Added public InTryOrCatch(), InCatch(),
5503         InFinally(), InLoop(), InSwitch() and
5504         BreakCrossesTryCatchBoundary() methods.
5505
5506         * statement.cs (Return): Do all error checking in Resolve().
5507         Unless we are the last statement in a top-level block, always
5508         create a return label and jump to it.
5509         (Break, Continue): Do all error checking in Resolve(); also make
5510         sure we aren't leaving a `finally'.
5511         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
5512         statement in a top-level block.
5513         (Block.Flags): Added `IsDestructor'.
5514         (Block.IsDestructor): New public property.
5515
5516 2004-01-20  Martin Baulig  <martin@ximian.com>
5517
5518         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
5519
5520 2004-01-20  Martin Baulig  <martin@ximian.com>
5521
5522         * statement.cs (Statement.ResolveUnreachable): New public method.
5523         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
5524         (Block.Resolve): Resolve unreachable statements.
5525
5526 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
5527
5528         * expression.cs: We need to fix the case where we do
5529         not have a temp variable here.
5530
5531         * assign.cs: Only expression compound assignments need
5532         temporary variables.
5533
5534 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
5535
5536         * flowanalysis.cs: Reduce memory allocation in a few ways:
5537           - A block with no variables should not allocate a bit
5538             vector for itself.
5539           - A method with no out parameters does not need any tracking
5540             for assignment of the parameters, so we need not allocate
5541             any data for it.
5542           - The arrays:
5543                 public readonly Type[] VariableTypes;
5544                 public readonly string[] VariableNames;
5545             Are redundant. The data is already stored in the variable
5546             map, so we need not allocate another array for it.
5547           - We need to add alot of checks for if (params | locals) == null
5548             due to the first two changes.
5549
5550 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
5551
5552         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
5553         implement IMemoryLocation, we store a copy on a local variable and
5554         take the address of it.  Patch from Benjamin Jemlich
5555
5556         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
5557         to use a special "type_name_expression" rule which reduces the
5558         number of "QualifiedIdentifier" classes created, and instead
5559         directly creates MemberAccess expressions.
5560
5561 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
5562
5563         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
5564         that fixes #52853.  Null literal assignment to ValueType
5565
5566         * class.cs (MethodData.Emit): Instead of checking the name of the
5567         method to determine if its a destructor, create a new derived
5568         class from Method called Destructor, and test for that.  
5569
5570         * cs-parser.jay: Create a Destructor object instead of a Method.  
5571
5572         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
5573
5574         Fixes: 52933
5575
5576 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
5577
5578         * expression.cs (Binary.ResolveOperator): Perform an implicit
5579         conversion from MethodGroups to their delegate types on the
5580         Addition operation.
5581
5582         * delegate.cs: Introduce a new class DelegateCreation that is the
5583         base class for `NewDelegate' and `ImplicitDelegateCreation',
5584         factor some code in here.
5585
5586         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
5587         conversion from MethodGroups to compatible delegate types. 
5588
5589         * ecore.cs (Expression.Resolve): Do not flag error 654
5590         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
5591         we allow conversions from MethodGroups to delegate types now.
5592
5593         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
5594         assignments in v2 either.
5595
5596 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
5597
5598         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
5599         static read-only fields in ctors.
5600
5601         Applied patch from Benjamin Jemlich 
5602
5603         * expression.cs (UnaryMutator): Avoid leaking local variables. 
5604
5605 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
5606
5607         * cs-tokenizer.cs (IsCastToken): Allow the various native types
5608         here to return true, as they can be used like this:
5609
5610                 (XXX) int.MEMBER ()
5611
5612         Fixed 49836 and all the other dups
5613
5614 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
5615
5616         * driver.cs: Implement /win32res and /win32icon.
5617
5618 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
5619
5620         * cs-parser.jay: Add a rule to improve error handling for the
5621         common mistake of placing modifiers after the type.
5622
5623 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
5624
5625         * cs-parser.jay (interface_event_declaration): Catch
5626         initialization of events on interfaces, and report cs0068
5627
5628         * cs-parser.jay (interface_event_declaration): Catch
5629         initialization of events. 
5630
5631         * ecore.cs: Better report missing constructors.
5632
5633         * expression.cs (Binary.ResolveOperator): My previous bug fix had
5634         the error reporting done in the wrong place.  Fix.
5635
5636         * expression.cs (Binary.ResolveOperator): Catch the 
5637         operator + (E x, E y) error earlier, and later allow for implicit
5638         conversions in operator +/- (E e, U x) from U to the underlying
5639         type of E.
5640
5641         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
5642         52596, if the container class is abstract, the default constructor
5643         is protected otherwise its public (before, we were always public).
5644
5645         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
5646         fixed statement.
5647
5648         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
5649         Jemlich that fixes bug #52597, MCS was generating invalid code for
5650         idisposable structs.   Thanks to Ben for following up with this
5651         bug as well.
5652
5653 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
5654
5655         * driver.cs: Allow assemblies without code to be generated, fixes
5656         52230.
5657
5658 2004-01-07  Nick Drochak <ndrochak@gol.com>
5659
5660         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
5661
5662 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
5663
5664         * cs-parser.jay: Add rules to improve error reporting if fields or
5665         methods are declared at the namespace level (error 116)
5666
5667         * Add rules to catch event add/remove
5668
5669 2004-01-04  David Sheldon <dave-mono@earth.li>
5670
5671   * expression.cs: Added matching ")" to error message for 
5672   CS0077
5673
5674 2004-01-03 Todd Berman <tberman@gentoo.org>
5675
5676         * ecore.cs, attribute.cs:
5677         Applying fix from #52429.
5678
5679 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5680
5681         * ecore.cs, expression.cs, statement.cs:
5682         Total rewrite of how we handle branching. We
5683         now handle complex boolean expressions with fewer
5684         jumps. As well if (x == 0) no longer emits a ceq.
5685
5686         if (x is Foo) is much faster now, because we generate
5687         better code.
5688
5689         Overall, we get a pretty big improvement on our benchmark
5690         tests. The code we generate is smaller and more readable.
5691
5692         I did a full two-stage bootstrap. The patch was reviewed
5693         by Martin and Miguel.
5694
5695 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5696
5697         * cs-parser.jay: Make primary_expression not take a QI.
5698         we dont need this because the member_access rule covers
5699         us here. So we replace the rule with just IDENTIFIER.
5700
5701         This has two good effects. First, we remove a s/r conflict.
5702         Second, we allocate many fewer QualifiedIdentifier objects.
5703
5704 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5705
5706         * attribute.cs: Handle MarshalAs attributes as pseudo, and
5707         set the correct information via SRE. This prevents
5708         hanging on the MS runtime. Fixes #29374.
5709
5710 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5711
5712         * convert.cs: correctly handle conversions to value types
5713         from Enum and ValueType as unboxing conversions.
5714
5715         Fixes bug #52569. Patch by Benjamin Jemlich.
5716
5717 2004-01-02  Ravi Pratap  <ravi@ximian.com>
5718
5719         * expression.cs (BetterConversion): Prefer int -> uint
5720         over int -> ulong (csc's behaviour). This fixed bug #52046.
5721
5722 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
5723
5724         * decl.cs (MemberCache.FindMembers): now returns a
5725         MemberInfo [].
5726
5727         * typemanager.cs: In general, go with with ^^.
5728         (CopyNewMethods): take an IList.
5729         (RealMemberLookup): Only allocate an arraylist
5730         if we copy from two sets of methods.
5731
5732         This change basically does two things:
5733         1) Fewer array lists allocated due to CopyNewMethods.
5734         2) the explicit cast in MemberList costed ALOT.
5735
5736 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
5737
5738         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
5739         a hashtable to avoid needless string allocations when an identifier is
5740         used more than once (the common case).
5741
5742 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
5743
5744         * pending.cs: MS's TypeBuilder.GetInterfaces ()
5745         is broken, it will not return anything. So, we
5746         have to use the information we have in mcs to
5747         do the task.
5748
5749         * typemanager.cs: Add a cache for GetInterfaces,
5750         since this will now be used more often (due to ^^)
5751
5752         (GetExplicitInterfaces) New method that gets the
5753         declared, not effective, interfaces on a type
5754         builder (eg, if you have interface IFoo, interface
5755         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
5756         { IBar }.
5757
5758         This patch makes MCS able to bootstrap itself on
5759         Windows again.
5760
5761 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
5762
5763         * expression.cs: Remove the Nop's that Miguel put
5764         in by mistake.
5765
5766 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
5767
5768         * report.cs, codegen.cs: Give the real stack trace to
5769         the error when an exception is thrown.
5770
5771 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
5772
5773         * decl.cs: only allocate hashtables for ifaces if 
5774         it is an iface!
5775
5776 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
5777
5778         * expression.cs: fix the error from cs0121-2.cs
5779         (a parent interface has two child interfaces that
5780         have a function with the same name and 0 params
5781         and the function is called through the parent).
5782
5783 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
5784
5785         * class.cs, rootcontext.cs, typmanager.cs: do not
5786         leak pointers.
5787
5788 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
5789
5790         * codegen.cs: remove stack for the ec flow branching.
5791         It is already a linked list, so no need.
5792
5793 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
5794
5795         * Makefile: Allow custom profiler here.
5796
5797 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
5798
5799         * typemanager.cs (LookupType):
5800           - Use a static char [], because split takes
5801             a param array for args, so it was allocating
5802             every time.
5803           - Do not store true in a hashtable, it boxes.
5804
5805 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
5806
5807         * flowanalysis.cs: bytify common enums.
5808
5809 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
5810
5811         * modifiers.cs: Add a new set of flags for the
5812         flags allowed on explicit interface impls.
5813         * cs-parser.jay: catch the use of modifiers in
5814         interfaces correctly.
5815         * class.cs: catch private void IFoo.Blah ().
5816
5817         All related to bug #50572.
5818
5819 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
5820
5821         * decl.cs: Rewrite the consistant accessability checking.
5822         Accessability is not linear, it must be implemented in
5823         a tableish way. Fixes #49704.
5824
5825 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
5826
5827         * expression.cs: Handle negation in a checked context.
5828         We must use subtraction from zero. Fixes #38674.
5829
5830 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
5831
5832         * class.cs: Ignore static void main in DLLs.
5833         * rootcontext.cs: Handle the target type here,
5834         since we are have to access it from class.cs
5835         * driver.cs: account for the above.
5836
5837 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
5838
5839         * report.cs: Give line numbers and files if available.
5840
5841 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
5842
5843         * driver.cs: Implement /addmodule.
5844
5845         * typemanager.cs:  Change 'modules' field so it now contains Modules not
5846         ModuleBuilders.
5847
5848 2003-12-20  Martin Baulig  <martin@ximian.com>
5849
5850         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
5851         (FieldBase.IsAssigned): Removed this field.
5852         (FieldBase.SetAssigned): New public method.
5853         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
5854
5855 2003-12-20  Martin Baulig  <martin@ximian.com>
5856
5857         * expression.cs (LocalVariableReference.DoResolve): Don't set
5858         `vi.Used' if we're called from DoResolveLValue().
5859
5860         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
5861         returns the usage vector it just merged into the current one -
5862         pass this one to UsageWarning().
5863         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
5864         of the `EmitContext', don't call this recursively on our children.
5865
5866 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
5867
5868         * driver.cs: Implement /target:module.
5869
5870 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
5871
5872         * support.cs (CharArrayHashtable): New helper class.
5873
5874         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
5875         char arrays, not strings, so we can avoid creating a string in
5876         consume_identifier if the identifier is a keyword.
5877
5878 2003-12-16  Martin Baulig  <martin@ximian.com>
5879
5880         * statement.cs (LocalInfo.Assigned): Removed this property.
5881         (LocalInfo.Flags): Removed `Assigned'.
5882         (LocalInfo.IsAssigned): New public method; takes the EmitContext
5883         and uses flow analysis.
5884         (Block.UsageWarning): Made this method private.
5885         (Block.Resolve): Call UsageWarning() if appropriate.
5886
5887         * expression.cs (LocalVariableReference.DoResolve): Always set
5888         LocalInfo.Used here.
5889
5890 2003-12-13  Martin Baulig  <martin@ximian.com>
5891
5892         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
5893         any value here; we're now using flow analysis to figure out
5894         whether a statement/block returns a value.
5895
5896 2003-12-13  Martin Baulig  <martin@ximian.com>
5897
5898         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
5899         working again.
5900         (FlowBranching.MergeFinally): Don't call
5901         `branching.CheckOutParameters()' here, this is called in
5902         MergeTopBlock().
5903         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
5904         when adding the `finally' vector.       
5905
5906 2003-12-13  Martin Baulig  <martin@ximian.com>
5907
5908         * flowanalysis.cs
5909         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
5910         actually work and also fix #48962.
5911
5912 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
5913
5914         * decl.cs: Do not check System.Object for nested types,
5915         since we know it does not have any. Big bang for buck:
5916
5917         BEFORE:
5918            Run 1:   8.35 seconds
5919            Run 2:   8.32 seconds
5920            corlib:  17.99 seconds
5921         AFTER:
5922            Run 1:   8.17 seconds
5923            Run 2:   8.17 seconds
5924            corlib:  17.39 seconds
5925
5926 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
5927
5928         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
5929         time we are returning 0 members, so we save alot here.
5930
5931 2003-12-11  Martin Baulig  <martin@ximian.com>
5932
5933         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
5934         `MergeChild()', also just take the `FlowBranching' as argument;
5935         call Merge() on it and return the result.
5936         (FlowBranching.Merge): We don't need to do anything if we just
5937         have one sibling.
5938
5939 2003-12-11  Martin Baulig  <martin@ximian.com>
5940
5941         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
5942         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
5943         Maurer for this idea.
5944
5945 2003-12-11  Martin Baulig  <martin@ximian.com>
5946
5947         * flowanalysis.cs (MergeResult): This class is now gone; we now
5948         use the `UsageVector' for this.  The reason for this is that if a
5949         branching just has one sibling, we don't need to "merge" them at
5950         all - that's the next step to do.
5951         (FlowBranching.Merge): We now return a `UsageVector' instead of a
5952         `MergeResult'.
5953
5954 2003-12-11  Martin Baulig  <martin@ximian.com>
5955
5956         Reworked flow analyis and made it more precise and bug-free.  The
5957         most important change is that we're now using a special `Reachability'
5958         class instead of having "magic" meanings of `FlowReturns'.  I'll
5959         do some more cleanups and optimizations and also add some more
5960         documentation this week.
5961
5962         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
5963         largely reworked this class.
5964         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
5965         the new `Reachability' class instead of having "magic" values here.
5966         (FlowBranching): We're now using an instance of `Reachability'
5967         instead of having separate `Returns', `Breaks' etc. fields.
5968
5969         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
5970         based on flow analysis; ignore the return value of block.Emit ().
5971
5972 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
5973
5974         * driver.cs typemanager.cs: Find the mono extensions to corlib even
5975         if they are private.
5976
5977 2003-12-09  Martin Baulig  <martin@ximian.com>
5978
5979         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
5980         call them directly on the UsageVector.
5981
5982 2003-12-09  Martin Baulig  <martin@ximian.com>
5983
5984         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
5985         Changed return type from `FlowReturns' to `Reachability'.
5986
5987 2003-12-09  Martin Baulig  <martin@ximian.com>
5988
5989         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
5990         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
5991         `Reachable' fields with a single `Reachability' one.
5992
5993 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
5994
5995         * class.cs (FindMembers): Remove foreach's.
5996
5997         Bootstrap times:
5998
5999         BEFORE
6000                 Run 1:   8.74 seconds
6001                 Run 2:   8.71 seconds
6002
6003         AFTER
6004                 Run 1:   8.64 seconds
6005                 Run 2:   8.58 seconds
6006
6007
6008 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
6009
6010         * cs-parser.jay:
6011         * gen-treedump.cs:
6012         * statement.cs:
6013         This patch does a few things:
6014                 1. EmptyStatement is now a singleton, so it is never reallocated.
6015                 2. All blah is EmptyStatement constructs have been changed to
6016                    blah == EmptyStatement.Value, which is much faster and valid
6017                    now that EmptyStatement is a singleton.
6018                 3. When resolving a block, rather than allocating a new array for
6019                    the non-empty statements, empty statements are replaced with
6020                    EmptyStatement.Value
6021                 4. Some recursive functions have been made non-recursive.
6022         Mainly the performance impact is from (3), however (1) and (2) are needed for
6023         this to work. (4) does not make a big difference in normal situations, however
6024         it makes the profile look saner.
6025
6026         Bootstrap times:
6027
6028         BEFORE
6029         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
6030         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
6031         Total memory allocated: 56397 KB
6032
6033         AFTER
6034         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
6035         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
6036         Total memory allocated: 55666 KB
6037
6038 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
6039
6040         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
6041         than the hashtable in a hashtable version
6042
6043         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
6044         we always end up concating a string. This results in a huge perf
6045         loss, because many strings have to be tracked by the GC. In this
6046         patch, we first use a hashtable that works with two keys, so that
6047         the strings do not need to be concat'ed.
6048
6049         Bootstrap times:
6050         BEFORE
6051                 Run 1:   8.74 seconds
6052                 Run 2:   8.71 seconds
6053
6054         AFTER
6055                 Run 1:   8.65 seconds
6056                 Run 2:   8.56 seconds
6057
6058 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
6059
6060         * Makefile: Add a new target `do-time' that does a quick and simple
6061         profile, leaving easy to parse output.
6062
6063 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
6064
6065         * codegen.cs (Init): Create the dynamic assembly with 
6066         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
6067
6068 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
6069
6070         * support.cs: Make the PtrHashtable use only one
6071         instance of its comparer.
6072
6073 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
6074
6075         * typemanager.cs: Fix lookup of GetNamespaces.
6076
6077 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
6078
6079         * expression.cs: Removed redundant line.
6080
6081         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
6082         ArrayLists, use for loops with bounds.  
6083
6084         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
6085         arraylist.
6086
6087         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
6088         arraylists, use for loop with bounds.
6089
6090         The above three changes give us a 0.071 second performance
6091         improvement out of 3.294 seconds down to 3.223.  On my machine
6092         the above changes reduced the memory usage by 1,387 KB during
6093         compiler bootstrap.
6094
6095         * cs-parser.jay (QualifiedIdentifier): New class used to represent
6096         QualifiedIdentifiers.  Before we created a new string through
6097         concatenation, and mostly later on, the result would be
6098         manipulated by DecomposeQI through string manipulation.
6099
6100         This reduced the compiler memory usage for bootstrapping from
6101         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
6102         compile times in 0.05 seconds.
6103
6104 2003-11-28  Dick Porter  <dick@ximian.com>
6105
6106         * support.cs: Do string compares with the Invariant culture.
6107
6108         * rootcontext.cs: 
6109         * gen-treedump.cs: 
6110         * expression.cs: 
6111         * driver.cs: 
6112         * decl.cs: 
6113         * codegen.cs: 
6114         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
6115         the comparison is done with the Invariant culture.
6116
6117 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
6118
6119         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
6120         GetEnumerator method.
6121
6122         (ProbeCollectionType): Iterate starting at the most specific type
6123         upwards looking for a GetEnumerator
6124
6125         * expression.cs: Shift count can be up to 31 for int/uint and 63
6126         for long/ulong.
6127
6128 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
6129
6130         * statement.cs (Block.LookupLabel): Also look for the label on the
6131         children blocks.  Use a hash table to keep track of visited
6132         nodes. 
6133
6134         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
6135         we actually did transform the other operand, otherwise fall back
6136         to the common codepath that casts to long.
6137
6138         * cs-tokenizer.cs: Use the same code pattern as the int case.
6139         Maybe I should do the parsing myself, and avoid depending on the
6140         Parse routines to get this done.
6141
6142 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
6143
6144         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
6145         which fixes bug 51347.  This time test it.
6146
6147         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
6148         attributes for example can not tell the difference between these.
6149         The difference was only a syntax feature of the language. 
6150
6151         * attribute.cs: Apply attributes to delegates.
6152
6153         * delegate.cs: Call the apply attributes method.
6154
6155 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
6156
6157         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
6158         comparing 0 vs Byte.MinValue, not the value
6159
6160         (ImplicitConversionRequired): When reporting a conversion error,
6161         use error 31 to print out the constant error instead of the
6162         simpler 29.
6163
6164         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
6165         which fixes bug 51347.
6166
6167 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
6168
6169         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
6170         which fixes the -warnaserror command line option.
6171
6172 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
6173
6174         * cfold.cs (DoNumericPromotions): During constant folding of
6175         additions on UIntConstant, special case intconstants with
6176         IntConstants like we do on the expression binary operator. 
6177
6178 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
6179
6180         * convert.cs (ImplicitReferenceConversion): We were missing a case
6181         (System.Enum are not value types or class types, so we need to
6182         classify them separatedly).
6183
6184         * driver.cs: We do not support error 2007.
6185
6186 2003-11-12 Jackson Harper <jackson@ximian.com>
6187
6188         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
6189         system directory. Also use the full file name so users can
6190         libraries names mscorlib-o-tron.dll in a non system dir.
6191
6192 2003-11-10  Martin Baulig  <martin@ximian.com>
6193
6194         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
6195         (TypeManager.InitCoreTypes): Initialize them here, but instead of
6196         calling `ResolveType()' on them, directly assign their `Type'.
6197
6198 2003-11-08  Martin Baulig  <martin@ximian.com>
6199
6200         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
6201         return value and the `out parent' parameter.
6202         (TypeContainer.DefineType): Moved the CS0644 check into
6203         GetClassBases().  Don't pass the interface types to the
6204         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
6205         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
6206
6207         * ecore.cs (TypeExpr.IsAttribute): New property.
6208         (TypeExpr.GetInterfaces): New method.
6209
6210         * interface.cs (Interface.GetInterfaceTypeByName): Return a
6211         TypeExpr instead of a Type.
6212         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
6213         (Interface.DefineType): Don't pass the interface types to the
6214         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
6215         them later and then call `TypeBulider.AddInterfaceImplementation()'.
6216
6217         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
6218         instead of a `Type[]'.
6219         (TypeManager.RegisterBuilder): Likewise.
6220         (TypeManager.AddUserInterface): Likewise.
6221         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
6222         `Type[]' and also return a `TypeExpr[]'.
6223         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
6224
6225 2003-11-08  Martin Baulig  <martin@ximian.com>
6226
6227         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
6228         Expression.     
6229
6230 2003-11-08  Martin Baulig  <martin@ximian.com>
6231
6232         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
6233         TypeManager.ResolveExpressionTypes().
6234
6235         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
6236         instead of an Expression.
6237         (TypeExpr): This is now an abstract base class for `TypeExpression'.
6238         (TypeExpression): New public class; formerly known as `TypeExpr'.
6239
6240         * expression.cs (ComposedCast): Derive from TypeExpr.
6241
6242         * typemanager.cs (TypeManager.system_*_expr): These are now
6243         TypExpr's instead of Expression's.
6244         (TypeManager.ResolveExpressionTypes): New public static function;
6245         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
6246         of them.        
6247
6248 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
6249
6250         * expression.cs (New.DoResolve): Do not dereference value that
6251         might be a null return.
6252
6253         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
6254         sure that the constant value has the right type.  Fixes an
6255         unreported bug, similar to 50425.
6256
6257         * const.cs (Const.LookupConstantValue): Call
6258         ImplicitStandardConversionExists before doing a conversion to
6259         avoid havng the TypeManager.ChangeType do conversions.
6260
6261         Reduced the number of casts used
6262
6263         (Const.ChangeType): New routine to enable reuse of the constant
6264         type changing code from statement.
6265
6266         * typemanager.cs (ChangeType): Move common initialization to
6267         static global variables.
6268
6269         Fixes #50425.
6270
6271         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
6272         every value type to go through, even if it was void.  Fix that. 
6273
6274         * cs-tokenizer.cs: Use is_identifier_start_character on the start
6275         character of the define, and the is_identifier_part_character for
6276         the rest of the string.
6277
6278 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
6279
6280         * expression.cs (UnaryMutator.EmitCode): When I updated
6281         LocalVariableReference.DoResolve, I overdid it, and dropped an
6282         optimization done on local variable references.
6283
6284 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
6285
6286         * ecore.cs: Convert the return from Ldlen into an int.
6287
6288 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
6289
6290         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
6291         the accessibility, this is a special case for toplevel non-public
6292         classes (internal for instance).
6293
6294 2003-10-20  Nick Drochak <ndrochak@gol.com>
6295
6296         * ecore.cs: Fix typo and build.  Needed another right paren.
6297
6298 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
6299
6300         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
6301         `internal' case regular and protected, but not allowing protected
6302         to be evaluated later.  Bug 49840
6303
6304 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
6305
6306         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
6307         to kb.Nlast, and not the kb.nFirst to isolate the switch
6308         statement.
6309
6310         Extract the underlying type, so enumerations of long/ulong are
6311         treated like long/ulong.
6312
6313 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
6314
6315         * expression.cs (New): Overload the meaning of RequestedType to
6316         track the possible creation of the NewDelegate type, since
6317         DoResolve is invoked more than once for new constructors on field
6318         initialization.
6319
6320         See bugs: #48800 and #37014
6321
6322         * cs-parser.jay (declare_local_constants): Take an arraylist
6323         instead of a single constant.
6324
6325         (local_constant_declaration): It should take a
6326         constant_declarators, not a constant_declarator.  Fixes 49487
6327
6328         * convert.cs: Fix error report.
6329
6330 2003-10-13 Jackson Harper <jackson@ximian.com>
6331
6332         * typemanager.cs (TypeToCoreType): Add float and double this fixes
6333         bug #49611
6334
6335 2003-10-09  Martin Baulig  <martin@ximian.com>
6336
6337         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
6338         to the .ctor.
6339         (MethodCore.DoDefineParameters): Removed the TypeContainer
6340         argument; use the DeclSpace which was passed to the .ctor instead.
6341         (MethodCore.CheckParameter): Take a DeclSpace instead of a
6342         TypeContainer; we only need a DeclSpace here.
6343
6344 2003-10-09  Martin Baulig  <martin@ximian.com>
6345
6346         * class.cs (MethodData): Added additional `DeclSpace ds' argument
6347         to the .ctor.
6348         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
6349         EmitContext's .ctor.    
6350
6351 2003-10-09  Martin Baulig  <martin@ximian.com>
6352
6353         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
6354         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
6355         AsAccessible(), moved them as well.
6356
6357         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
6358
6359 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
6360
6361         * cs-parser.jay : Renamed yyName to yyNames related to jay.
6362
6363 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
6364
6365         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
6366         generation for >=, as spotted by Paolo, bug 48679.  
6367         Patch from David Waite.
6368
6369         * cs-tokenizer.cs: Add handling for #pragma.
6370
6371         * cs-parser.jay: Allow for both yield and yield return in the
6372         syntax.  The anti-cobolization of C# fight will go on!
6373
6374         * class.cs (TypeBuilder.DefineType): Catch error condition here
6375         (Parent.DefineType erroring out and returning null).
6376
6377         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
6378         coping with enumerations variables, we were mistakenly processing
6379         them as a regular value type instead of built-in types.  Fixes the
6380         bug #48063
6381
6382         * typemanager.cs (IsBuiltinOrEnum): New method.
6383
6384 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
6385
6386         * cs-parser.jay: Upgrade: yield now needs the return clause.
6387
6388 2003-09-19  Martin Baulig  <martin@ximian.com>
6389
6390         * decl.cs (MemberCache.SetupCacheForInterface): Take a
6391         `MemberCache parent' argument.  Normally, an interface doesn't
6392         have a parent type except System.Object, but we use this in gmcs
6393         for generic type parameters.
6394
6395 2003-09-18  Martin Baulig  <martin@ximian.com>
6396
6397         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
6398         on `type.IsInterface'; don't check whether the type has a parent
6399         to determine whether it's an interface.
6400
6401 2003-09-15  Martin Baulig  <martin@ximian.com>
6402
6403         * class.cs (TypeContainer.DefineType): Added an error flag to
6404         avoid reporting duplicate CS0146's ("class definition is
6405         circular.").
6406
6407         * driver.cs (Driver.MainDriver): Abort if
6408         RootContext.ResolveTree() reported any errors.
6409
6410 2003-09-07  Martin Baulig  <martin@ximian.com>
6411
6412         * report.cs (Error, Warning): Added overloaded versions which take
6413         a `params object[] args' and call String.Format().
6414
6415 2003-09-07  Martin Baulig  <martin@ximian.com>
6416
6417         * decl.cs (DeclSpace..ctor): Don't call
6418         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
6419         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
6420         (DeclSpace.RecordDecl): New method.
6421
6422         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
6423
6424 2003-09-02  Ravi Pratap  <ravi@ximian.com>
6425
6426         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
6427         value attributes to be applied to ParameterBuilders.
6428
6429         * class.cs (MethodCore.LabelParameters): Make static and more
6430         generic so that it can be used from other places - like interface
6431         methods, for instance.
6432
6433         * interface.cs (Interface.Emit): Call LabelParameters before
6434         emitting attributes on the InterfaceMethod.
6435
6436 2003-08-26  Martin Baulig  <martin@ximian.com>
6437
6438         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
6439         resolving aliases; fixes #47927.
6440
6441 2003-08-26  Martin Baulig  <martin@ximian.com>
6442
6443         * statement.cs (Using.DoResolve): This is internally emitting a
6444         try/finally clause, so we need to set ec.NeedExplicitReturn if we
6445         do not always return.  Fixes #47681.
6446
6447 2003-08-26  Martin Baulig  <martin@ximian.com>
6448
6449         * decl.cs (MemberCore): Moved WarningNotHiding(),
6450         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
6451         into MemberBase.
6452         (AdditionResult): Make this nested in DeclSpace.
6453         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
6454         argument; call NamespaceEntry.Define() unless we're nested in a
6455         class or struct.
6456
6457         * namespace.cs (Namespace.DefineName): New public function.  This
6458         is called from DeclSpace's .ctor to add 
6459         (Namespace.Lookup): Include DeclSpaces in the lookup.
6460
6461         * class.cs (Operator): Derive from MemberBase, not MemberCore.
6462
6463         * const.cs (Const): Derive from MemberBase, not MemberCore.     
6464
6465 2003-08-25  Martin Baulig  <martin@ximian.com>
6466
6467         * convert.cs (Convert.ExplicitReferenceConversion): When
6468         converting from an interface type to a class, unbox if the target
6469         type is a struct type.  Fixes #47822.
6470
6471 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
6472
6473         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
6474         #47854.
6475
6476 2003-08-22  Martin Baulig  <martin@ximian.com>
6477
6478         * class.cs (TypeManager.DefineType): When defining a nested type,
6479         call DefineType() on our parent; fixes #47801.
6480
6481 2003-08-22  Martin Baulig  <martin@ximian.com>
6482
6483         * class.cs (MethodData.Define): While checking if a method is an
6484         interface implementation, improve the test a bit more to fix #47654.
6485
6486 2003-08-22  Martin Baulig  <martin@ximian.com>
6487
6488         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
6489         correctly; fixes #47722.
6490
6491 2003-08-22  Martin Baulig  <martin@ximian.com>
6492
6493         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
6494         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
6495
6496         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
6497
6498 2003-08-22  Martin Baulig  <martin@ximian.com>
6499
6500         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
6501         can only be assigned in static constructors.  Fixes #47161.
6502
6503 2003-08-22  Martin Baulig  <martin@ximian.com>
6504
6505         Rewrote and improved the flow analysis code.
6506
6507         * flowbranching.cs (FlowBranching): Make this class abstract.
6508         (FlowBranching.CreateBranching): New static function to create a
6509         new flow branching.
6510         (FlowBranchingBlock, FlowBranchingException): New classes.
6511         (FlowBranching.UsageVector.Type): New public readonly field.
6512         (FlowBranching.UsageVector.Breaks): Removed the setter.
6513         (FlowBranching.UsageVector.Returns): Removed the setter.
6514         (FlowBranching.UsageVector): Added Break(), Return(),
6515         NeverReachable() and Throw() methods to modify the reachability.
6516         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
6517         done by FlowBranching.Merge().
6518         (FlowBranching.UsageVector.MergeChild): New method; merges the
6519         merge result into the current vector.
6520         (FlowBranching.Merge): New abstract method to merge a branching.
6521
6522 2003-08-12  Martin Baulig  <martin@ximian.com>
6523
6524         * expression.cs (Indirection.CacheTemporaries): Create the
6525         LocalTemporary with the pointer type, not its element type.
6526
6527 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
6528
6529         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
6530         token was a keyword or not.
6531
6532         Add `error' options where an IDENTIFIER was expected;  Provide
6533         CheckToken and CheckIdentifierToken convenience error reporting
6534         functions. 
6535
6536         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
6537
6538         * decl.cs: Rename `NamespaceEntry Namespace' public field into
6539         NameSpaceEntry NameSpaceEntry.
6540
6541         (LookupInterfaceOrClass): Avoid creating a full qualified name
6542         from namespace and name: avoid doing lookups when we know the
6543         namespace is non-existant.   Use new Tree.LookupByNamespace which
6544         looks up DeclSpaces based on their namespace, name pair.
6545
6546         * driver.cs: Provide a new `parser verbose' to display the
6547         exception thrown during parsing.  This is turned off by default
6548         now, so the output of a failure from mcs is more graceful.
6549
6550         * namespace.cs: Track all the namespaces defined in a hashtable
6551         for quick lookup.
6552
6553         (IsNamespace): New method
6554
6555 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
6556
6557         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
6558         we know that we need to concatenate (full typename can never be
6559         null). 
6560
6561         * class.cs: ditto.
6562
6563         * statement.cs: Use a bitfield;  Do not initialize to null things
6564         which are done by the constructor by default.
6565
6566         * cs-parser.jay: bug fix, parameter was 4, not 3.
6567
6568         * expression.cs: Just use the property;
6569
6570         * statement.cs: No need for GetVariableInfo method.
6571
6572 2003-08-08  Martin Baulig  <martin@ximian.com>
6573
6574         * flowanalysis.cs (FlowReturns): This is now nested in the
6575         `FlowBranching' class.
6576         (MyBitVector): Moved this here from statement.cs.
6577         (FlowBranching.SiblingType): New enum type.
6578         (FlowBranching.CreateSibling): Added `SiblingType' argument.
6579
6580 2003-08-07  Martin Baulig  <martin@ximian.com>
6581
6582         * flowanalysis.cs (FlowBranchingType): This is now nested in the
6583         `FlowBranching' class and called `BranchingType'.
6584
6585 2003-08-07  Martin Baulig  <martin@ximian.com>
6586
6587         * flowanalysis.cs: Moved all the control flow analysis code into
6588         its own file.
6589
6590 2003-08-07  Martin Baulig  <martin@ximian.com>
6591
6592         * assign.cs (Assign.DoResolve): `target' must either be an
6593         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
6594         #37319.
6595
6596 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
6597
6598         * expression.cs (BinaryMethod): This kind of expression is created by the
6599         Binary class if it determines that the operator has to be handled
6600         by a method.
6601
6602         (BinaryDelegate): This kind of expression is created if we are
6603         dealing with a + or - operator on delegates.
6604
6605         (Binary): remove method, argumetns, and DelegateOperator: when
6606         dealing with methods, 
6607
6608         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
6609
6610         * statement.cs (Block): use bitfields for the three extra booleans
6611         we had in use.   Remove unused topblock parameter.
6612
6613         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
6614
6615         * assign.cs: Drop extra unneeded tests.
6616
6617 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
6618
6619         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
6620
6621         * statement.cs (Foreach): Use VariableStorage instead of
6622         LocalBuilders.   
6623
6624         * codegen.cs (VariableStorage): New class used by clients that
6625         require a variable stored: locals or fields for variables that
6626         need to live across yield.
6627
6628         Maybe provide a convenience api for EmitThis+EmitLoad?
6629
6630         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
6631         these bad boys.
6632
6633 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
6634
6635         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
6636         RemapParameterLValue): New methods that are used to turn a
6637         precomputed FieldInfo into an expression like this:
6638
6639                 instance.FieldInfo
6640
6641         The idea is to use this instead of making LocalVariableReference
6642         have more than one meaning.
6643
6644         * cs-parser.jay: Add error production to BASE.
6645
6646         * ecore.cs: Deal with TypeManager.GetField returning null, which
6647         is now a valid return value.
6648
6649         (FieldExprNoAddress): New expression for Fields whose address can
6650         not be taken.
6651
6652         * expression.cs (LocalVariableReference): During the resolve
6653         phases, create new expressions if we are in a remapping context.
6654         Remove code that dealt with remapping here.
6655
6656         (ParameterReference): same.
6657
6658         (ProxyInstance): New expression, like the `This' expression, but
6659         it is born fully resolved.  We know what we are doing, so remove
6660         the errors that are targeted to user-provided uses of `this'.
6661
6662         * statement.cs (Foreach): our variable is now stored as an
6663         Expression;  During resolution, follow the protocol, dont just
6664         assume it will return this.
6665
6666 2003-08-06  Martin Baulig  <martin@ximian.com>
6667
6668         * support.cs (SeekableStreamReader.cs): New public class.
6669
6670         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
6671         SeekableStreamReader instead of the normal StreamReader.
6672
6673 2003-08-04  Martin Baulig  <martin@ximian.com>
6674
6675         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
6676         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
6677         deambiguate casts and delegate invocations.
6678         (parenthesized_expression): Use the new tokens to ensure this is
6679         not a cast of method invocation.
6680
6681         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
6682         when reading a `)' and Deambiguate_CloseParens () was previously
6683         called.
6684
6685         * expression.cs (ParenthesizedExpression): New class.  This is
6686         just used for the CS0075 test.
6687         (Binary.DoResolve): Check for CS0075.   
6688
6689 2003-07-29  Ravi Pratap  <ravi@ximian.com>
6690
6691         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
6692         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
6693         reference comparison.
6694
6695         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
6696         examine the ReturnType for equality - this is necessary in the
6697         cases of implicit and explicit operators whose signature also
6698         includes the return type.
6699
6700 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
6701
6702         * namespace.cs: Cache the result of the namespace computation,
6703         instead of computing it every time.
6704
6705 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
6706
6707         * decl.cs: Use a global arraylist that we reuse over invocations
6708         to avoid excesive memory consumption.  Reduces memory usage on an
6709         mcs compile by one meg (45 average).
6710
6711         * typemanager.cs (LookupTypeReflection): In .NET pointers are
6712         private, work around that.
6713
6714 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
6715
6716         * literal.cs (IntLiteral): Define Zero and One static literals. 
6717
6718         * cs-parser.jay (integer_literal): use static literals to reduce
6719         memory usage for the most used literals (0, 1 and -1).  211kb
6720         reduced in memory usage.
6721
6722         Replace all calls to `new ArrayList' with `new
6723         ArrayList(4)' which is a good average number for most allocations,
6724         and also requires only 16 bytes of memory for its buffer by
6725         default. 
6726
6727         This reduced MCS memory usage in seven megabytes for the RSS after
6728         bootstrapping.
6729
6730 2003-07-28  Ravi Pratap  <ravi@ximian.com>
6731
6732         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
6733         handle params methods the correct way by forming only one
6734         applicable set with params and normal methods in them. Earlier we
6735         were looking at params methods only if we found no normal methods
6736         which was not the correct thing to do.
6737
6738         (Invocation.BetterFunction): Take separate arguments indicating
6739         when candidate and the best method are params methods in their
6740         expanded form.
6741
6742         This fixes bugs #43367 and #46199.
6743
6744         * attribute.cs: Documentation updates.
6745
6746         (CheckAttribute): Rename to CheckAttributeTarget.
6747         (GetValidPlaces): Rename to GetValidTargets.
6748
6749         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
6750         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
6751
6752         Fixes bug #44468.
6753
6754 2003-07-28  Martin Baulig  <martin@ximian.com>
6755
6756         * class.cs (TypeContainer.DefineMembers): Use the base type's full
6757         name when looking up the base class of a nested class.  Fixes #46977.
6758
6759 2003-07-26  Martin Baulig  <martin@ximian.com>
6760
6761         * expression.cs (Indexers.Indexer): New nested struct; contains
6762         getter, setter and the indexer's type.
6763         (Indexers.Properties): This is now an ArrayList of
6764         Indexers.Indexer's.
6765         (IndexerAccess.DoResolveLValue): Correctly set the type if the
6766         indexer doesn't have any getters.
6767
6768         * assign.cs (Assign.DoResolve): Also do the implicit conversions
6769         for embedded property and indexer assignments.
6770
6771 2003-07-26  Martin Baulig  <martin@ximian.com>
6772
6773         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
6774         preprocessor directive is not the first non-whitespace character
6775         on a line.
6776
6777 2003-07-26  Martin Baulig  <martin@ximian.com>
6778
6779         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
6780         namespace parsing, follow the spec more closely.
6781
6782         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
6783         NamespaceEntry.Lookup().
6784
6785 2003-07-25  Martin Baulig  <martin@ximian.com>
6786
6787         * MethodCore.cs (OverridesSomething): New public field; it's set
6788         from TypeContainer.DefineMembers if this method overrides
6789         something (which doesn't need to be a method).  Fix #39462.
6790
6791 2003-07-25  Ravi Pratap  <ravi@ximian.com>
6792
6793         * typemanager.cs (GetMembers): Ensure that the list of members is
6794         reversed. This keeps things in sync.
6795
6796         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
6797         find an AttributeUsage attribute.
6798
6799         * expression.cs (Invocation.OverloadResolve): Perform the check
6800         which disallows Invoke to be directly called on a Delegate.
6801
6802         (Error_InvokeOnDelegate): Report error cs1533.
6803
6804 2003-07-25  Martin Baulig  <martin@ximian.com>
6805
6806         * expression.cs (Indexers.GetIndexersForType): Only look in the
6807         interface hierarchy if the requested type is already an
6808         interface.  Fixes #46788 while keeping #46502 fixed.
6809
6810 2003-07-25  Martin Baulig  <martin@ximian.com>
6811
6812         * class.cs (TypeContainer.DefineMembers): Check whether all
6813         readonly fields have been assigned and report warning CS0649 if
6814         not.
6815
6816         * statement.cs (LocalInfo.IsFixed): Always return true if this is
6817         a valuetype.
6818
6819 2003-07-24  Ravi Pratap  <ravi@ximian.com>
6820
6821         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
6822         returned from GetMethods to make things consistent with the
6823         assumptions MCS makes about ordering of methods.
6824
6825         This should comprehensively fix bug #45127 and it does :-)
6826
6827         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
6828         ordering is actually reverse.
6829
6830         * Clean up some debug messages I left lying around.
6831
6832         * interface.cs (Populate*): Get rid of code which emits attributes
6833         since the stage in which we emit attributes is the 'Emit' stage,
6834         not the define stage.
6835
6836         (Emit): Move attribute emission for interface members here.
6837
6838 2003-07-22  Ravi Pratap  <ravi@ximian.com>
6839
6840         * expression.cs (Invocation.OverloadResolve): Follow the spec more
6841         closely: we eliminate methods in base types when we have an
6842         applicable method in a top-level type.
6843
6844         Please see section 14.5.5.1 for an exact description of what goes
6845         on. 
6846
6847         This fixes bug #45127 and a host of other related to corlib compilation.
6848
6849         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
6850         array is the method corresponding to the top-level type (this is
6851         because of the changes made to icall.c) so we change this
6852         accordingly.
6853
6854         (MethodGroupExpr.Name): This too.
6855
6856         * typemanager.cs (GetElementType): New method which does the right
6857         thing when compiling corlib. 
6858
6859         * everywhere: Make use of the above in the relevant places.
6860
6861 2003-07-22  Martin Baulig  <martin@ximian.com>
6862
6863         * cs-parser.jay (invocation_expression): Moved
6864         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
6865         `cast_expression', but create a InvocationOrCast which later
6866         resolves to either an Invocation or a Cast.
6867
6868         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
6869         method; call this before EmitStatement() to make sure that this
6870         expression can be used as a statement.
6871
6872         * expression.cs (InvocationOrCast): New class; resolves to either
6873         an Invocation or a Cast.
6874
6875         * statement.cs (StatementExpression): Call ResolveStatement() on
6876         the ExpressionStatement before emitting it.
6877
6878 2003-07-21  Martin Baulig  <martin@ximian.com>
6879
6880         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
6881         `ref' and `out' attributes match; fixes #46220.
6882         (MemberAccess.ResolveMemberAccess): You can't reference a type
6883         through an expression; fixes #33180.
6884         (Indexers.GetIndexersForType): Don't return the indexers from
6885         interfaces the class implements; fixes #46502.
6886
6887 2003-07-21  Martin Baulig  <martin@ximian.com>
6888
6889         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
6890         CS0661 checks; fixes bug #30442.
6891
6892 2003-07-21  Martin Baulig  <martin@ximian.com>
6893
6894         * decl.cs (AdditionResult): Added `Error'.
6895
6896         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
6897
6898         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
6899         makes cs0031.cs actually work.
6900
6901 2003-07-20  Martin Baulig  <martin@ximian.com>
6902
6903         * namespace.cs: Fixed that bug which caused a crash when compiling
6904         the debugger's GUI.
6905
6906 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
6907
6908         * typemanager.cs (LookupTypeReflection): Never expose types which
6909         are NotPublic, NestedPrivate, NestedAssembly, or
6910         NestedFamANDAssem.  We used to return these, and later do a check
6911         that would report a meaningful error, but the problem is that we
6912         would not get the real match, if there was a name override.
6913
6914 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
6915
6916         * namespace.cs (Namespace, Name): Do not compute the namespace
6917         name dynamically, compute it in the constructor.  This reduced
6918         memory usage by 1697 KB.
6919
6920         * driver.cs: Use --pause to pause at the end.
6921
6922 2003-07-17  Peter Williams  <peter@newton.cx>
6923
6924         * Makefile: Change the name of the test target so that it doesn't
6925         conflict with the recursive test target.
6926
6927 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
6928
6929         * expression.cs (LocalVariableReference.Emit, EmitAssign,
6930         AddressOf): Do not use EmitThis, that was wrong, use the actual
6931         this pointer.
6932
6933 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
6934
6935         * class.cs (MethodData.Define): While checking if a method is an
6936         interface implementation, improve the test: If we are not public
6937         (use new test here: use the computed MethodAttributes directly,
6938         instead of the parsed modifier flags) check if the `implementing'
6939         method comes from an interface or not.
6940
6941         * pending.cs (VerifyPendingMethods): Slightly better error
6942         message.
6943
6944         * makefile: add test target that does the mcs bootstrap.
6945
6946 2003-07-16  Ravi Pratap  <ravi@ximian.com>
6947
6948         * interface.cs (Define): Do nothing here since there are no
6949         members to populate etc. Move the attribute emission out of here
6950         since this was just totally the wrong place to put it. Attribute
6951         application happens during the 'Emit' phase, not in the 'Define'
6952         phase.
6953
6954         (Emit): Add this method and move the attribute emission here
6955
6956         * rootcontext.cs (EmitCode): Call the Emit method on interface
6957         types too.
6958
6959 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
6960
6961         * expression.cs (OverloadResolve): Report error only if Location
6962         is not 'Null' which means that there was a probe going on.
6963
6964 2003-07-14  Martin Baulig  <martin@ximian.com>
6965
6966         * expression.cs (ConditionalLogicalOperator): New public class to
6967         implement user defined conditional logical operators.
6968         This is section 14.11.2 in the spec and bug #40505.
6969
6970 2003-07-14  Martin Baulig  <martin@ximian.com>
6971
6972         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
6973
6974 2003-07-14  Martin Baulig  <martin@ximian.com>
6975
6976         * codegen.cs (EmitContext.InFixedInitializer): New public field.
6977
6978         * ecore.cs (IVariable.VerifyFixed): New interface method.
6979
6980         * expression.cs (Unary.ResolveOperator): When resolving the `&'
6981         operator, check whether the variable is actually fixed.  Fixes bug
6982         #36055.  Set a variable definitely assigned when taking its
6983         address as required by the spec.
6984
6985         * statement.cs (LocalInfo.IsFixed): New field.
6986         (LocalInfo.MakePinned): Set `IsFixed' to true.
6987
6988 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
6989
6990         * attribute.cs (Attribute.Resolve): While doing a Member lookup
6991         for .ctors, ensure that we only ask for members declared in the
6992         attribute type (BindingFlags.DeclaredOnly).
6993
6994         Fixes bug #43632.
6995
6996         * expression.cs (Error_WrongNumArguments): Report error 1501
6997         correctly the way CSC does.
6998
6999 2003-07-13  Martin Baulig  <martin@ximian.com>
7000
7001         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
7002         lookup on the fully qualified name, to make things like "X.X" work
7003         where "X.X" is a fully qualified type name, but we also have a
7004         namespace "X" in the using list.  Fixes #41975.
7005
7006 2003-07-13  Martin Baulig  <martin@ximian.com>
7007
7008         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
7009         function. If we're a CompoundAssign, we need to create an embedded
7010         CompoundAssign, not an embedded Assign.
7011         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
7012         Fixes #45854.
7013
7014 2003-07-13  Martin Baulig  <martin@ximian.com>
7015
7016         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
7017         work to fix bug #46088.
7018
7019 2003-07-13  Ravi Pratap <ravi@ximian.com>
7020
7021         * class.cs (Operator.Emit): Do not emit attributes here - it is
7022         taken care of by the Method class that we delegate too. This takes
7023         care of bug #45876.
7024
7025 2003-07-10  Martin Baulig  <martin@ximian.com>
7026
7027         * expression.cs (TypeOfVoid): New class.
7028         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
7029
7030 2003-07-10  Martin Baulig  <martin@ximian.com>
7031
7032         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
7033         bug #35957.
7034
7035 2003-07-10  Martin Baulig  <martin@ximian.com>
7036
7037         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
7038         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
7039
7040         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
7041
7042         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
7043
7044 2003-07-10  Martin Baulig  <martin@ximian.com>
7045
7046         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
7047         of decimal.  Fixes #42850.
7048
7049         NOTE: I also fixed the created byte blob, but this doesn't work on
7050         the MS runtime and csc never produces any byte blobs for decimal
7051         arrays.
7052
7053 2003-07-10  Martin Baulig  <martin@ximian.com>
7054
7055         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
7056         structs; fixes #32068.
7057         (Block.AddChildVariableNames): Fixed #44302.
7058
7059 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7060
7061         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
7062
7063 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
7064
7065         * attribute.cs: And this test is onger needed.
7066
7067 2003-07-08  Martin Baulig  <martin@ximian.com>
7068
7069         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
7070         inaccessible types.  Fixes #36313.
7071
7072         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
7073
7074         * namespace.cs (NamespaceEntry): Create implicit entries for all
7075         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
7076         implicit entries for N1.N2 and N1.
7077
7078 2003-07-08  Martin Baulig  <martin@ximian.com>
7079
7080         Rewrote the handling of namespaces to fix a lot of the issues
7081         wrt. `using' aliases etc.
7082
7083         * namespace.cs (Namespace): Splitted this class into a
7084         per-assembly `Namespace' and a per-file `NamespaceEntry'.
7085
7086         * typemanager.cs (TypeManager.IsNamespace): Removed.
7087         (TypeManager.ComputeNamespaces): Only compute namespaces from
7088         loaded assemblies here, not the namespaces from the assembly we're
7089         currently compiling.
7090
7091 2003-07-08  Martin Baulig  <martin@ximian.com>
7092
7093         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
7094
7095 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
7096
7097         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
7098         already fixed it.  
7099
7100         I thought about the memory savings here, but LookupTypeReflection
7101         is used under already very constrained scenarios.  Compiling
7102         corlib or mcs only exposes one hit, so it would not really reduce
7103         any memory consumption.
7104
7105 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7106
7107         * typemanager.cs: fixes bug #45889 by only adding public types from
7108         other assemblies to the list of known types.
7109
7110 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
7111
7112         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
7113         on the type we resolved.
7114
7115 2003-07-05  Martin Baulig  <martin@ximian.com>
7116
7117         * pending.cs (PendingImplementation.ParentImplements): Don't
7118         create the proxy if the parent is abstract.
7119
7120         * class.cs (TypeContainer.DefineIndexers): Process explicit
7121         interface implementations first.  Fixes #37714.
7122
7123 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
7124
7125         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
7126         defined recursively;  but since we modify the input parameters
7127         (left is set to `this' temporarily), we reset this value if the
7128         left_is_explicit is false, which gives the original semantics to
7129         the code.  
7130
7131         * literal.cs (NullPointer): new class used to represent a null
7132         literal in a pointer context.
7133
7134         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
7135         type is a pointer, use a NullPointer object instead of a
7136         NullLiteral.   Closes 43687
7137
7138         (ExplicitConversion): Convert pointer values using
7139         the conv opcode to the proper type.
7140
7141         * ecore.cs (New): change ValueTypeVariable property into a method,
7142         that returns whether the valuetype is suitable for being used.
7143
7144         * expression.cs (Binary.DoNumericPromotions): Only return if we
7145         the int constant was a valid uint, and we can return both left and
7146         right as uints.  If not, we continue processing, to trigger the
7147         type conversion.  This fixes 39018.
7148
7149         * statement.cs (Block.EmitMeta): During constant resolution, set
7150         the CurrentBlock property on the emitcontext, so that we resolve
7151         constants propertly.
7152
7153 2003-07-02  Martin Baulig  <martin@ximian.com>
7154
7155         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
7156         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
7157
7158         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
7159         than emitting it here.
7160
7161         * statement.cs: Fixed some more flow analysis bugs.
7162
7163 2003-07-02  Martin Baulig  <martin@ximian.com>
7164
7165         * class.cs (MethodData.Define): When implementing interface
7166         methods, set Final unless we're Virtual.
7167
7168         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
7169         check work for interface methods.
7170
7171 2003-07-01  Martin Baulig  <martin@ximian.com>
7172
7173         * ecore.cs (EmitContext.This): Replaced this property with a
7174         GetThis() method which takes a Location argument.  This ensures
7175         that we get the correct error location for a CS0188.
7176
7177 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
7178
7179         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
7180         ImplicitStandardConversion.
7181
7182         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
7183
7184 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
7185
7186         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
7187         optimization.
7188
7189 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
7190
7191         * class.cs (Constructor.Define): Turn off initlocals for unsafe
7192         constructors.
7193
7194         (MethodData.Define): Turn off initlocals for unsafe methods.
7195
7196 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
7197
7198         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
7199         complete;  Fixes #37521.
7200
7201         * delegate.cs: Use Modifiers.TypeAttr to compute the
7202         TypeAttributes, instead of rolling our own.  This makes the flags
7203         correct for the delegates.
7204
7205 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
7206
7207         * class.cs (Constructor.Define): Set the private flag for static
7208         constructors as well.
7209
7210         * cs-parser.jay (statement_expression): Set the return value to
7211         null, to avoid a crash when we catch an error.
7212
7213 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
7214
7215         * cs-parser.jay: Applied patch from Jackson that adds support for
7216         extern and unsafe modifiers to destructor declarations.
7217
7218         * expression.cs: Report error 21 if the user is trying to index a
7219         System.Array.
7220
7221         * driver.cs: Add an error message, suggested by the bug report.
7222
7223         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
7224         if we do not have a ": this ()" constructor initializer.  Fixes 45149
7225
7226 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
7227
7228         * namespace.cs: Add some information to reduce FAQs.
7229
7230 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
7231
7232         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
7233         underlying enumeration types.  Fixes #43915.
7234
7235         * expression.cs: Treat ushort/short as legal values to be used in
7236         bitwise operations.
7237
7238 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
7239
7240         * delegate.cs: transfer custom attributes for paramenters from
7241         the delegate declaration to Invoke and BeginInvoke.
7242
7243 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
7244
7245         * attribute.cs: handle custom marshalers and emit marshal info
7246         for fields, too.
7247
7248 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
7249
7250         * makefile.gnu: Added anonymous.cs to the compiler sources.
7251
7252 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
7253
7254         * iterators.cs: Change the name of the proxy class to include two
7255         underscores.
7256
7257         * cs-parser.jay: Update grammar to include anonymous methods.
7258
7259         * anonymous.cs: new file.
7260
7261 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
7262
7263         * class.cs (Field.Define): Add missing test for pointers and
7264         safety. 
7265
7266 2003-05-27  Ravi Pratap  <ravi@ximian.com>
7267
7268         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
7269         we use the stobj opcode.
7270
7271         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
7272         since it wasn't the correct fix. 
7273
7274         It still is puzzling that we are required to use stobj for IntPtr
7275         which seems to be a ValueType.
7276
7277 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
7278
7279         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
7280         during regular simple name resolution.   Now, the trick is that
7281         instead of returning for processing the simplename, we do a
7282         TypeManager.LookupType (ie, a rooted lookup as opposed to a
7283         contextual lookup type).   If a match is found, return that, if
7284         not, return for further composition.
7285
7286         This fixes long-standing 30485.
7287
7288         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
7289         using the address to initialize an object, do an Stobj instead of
7290         using the regular Stelem.
7291
7292         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
7293         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
7294         Because if we are a BaseIndexerAccess that value will be true.
7295         Fixes 43643.
7296
7297         * statement.cs (GotoCase.Resolve): Return after reporting an
7298         error, do not attempt to continue. 
7299
7300         * expression.cs (PointerArithmetic.Emit): If our operand is a
7301         long, convert our constants to match the operand before
7302         multiplying.  Convert to I type before adding.   Fixes 43670.
7303
7304 2003-05-14  Ravi Pratap  <ravi@ximian.com>
7305
7306         * enum.cs (ImplicitConversionExists) : Rename to
7307         ImplicitEnumConversionExists to remove ambiguity. 
7308
7309         * ecore.cs (NullCast): New type of cast expression class which
7310         basically is very similar to EmptyCast with the difference being
7311         it still is a constant since it is used only to cast a null to
7312         something else
7313         (eg. (string) null)
7314
7315         * convert.cs (ImplicitReferenceConversion): When casting a null
7316         literal, we return a NullCast.
7317
7318         * literal.cs (NullLiteralTyped): Remove - I don't see why this
7319         should be around anymore.
7320
7321         The renaming (reported was slightly wrong). Corrections:
7322
7323         ConvertImplicitStandard -> ImplicitConversionStandard
7324         ConvertExplicitStandard -> ExplicitConversionStandard
7325
7326         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
7327         before passing them in !
7328
7329         * convert.cs (ImplicitConversionStandard): When comparing for
7330         equal expr and target types, ensure that expr is not a
7331         NullLiteral.
7332
7333         In general, we must not be checking (expr_type ==
7334         target_type) in the top level conversion methods
7335         (ImplicitConversion, ExplicitConversion etc). This checking is
7336         done in the methods that they delegate to.
7337
7338 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
7339
7340         * convert.cs: Move Error_CannotConvertType,
7341         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
7342         ImplicitNumericConversion, ImplicitConversionExists,
7343         ImplicitUserConversionExists, StandardConversionExists,
7344         FindMostEncompassedType, FindMostSpecificSource,
7345         FindMostSpecificTarget, ImplicitUserConversion,
7346         ExplicitUserConversion, GetConversionOperators,
7347         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
7348         TryImplicitIntConversion, Error_CannotConvertImplicit,
7349         ConvertImplicitRequired, ConvertNumericExplicit,
7350         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
7351         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
7352         its own file.
7353
7354         Perform the following renames:
7355
7356         StandardConversionExists -> ImplicitStandardConversionExists
7357         ConvertImplicit -> ImplicitConversion
7358         ConvertImplicitStandard -> ImplicitStandardConversion
7359         TryImplicitIntConversion -> ImplicitIntConversion
7360         ConvertImplicitRequired -> ImplicitConversionRequired
7361         ConvertNumericExplicit -> ExplicitNumericConversion
7362         ConvertReferenceExplicit -> ExplicitReferenceConversion
7363         ConvertExplicit -> ExplicitConversion
7364         ConvertExplicitStandard -> ExplicitStandardConversion
7365
7366 2003-05-19  Martin Baulig  <martin@ximian.com>
7367
7368         * statement.cs (TypeInfo.StructInfo): Made this type protected.
7369         (TypeInfo): Added support for structs having structs as fields.
7370
7371         * ecore.cs (FieldExpr): Implement IVariable.
7372         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
7373         VariableInfo for the field.
7374
7375 2003-05-18  Martin Baulig  <martin@ximian.com>
7376
7377         * expression.cs (This.DoResolve): Report a CS0027 if we're
7378         emitting a field initializer.
7379
7380 2003-05-18  Martin Baulig  <martin@ximian.com>
7381
7382         * expression.cs (This.ResolveBase): New public function.
7383         (This.DoResolve): Check for CS0188.
7384
7385         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
7386         This.Resolve().
7387
7388         * ecore.cs (MethodGroupExpr.DoResolve): Set the
7389         `instance_expression' to null if we don't have any non-static
7390         methods.
7391
7392 2003-05-18  Martin Baulig  <martin@ximian.com>
7393
7394         Reworked the way how local variables and parameters are handled by
7395         the flow analysis code.
7396
7397         * statement.cs (TypeInfo, VariableMap): New public classes.
7398         (VariableInfo): New public class.  This is now responsible for
7399         checking whether a variable has been assigned.  It is used for
7400         parameters and local variables.
7401         (Block.EmitMeta): Take the InternalParameters as argument; compute
7402         the layout of the flow vectors here.
7403         (Block.LocalMap, Block.ParameterMap): New public properties.
7404         (FlowBranching): The .ctor doesn't get the InternalParameters
7405         anymore since Block.EmitMeta() now computes the layout of the flow
7406         vector.
7407         (MyStructInfo): This class is now known as `StructInfo' and nested
7408         in `TypeInfo'; we don't access this directly anymore.
7409
7410         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
7411         property and removed IsAssigned(), IsFieldAssigned(),
7412         SetAssigned() and SetFieldAssigned(); we now call them on the
7413         VariableInfo so we don't need to duplicate this code everywhere.
7414
7415         * expression.cs (ParameterReference): Added `Block block' argument
7416         to the .ctor.
7417         (LocalVariableReference, ParameterReference, This): The new
7418         VariableInfo class is now responsible for all the definite
7419         assignment stuff.
7420
7421         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
7422         IsParameterAssigned, SetParameterAssigned): Removed.
7423
7424 2003-05-18  Martin Baulig  <martin@ximian.com>
7425
7426         * typemanager.cs (InitCoreTypes): Try calling
7427         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
7428         the 3-args-version.  Corlib now also needs our `void_type'.
7429         (GetMethod): Added overloaded version which takes an optional
7430         `bool report_errors' to allow lookups of optional methods.
7431
7432 2003-05-12  Martin Baulig  <martin@ximian.com>
7433
7434         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
7435         only used for locals and not for parameters.
7436
7437 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
7438
7439         * support.cs (InternalParameters.ParameterType): Return the
7440         ExternalType of the parameter.
7441
7442         * parameter.cs (Parameter.ExternalType): drop the two arguments,
7443         they were unused.
7444
7445 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
7446
7447         * class.cs (MethodData.Define): Do not set the `newslot' on
7448         interface members, if they are also flagged as "override".
7449
7450         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
7451         better code for ++i and i++.  This only works for static fields
7452         and local variables.
7453
7454         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
7455         want to pull the DeclSpace out of the builder_to_declspace instead
7456         of the TypeBuilder (like in TypeContainer.FindMembers).
7457
7458         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
7459         instead of LookupTypeContainer.  Fixes the crash on .NET for
7460         looking up interface members.
7461
7462         * const.cs: Create our own emit context during the Definition
7463         stage, so that constants are evaluated in the proper context, when
7464         a recursive definition happens.
7465
7466 2003-05-11  Martin Baulig  <martin@ximian.com>
7467
7468         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
7469         new block for a switch section.
7470         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
7471         the adding/lookup in the switch block.  Fixes #39828.
7472
7473 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
7474
7475         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
7476         functionality: I needed to convert the data after I had performed
7477         the add/sub operation into the operands type size.
7478
7479         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
7480         pass the type for the box operation, otherwise the resulting
7481         object would have been of type object.
7482
7483         (BoxedCast): Add constructor to specify the type to box as.
7484
7485 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
7486
7487         * iterators.cs: I was reusing the `count' variable inadvertently,
7488         take steps to not allow this to happen.
7489
7490 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
7491
7492         * attribute.cs (Attribute.Resolve): Params attributes are encoded
7493         by creating an array at the point where the params starts and
7494         putting all those arguments there, then adjusting the size of the
7495         array.
7496
7497 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
7498
7499         * expression.cs (New.AddressOf): Implement interface
7500         IMemoryLocation.  This is used when the `new' operator is used in
7501         the context of an invocation to a method on a value type.
7502
7503         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
7504         example. 
7505
7506         * namespace.cs: Also check the using aliases here.
7507
7508         * driver.cs: Move the test for using validity after the types have
7509         been entered, so we do a single pass that also includes the using
7510         aliases. 
7511
7512         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
7513         in the regular case.   CreateSiblingForFinally is doing extra
7514         error checking.
7515
7516         * attribute.cs (GetAttributeArgumentExpression): Store the result
7517         on an out value, and use the return value to indicate failure
7518         instead of using null (which is a valid return for Constant.GetValue).
7519
7520         * statement.cs: Perform the analysis flow for the increment
7521         portion after the statement, because this will be the real flow of
7522         execution.  Fixes #42385
7523
7524         * codegen.cs (EmitContext.EmitArgument,
7525         EmitContext.EmitStoreArgument): New helper functions when the
7526         RemapToProxy flag is set.
7527
7528         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
7529         function.
7530
7531         Add support for remapping parameters. 
7532
7533         * iterators.cs: Propagate parameter values;  Store parameter
7534         values in the proxy classes.
7535
7536 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
7537
7538         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
7539         need a proxy reference;  I do not know what I was thinking
7540
7541         * cs-parser.jay (constructor_initializer): catch another error,
7542         and display nice message.
7543
7544         (field_declaration): catch void field declaration
7545         to flag a better error. 
7546
7547         * class.cs (MemberBase.CheckBase): Report an error instead of a
7548         warning if a new protected member is declared in a struct. 
7549         (Field.Define): catch the error of readonly/volatile.
7550
7551         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
7552
7553         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
7554         volatile variable is taken
7555
7556 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
7557
7558         * statement.cs (Fixed.Resolve): Report an error if we are not in
7559         an unsafe context.
7560
7561 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
7562
7563         * typemanager.cs: reuse the code that handles type clashes for
7564         delegates and enumerations.
7565
7566         * class.cs (Report28): Always report.
7567
7568         * expression.cs (EncodeAsAttribute): Allow nulls here.
7569
7570 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
7571
7572         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
7573         the functionality for testing whether an expression is valid for
7574         an attribute here.  Also handle the case of arrays of elements
7575         being stored. 
7576
7577         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
7578         encoding a linear array into an array of objects that are suitable
7579         to be passed to an CustomAttributeBuilder.
7580
7581         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
7582
7583         * ecore.cs: (FieldExpr): Handle field remapping here.
7584
7585         * iteratators.cs: Pass the instance variable (if the method is an
7586         instance method) to the constructors, so we can access the field
7587         variables on the class.
7588
7589         TODO: Test this with structs.  I think the THIS variable on
7590         structs might have to be a pointer, and not a refenrece
7591
7592 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
7593
7594         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
7595         local variables to fields in a proxy class.
7596
7597         * iterators.cs (PopulateProxy): Rename our internal fields to
7598         <XXX>.  
7599         Create a <THIS> field if we are an instance method, so we can
7600         reference our parent container variables.
7601         (MapVariable): Called back from the EmitContext code to enter a
7602         new variable to field mapping into the proxy class (we just create
7603         a FieldBuilder).
7604
7605         * expression.cs
7606         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
7607         for using the remapped locals to fields.
7608
7609         I placed the code here, because that gives the same semantics to
7610         local variables, and only changes the Emit code.
7611
7612         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
7613         statements inside iterators.
7614         (VariableInfo): Add a FieldBuilder for the cases when we are
7615         remapping local variables to fields in a proxy class
7616
7617         * ecore.cs (SimpleNameResolve): Avoid testing two times for
7618         current_block != null.
7619
7620         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
7621         not cope with strings, as it has been moved to the
7622         TableSwitchEmit.  Fixed bug in switch generation.
7623
7624         * expression.cs (New.DoResolve): Provide more context for the user
7625         when reporting an error.
7626
7627         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
7628         pointers. 
7629
7630         * expression.cs (MemberAccess.DoResolve): When we get a type back,
7631         check the permissions for it.  Note than in a type-resolution
7632         context the check was already present in DeclSpace.ResolveType,
7633         but was missing from the MemberAccess.
7634
7635         (ArrayCreation.CheckIndices): warn if the user has
7636         more nested levels of expressions, but there are no more
7637         dimensions specified.  Avoids crash on bug 41906.
7638
7639 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
7640
7641         * statement.cs (Block): replace Implicit bool, for a generic
7642         flags.   
7643         New flag: `Unchecked'.  This is used during the EmitMeta phase
7644         (which is out-of-line with the regular Resolve/Emit process for a
7645         statement, as this is done ahead of time, but still gets a chance
7646         to call constant resolve).
7647
7648         (Block.Flags): new enum for adding a new flag.
7649
7650         (Block.EmitMeta): track the state of unchecked.
7651
7652         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
7653         to enable constant resolution to work there as well.
7654
7655 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
7656
7657         * typemanager.cs (ienumerable_type): Also look up
7658         System.Collections.IEnumerable. 
7659
7660 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
7661
7662         TODO: Test more than one conditional per method.
7663
7664         * class.cs (Indexer.Define): Report the location where the user is
7665         referencing the unsupported feature.
7666
7667         (MethodData): Overload the use of `conditionals' to
7668         minimize the creation of needless ArrayLists.   This saves roughly
7669         212kb on my machine.
7670
7671         (Method): Implement the new IIteratorContainer interface.
7672         (Method.SetYields): Implement the method by setting the ModFlags
7673         to contain METHOD_YIELDS.
7674
7675         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
7676         which just got set to null.
7677
7678         * iterators.cs: New file.
7679
7680         (Yield, YieldBreak): New statements.
7681
7682         * statement.cs (Return.Resolve): Flag an error if we are used in
7683         an iterator method.
7684
7685         * codegen.cs (InIterator): New flag set if the code is being
7686         compiled in an iterator method.
7687
7688         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
7689         internal modifier, and we just use it to avoid adding extra
7690         fields, as this is seldom used.  
7691
7692         * cs-parser.jay: Add yield_statement (yield and yield break).
7693
7694         * driver.cs: New flag -v2 to turn on version 2 features. 
7695
7696         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
7697         hashtable when v2 is enabled.
7698
7699 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
7700
7701         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
7702         there is already a namespace defined with this name.
7703
7704         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
7705         people upgraded their corlibs.
7706
7707         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
7708         always use fully qualified types, no need to use the compiler
7709         front end.
7710
7711         (TypeManager.IsNamespace): Use binarysearch.
7712
7713         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
7714         AddDelegate): I did not quite use the new IsValid API properly: I
7715         have to pass the short-name and the fullname.  I was passing only
7716         the basename instead of the fullname sometimes. 
7717
7718         (TypeContainer.DefineType): call NamespaceClash.
7719
7720         * interface.cs (Interface.DefineType): use NamespaceClash before
7721         defining the type.
7722
7723         * delegate.cs (Delegate.DefineType): use NamespaceClash before
7724         defining the type.
7725
7726         * enum.cs: (Enum.DefineType): use NamespaceClash before
7727         defining the type.
7728
7729         * typemanager.cs (: 3-line patch that gives us some tasty 11%
7730         speed increase.  First, use the negative_hits cache when we get a
7731         negative.  Second, add the type with its full original name
7732         instead of the new . and + encoded name (reflection uses + to
7733         separate type from a nested type).  Use LookupTypeReflection
7734         directly which bypasses the type->name hashtable (that we already
7735         know does not contain the type.
7736
7737         * decl.cs (DeclSpace.ResolveTypeExpr): track the
7738         location/container type. 
7739
7740         * driver.cs: When passing utf8, use directly the UTF8Encoding.
7741
7742 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
7743
7744         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
7745
7746         * delegate.cs (NewDelegate.Resolve): Test whether an instance
7747         method is being referenced in the method group from a static
7748         context, and report error 120 if so.
7749
7750         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
7751         Error118. 
7752
7753         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
7754         is created, we create the A namespace).
7755
7756         * cs-parser.jay: A namespace also introduces a DeclarationFound.
7757         Fixes #41591
7758
7759 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
7760
7761         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
7762         invocation to ModuleBuilder.GetType with the same values will
7763         return a new type instance, so we need to cache its return
7764         values. 
7765
7766         * expression.cs (Binary.ResolveOperator): Only allow the compare
7767         operators on enums if they are of the same type.
7768
7769         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
7770         types of ValueType on their own case.  Before we were giving them
7771         the same treatment as objects.
7772
7773         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
7774         fullname.  Short name is used to compare against container name.
7775         Fullname is used to check against defined namespace names.
7776
7777         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
7778         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
7779
7780         (Method.CheckBase): Call parent.
7781         (MemberBase.CheckBase): Check for protected members on sealed
7782         classes.
7783         (PropertyBase.CheckBase): Call parent.
7784         (Field.Define): Call parent.
7785
7786         * report.cs: Negative error codes are now mapped to 8000 - code,
7787         so that the display is render more nicely.
7788
7789         * typemanager.cs: Do not use try/catch, instead report a regular
7790         error. 
7791
7792         (GetPointerType, GetReferenceType): These methods provide
7793         mechanisms to obtain the T* and T& from a T.  We had the code
7794         previously scattered around the code base, and it also used
7795         TypeManager.LookupType that would go through plenty of caches.
7796         This one goes directly to the type source.
7797
7798         In some places we did the Type.GetType followed by
7799         ModuleBuilder.GetType, but not in others, so this unifies the
7800         processing as well.
7801
7802         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
7803         statements now that we have namespace information.
7804
7805         * typemanager.cs (IsNamespace): New method, returns whether the
7806         string presented is a namespace or not.
7807
7808         (ComputeNamespaces): New public entry point, computes the list of
7809         available namespaces, using the GetNamespaces API call in Mono, or
7810         the slower version in MS.NET.   
7811
7812         Now before we start the semantic analysis phase, we have a
7813         complete list of namespaces including everything that the user has
7814         provided.
7815
7816         Deleted old code to cache namespaces in .nsc files.
7817
7818 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
7819
7820         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
7821         class/struct location definition Location for the implicit
7822         constructor location.
7823
7824         (Operator.Define): Use the location of the operator for the
7825         implicit Method definition.
7826
7827         (Constructor.Emit): use the constructor location for the implicit
7828         base initializer constructor.
7829
7830         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
7831         and the Expression class now contains two new methods:
7832
7833         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
7834         isolate type lookup from the rest of the resolution process.
7835
7836         Since we use Expressions to hold type definitions due to the way
7837         we parse the input we have historically overloaded Resolve to
7838         perform the Type lookups if a special flag is passed.  Now this is
7839         eliminated and two methods take their place. 
7840
7841         The differences in the two methods between xStep and xTerminal is
7842         that xStep is involved in our current lookup system that uses
7843         SimpleNames to compose a name, while xTerminal is used just to
7844         catch the case where the simplename lookup failed.
7845
7846 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
7847
7848         * expression.cs (ResolveMemberAccess): Remove redundant code.
7849         TypeExpr expressions are always born fully resolved.
7850
7851         * interface.cs (PopulateMethod): Do not lookup the types twice.
7852         We were doing it once during SemanticAnalysis and once during
7853         PopulateMethod.
7854
7855         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
7856         in local variable type definitions, were being returned as a
7857         SimpleName (we decomposed everything into a string), that is
7858         because primary_expression was being used instead of a type in the
7859         grammar (reduce/reduce conflicts).
7860
7861         The part that was wrong is that we converted the expression into a
7862         string (an oversimplification in one hand, compounded with primary
7863         expressions doing string concatenation).
7864
7865         So things like:
7866
7867         A.B.C [] x;
7868
7869         Would return "A.B.C[]" as a SimpleName.  This stopped things like
7870         using clauses from working on this particular context.  And a type
7871         was being matched directly against "A.B.C[]".
7872
7873         We now use the correct approach, and allow for ComposedCast to be
7874         part of the unary expression.  So the "A.B.C []" become a composed
7875         cast of "A.B.C" (as a nested group of MemberAccess with a
7876         SimpleName at the end) plus the rank composition "[]". 
7877
7878         Also fixes 35567
7879
7880 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
7881
7882         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
7883         for the access level checking.
7884
7885         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
7886         `TypeContainer container', because I kept getting confused when I
7887         was debugging this code.
7888
7889         * expression.cs (Indexers): Instead of tracking getters/setters,
7890         we now track them in parallel.  We create one arraylist less, but
7891         most importantly it is possible now for the LValue code to find a
7892         matching get for a set.
7893
7894         (IndexerAccess.DoResolveLValue): Update the code.
7895         GetIndexersForType has been modified already to extract all the
7896         indexers from a type.  The code assumed it did not.
7897
7898         Also make the code set the correct return type for the indexer.
7899         This was fixed a long time ago for properties, but was missing for
7900         indexers.  It used to be void_type.
7901
7902         (Binary.Emit): Test first for doubles instead of
7903         floats, as they are more common.
7904
7905         (Binary.EmitBranchable): Use the .un version of the branch opcodes
7906         when dealing with floats and the <=, >= operators.  This fixes bug
7907         #39314 
7908
7909         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
7910         to load the array value by emitting a load on the foreach variable
7911         type.  This was incorrect.  
7912
7913         We now emit the code to load an element using the the array
7914         variable type, and then we emit the conversion operator.
7915
7916         Fixed #40176
7917
7918 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
7919
7920         * attribute.cs: Avoid allocation of ArrayLists in the common case.
7921
7922 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
7923
7924         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
7925         test for protection before we test for signatures. 
7926
7927         (MethodSignature.ToString): implement.
7928
7929         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
7930         to the case where we reduced into a LongConstant.
7931
7932         * decl.cs (CheckAccessLevel): If the type is an array, we can not
7933         depend on whether the information is acurrate, because the
7934         Microsoft runtime will always claim that the array type is public,
7935         regardless of the real state.
7936
7937         If the type is a pointer, another problem happens: the type is
7938         reported as non-public in Microsoft.  
7939
7940         In both cases we have to call CheckAccessLevel recursively with
7941         the underlying type as the argument to be tested.
7942
7943 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
7944
7945         * assign.cs (Assign.Emit): If we are dealing with a compound
7946         assignment expression, we should use the code path that stores the
7947         intermediate result in a temporary value.  This fixes #40903.
7948
7949         *expression.cs (Indirection.ToString): Provide ToString method for
7950         debugging. 
7951
7952 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
7953
7954         * class.cs: Null out fields holding references to Block objects so
7955         they can be garbage collected.
7956
7957         * expression.cs (OverloadResolve): Remove unused local.
7958
7959 2003-04-07  Martin Baulig  <martin@ximian.com>
7960
7961         * codegen.cs (EmitContext.CurrentFile): New public field.
7962         (EmitContext.Mark): Use the CurrentFile to check whether the
7963         location is in the correct file.
7964         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
7965
7966 2003-04-07  Martin Baulig  <martin@ximian.com>
7967
7968         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
7969
7970         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
7971         location.  [FIXME: The location argument which gets passed to this
7972         method is sometimes wrong!]
7973
7974 2003-04-07  Nick Drochak <ndrochak@gol.com>
7975
7976         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
7977
7978 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
7979
7980         * expression.cs (Indirection.EmitAssign): We were using the
7981         temporary, but returning immediately instead of continuing the
7982         EmitAssing flow.
7983
7984 2003-04-06  Martin Baulig  <martin@ximian.com>
7985
7986         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
7987         if it's a nested child, but also deriving from the outer class.
7988         See test 190.cs.
7989
7990         * typemanager.cs (IsNestedChildOf): Make this work if it's a
7991         nested child, but also deriving from the outer class.  See
7992         test-190.cs.
7993         (FilterWithClosure): We may access private members of the outer
7994         class if we're a nested child and deriving from the outer class.
7995         (RealMemberLookup): Only set `closure_private_ok' if the
7996         `original_bf' contained BindingFlags.NonPublic.
7997
7998 2003-04-05  Martin Baulig  <martin@ximian.com>
7999
8000         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
8001
8002 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
8003
8004         * class.cs (Event.Define): Do not allow abstract events to have
8005         initializers. 
8006
8007 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
8008
8009         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
8010         block in event declarations.
8011
8012         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
8013         value type, get its address.
8014
8015         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
8016         leaving a class on the stack instead of a boolean value (int
8017         0/1).  Change the code so we compare against null, and then the
8018         result against zero.
8019
8020         * class.cs (TypeContainer.GetClassBases): We were checking for the
8021         parent class being sealed too late.
8022
8023         * expression.cs (Binary.Emit): For <= and >= when dealing with
8024         floating point values, use cgt.un and clt.un instead of cgt and
8025         clt alone.
8026
8027 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
8028
8029         * statement.cs: Apply the same optimization as MS: skip the 
8030         GetEnumerator returning an IEnumerator, and use the one returning a 
8031         CharEnumerator instead. This allows us to avoid the try-finally block 
8032         and the boxing.
8033
8034 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
8035
8036         * cs-parser.jay: Attributes cannot be applied to
8037                          namespaces. Fixes #40473
8038
8039 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8040
8041         * class.cs:
8042         (Add*): check if the name is valid using the full name for constants,
8043         fields, properties and events.
8044
8045 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
8046
8047         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
8048         char constants to be part of the enumeration.
8049
8050         * expression.cs (Conditional.DoResolve): Add support for operator
8051         true. Implements the missing functionality from 14.12
8052
8053         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
8054         operator true/false as required by the spec.
8055
8056         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
8057         implicit conversion to boolean.
8058
8059         * statement.cs (Statement.ResolveBoolean): A boolean expression is
8060         also one where the type implements `operator true'. 
8061
8062         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
8063         get an expression that will invoke operator true based on an
8064         expression.  
8065
8066         (GetConversionOperators): Removed the hack that called op_True
8067         here.  
8068
8069         (Expression.ResolveBoolean): Move this from Statement.
8070
8071 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
8072
8073         * ecore.cs (FieldExpr): do not allow initialization of initonly
8074         fields on derived classes
8075
8076 2003-03-13  Martin Baulig  <martin@ximian.com>
8077
8078         * statement.cs (Block.Emit): Call ig.BeginScope() and
8079         ig.EndScope() when compiling with debugging info; call
8080         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
8081
8082 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
8083
8084         * expression.cs (Indexers): Do not construct immediately, allow
8085         for new members to be appended as we go.  Fixes 38143
8086
8087 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8088
8089         * expression.cs: save/restore context when resolving an unchecked
8090         expression.
8091
8092 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
8093
8094         * cfold.cs: Catch division by zero in modulus operator during
8095         constant folding.
8096
8097 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
8098
8099         * interface.cs (Interface.DefineMembers): Avoid defining members
8100         twice. 
8101
8102 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
8103
8104         * driver.cs: handle the +/- options for -noconfig
8105
8106         * statement.cs (Unckeched.Resolve): Also track the state of
8107         unchecked in the Resolve phase.
8108
8109 2003-02-27  Martin Baulig  <martin@ximian.com>
8110
8111         * ecore.cs (Expression.MemberLookup): Don't create a
8112         MethodGroupExpr for something which is not a method.  Fixes #38291.
8113
8114 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
8115
8116         * class.cs (MemberBase.CheckParameters): Also check that the type
8117         is unmanaged if it is a pointer.
8118
8119         * expression.cs (SizeOf.Resolve): Add location information.
8120
8121         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
8122         a managed type is declared.
8123
8124         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
8125         parameter modifiers as well.  Fixes bug 38606
8126
8127         * class.cs: Very sad.  Am backing out the speed up changes
8128         introduced by the ArrayList -> Array in the TypeContainer, as they
8129         were not actually that much faster, and introduced a bug (no error
8130         reports on duplicated methods).
8131
8132         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
8133         source first, this will guarantee that we have a valid expression
8134         before calling in lower levels functions that will require a
8135         resolved object.  Then use this original_source in the
8136         target.ResolveLValue instead of the original source that was
8137         passed to us.
8138
8139         Another change.  Use target.Resolve instead of LValueResolve.
8140         Although we are resolving for LValues, we will let the Assign code
8141         take care of that (it will be called again from Resolve).  This
8142         basically allows code like this:
8143
8144         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
8145         class Y { void A (X x) { x [0] += o; }
8146
8147         The problem was that the indexer was trying to resolve for
8148         set_Item (idx, object o) and never finding one.  The real set_Item
8149         was set_Item (idx, X).  By delaying the process we get the right
8150         semantics. 
8151
8152         Fixes bug 36505
8153
8154 2003-02-23  Martin Baulig  <martin@ximian.com>
8155
8156         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
8157         while calling DoEmit ().
8158
8159         * codegen.cs (EmitContext.Mark): Don't mark locations in other
8160         source files; if you use the #line directive inside a method, the
8161         compiler stops emitting line numbers for the debugger until it
8162         reaches the end of the method or another #line directive which
8163         restores the original file.
8164
8165 2003-02-23  Martin Baulig  <martin@ximian.com>
8166
8167         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
8168
8169 2003-02-23  Martin Baulig  <martin@ximian.com>
8170
8171         * statement.cs (Block.AddChildVariableNames): We need to call this
8172         recursively, not just for our immediate children.
8173
8174 2003-02-23  Martin Baulig  <martin@ximian.com>
8175
8176         * class.cs (Event.Define): Always make the field private, like csc does.
8177
8178         * typemanager.cs (TypeManager.RealMemberLookup): Make events
8179         actually work, fixes bug #37521.
8180
8181 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
8182
8183         * delegate.cs: When creating the various temporary "Parameters"
8184         classes, make sure that we call the ComputeAndDefineParameterTypes
8185         on those new parameters (just like we do with the formal ones), to
8186         allow them to be resolved in the context of the DeclSpace.
8187
8188         This fixes the bug that Dick observed in Bugzilla #38530.
8189
8190 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
8191
8192         * expression.cs (ResolveMemberAccess): When resolving a constant,
8193         do not attempt to pull a constant if the value was not able to
8194         generate a valid constant.
8195
8196         * const.cs (LookupConstantValue): Do not report more errors than required.
8197
8198 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8199
8200         * expression.cs: fixes bug #38328.
8201
8202 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
8203
8204         * class.cs: Changed all the various members that can be part of a
8205         class from being an ArrayList to be an Array of the right type.
8206         During the DefineType type_list, interface_list, delegate_list and
8207         enum_list are turned into types, interfaces, delegates and enums
8208         arrays.  
8209
8210         And during the member population, indexer_list, event_list,
8211         constant_list, field_list, instance_constructor_list, method_list,
8212         operator_list and property_list are turned into their real arrays.
8213
8214         Although we could probably perform this operation earlier, for
8215         good error reporting we need to keep the lists and remove the
8216         lists for longer than required.
8217
8218         This optimization was triggered by Paolo profiling the compiler
8219         speed on the output of `gen-sample-program.pl' perl script. 
8220
8221         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
8222         not crash in methods like MemberLookupFailed that use this field.  
8223
8224         This problem arises when the compiler fails to resolve a type
8225         during interface type definition for example.
8226
8227 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
8228
8229         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
8230         inherit from System.Object, so we have to stop at null, not only
8231         when reaching System.Object.
8232
8233 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
8234
8235         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
8236         DeclaredOnly because the parent indexer might have had a different
8237         name, but did not loop until the top of the hierarchy was reached.
8238
8239         The problem this one fixes is 35492: when a class implemented an
8240         indexer from an interface, we were getting the interface method
8241         (which was abstract) and we were flagging an error (can not invoke
8242         abstract method).
8243
8244         This also keeps bug 33089 functioning, and test-148 functioning.
8245
8246         * typemanager.cs (IsSpecialMethod): The correct way of figuring
8247         out if a method is special is to see if it is declared in a
8248         property or event, or whether it is one of the predefined operator
8249         names.   This should fix correctly #36804.
8250
8251 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
8252
8253         The goal here is to remove the dependency on EmptyCast.Peel ().
8254         Killing it completely.
8255
8256         The problem is that currently in a number of places where
8257         constants are expected, we have to "probe" for an EmptyCast, and
8258         Peel, which is not the correct thing to do, as this will be
8259         repetitive and will likely lead to errors. 
8260
8261         The idea is to remove any EmptyCasts that are used in casts that
8262         can be reduced to constants, so we only have to cope with
8263         constants. 
8264
8265         This bug hunt was triggered by Bug 37363 and the desire to remove
8266         the duplicate pattern where we were "peeling" emptycasts to check
8267         whether they were constants.  Now constants will always be
8268         constants.
8269
8270         * ecore.cs: Use an enumconstant here instead of wrapping with
8271         EmptyCast.  
8272
8273         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
8274         throwing me off.  By handling this we can get rid of a few hacks.
8275
8276         * statement.cs (Switch): Removed Peel() code.
8277
8278 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
8279
8280         * class.cs: Location information for error 508
8281
8282         * expression.cs (New.DoResolve): Add a guard against double
8283         resolution of an expression.  
8284
8285         The New DoResolve might be called twice when initializing field
8286         expressions (see EmitFieldInitializers, the call to
8287         GetInitializerExpression will perform a resolve on the expression,
8288         and later the assign will trigger another resolution
8289
8290         This leads to bugs (#37014)
8291
8292         * delegate.cs: The signature for EndInvoke should contain any ref
8293         or out parameters as well.  We were not doing this in the past. 
8294
8295         * class.cs (Field.Define): Do not overwrite the type definition
8296         inside the `volatile' group.  Turns out that volatile enumerations
8297         were changing the type here to perform a validity test, which
8298         broke conversions. 
8299
8300 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
8301
8302         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
8303         and structs, we do not want to load the instance variable
8304
8305         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
8306         enum_type has to be handled like an object reference (implicit
8307         conversions exists from this to object), but the regular IsClass
8308         and IsValueType tests will never return true for this one.
8309
8310         Also we use TypeManager.IsValueType instead of type.IsValueType,
8311         just for consistency with the rest of the code (this is only
8312         needed if we ever use the construct exposed by test-180.cs inside
8313         corlib, which we dont today).
8314
8315 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
8316
8317         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
8318         just InternalCall.
8319
8320 2003-02-09  Martin Baulig  <martin@ximian.com>
8321
8322         * namespace.cs (Namespace..ctor): Added SourceFile argument.
8323         (Namespace.DefineNamespaces): New static public method; this is
8324         called when we're compiling with debugging to add all namespaces
8325         to the symbol file.
8326
8327         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
8328         pass it to the Namespace's .ctor.
8329
8330         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
8331         and MethodBase arguments; pass the namespace ID to the symwriter;
8332         pass the MethodBase instead of the token to the symwriter.
8333         (SymbolWriter.DefineNamespace): New method to add a namespace to
8334         the symbol file.
8335
8336 2003-02-09  Martin Baulig  <martin@ximian.com>
8337
8338         * symbolwriter.cs: New file.  This is a wrapper around
8339         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
8340         methods here in near future.
8341
8342 2003-02-09  Martin Baulig  <martin@ximian.com>
8343
8344         * codegen.cs (EmitContext.Mark): Just pass the arguments to
8345         ILGenerator.MarkSequencePoint() which are actually used by the
8346         symbol writer.
8347
8348 2003-02-09  Martin Baulig  <martin@ximian.com>
8349
8350         * location.cs (SourceFile): New public sealed class.  This
8351         contains the name and an index which is used in the location's token.
8352         (Location): Reserve an appropriate number of bits in the token for
8353         the source file instead of walking over that list, this gives us a
8354         really huge performance improvement when compiling with debugging.
8355
8356         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
8357         `SourceFile' argument instead of a string.
8358         (Driver.ProcessFile): Add all the files via Location.AddFile(),
8359         but don't parse/tokenize here, we need to generate the list of all
8360         source files before we do that.
8361         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
8362         the files.
8363
8364         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
8365         instead of a string.
8366
8367         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
8368         of a string.
8369
8370 2003-02-09  Martin Baulig  <martin@ximian.com>
8371
8372         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
8373         filename on `#line default'.
8374
8375 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
8376
8377         * statement.cs: don't clear the pinned var when the fixed statement
8378         returns from the method (fixes bug#37752).
8379
8380 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
8381
8382         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
8383         to IsValueType.
8384
8385 2003-02-07  Martin Baulig  <martin@ximian.com>
8386
8387         * driver.cs: Removed the `--debug-args' command line argument.
8388
8389         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
8390         automatically by the AsssemblyBuilder.
8391         (CodeGen.InitializeSymbolWriter): We don't need to call any
8392         initialization function on the symbol writer anymore.  This method
8393         doesn't take any arguments.
8394
8395 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
8396
8397         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
8398         from referenced assemblies as well.
8399
8400 2003-02-02  Martin Baulig  <martin@ximian.com>
8401
8402         * class.cs (MethodData.Emit): Generate debugging info for external methods.
8403
8404 2003-02-02  Martin Baulig  <martin@ximian.com>
8405
8406         * class.cs (Constructor.Emit): Open the symbol writer before
8407         emitting the constructor initializer.
8408         (ConstructorInitializer.Emit): Call ec.Mark() to allow
8409         single-stepping through constructor initializers.
8410
8411 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
8412
8413         * class.cs: Handle error 549: do not allow virtual methods in
8414         sealed classes. 
8415
8416 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
8417
8418         * decl.cs: Check access levels when resolving types
8419
8420 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
8421
8422         * statement.cs: Add parameters and locals set in catch blocks that might 
8423         return to set vector
8424
8425 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
8426
8427         * class.cs (Operator): Set the SpecialName flags for operators.
8428
8429         * expression.cs (Invocation.DoResolve): Only block calls to
8430         accessors and operators on SpecialName methods.
8431
8432         (Cast.TryReduce): Handle conversions from char constants.
8433
8434
8435 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
8436
8437         * statement.cs: small memory and time optimization in FlowBranching.
8438
8439 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
8440
8441         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
8442         problem that the last fix but in the other sid (Set).
8443
8444         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
8445         access when there is no indexer in the hierarchy.
8446
8447 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
8448
8449         * class.cs: Combine some if statements.
8450
8451 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8452
8453         * driver.cs: fixed bug #37187.
8454
8455 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
8456
8457         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
8458         any indexer, it's needed to build a list with all the indexers in the
8459         hierarchy (AllGetters), else we have problems. Fixes #35653.
8460
8461 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
8462
8463         * class.cs (MethodData.Define): It is wrong for an interface
8464         implementation to be static in both cases: explicit and implicit.
8465         We were only handling this in one case.
8466
8467         Improve the if situation there to not have negations.
8468
8469         * class.cs (Field.Define): Turns out that we do not need to check
8470         the unsafe bit on field definition, only on usage.  Remove the test.
8471
8472 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8473
8474         * driver.cs: use assembly.Location instead of Codebase (the latest
8475         patch made mcs fail when using MS assemblies).
8476
8477 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
8478
8479         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
8480         get the path to *corlib.dll.
8481
8482 2003-01-21  Nick Drochak <ndrochak@gol.com>
8483
8484         * cs-tokenizer.cs:
8485         * pending.cs:
8486         * typemanager.cs: Remove compiler warnings
8487
8488 2003-01-20  Duncan Mak  <duncan@ximian.com>
8489
8490         * AssemblyInfo.cs: Bump the version number to 0.19.
8491
8492 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8493
8494         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
8495
8496 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
8497
8498         * class.cs (Constructor::Emit): Emit debugging info for constructors.
8499
8500 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
8501
8502         * cs-parser.jay: Small fix: we were not comparing the constructor
8503         name correctly.   Thanks to Zoltan for the initial pointer.
8504
8505 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
8506
8507         * cs-tokenizer.cs: Set file name when specified with #line
8508
8509 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
8510
8511         * cs-parser.jay: Only perform the constructor checks here if we
8512         are named like the class;  This will help provider a better
8513         error.  The constructor path is taken when a type definition is
8514         not found, but most likely the user forgot to add the type, so
8515         report that rather than the constructor error.
8516
8517 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
8518
8519         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
8520         allocations.
8521
8522 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
8523
8524         * cs-parser.jay: Add cleanup call.
8525
8526 2003-01-13  Duncan Mak  <duncan@ximian.com>
8527
8528         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
8529         consistent with other methods.
8530
8531 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
8532
8533         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
8534
8535 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
8536
8537         * attribute.cs: only set GuidAttr to true when we have a
8538         GuidAttribute.
8539
8540 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8541
8542         * ecore.cs:
8543         * expression.cs:
8544         * typemanager.cs: fixes to allow mcs compile corlib with the new
8545         Type.IsSubclassOf fix.
8546
8547 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
8548
8549         * expression.cs (LocalVariableReference.DoResolve): Classify a
8550         constant as a value, not as a variable.   Also, set the type for
8551         the variable.
8552
8553         * cs-parser.jay (fixed_statement): take a type instead of a
8554         pointer_type, so we can produce a better error message later.
8555
8556         * statement.cs (Fixed.Resolve): Flag types that are not pointers
8557         as an error.  
8558
8559         (For.DoEmit): Make inifinite loops have a
8560         non-conditional branch back.
8561
8562         (Fixed.DoEmit): First populate the pinned variables, then emit the
8563         statement, then clear the variables.  Before I was emitting the
8564         code once for each fixed piece.
8565
8566
8567 2003-01-08  Martin Baulig  <martin@ximian.com>
8568
8569         * statement.cs (FlowBranching.MergeChild): A break in a
8570         SWITCH_SECTION does not leave a loop.  Fixes #36155.
8571
8572 2003-01-08  Martin Baulig  <martin@ximian.com>
8573
8574         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
8575         lives in the same number space than `param_map'.  Fixes #36154.
8576
8577 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
8578
8579         * cs-parser.jay (constructor_declaration): Set the
8580         Constructor.ModFlags before probing for it.  This makes the
8581         compiler report 514, 515 and 132 (the code was there, but got
8582         broken). 
8583
8584         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
8585         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
8586         (GotoCase.Resolve): Set `Returns' to ALWAYS.
8587
8588 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
8589
8590         * enum.cs: create the enum static fields using the enum type.
8591
8592 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
8593
8594         * class.cs: don't try to create the ParamBuilder for the return
8595         type if it's not needed (and handle it breaking for the ms runtime
8596         anyway).
8597
8598 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
8599
8600         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
8601
8602 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
8603
8604         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
8605         the command.   This showed up while compiling the JANET source
8606         code, which used \r as its only newline separator.
8607
8608 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
8609
8610         * class.cs (Method.Define): If we are an operator (because it
8611         reuses our code), then set the SpecialName and HideBySig.  #36128
8612
8613 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
8614
8615         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
8616         exception, report error 120 `object reference required'.
8617
8618         * driver.cs: Add --pause option, used during to measure the size
8619         of the process as it goes with --timestamp.
8620
8621         * expression.cs (Invocation.DoResolve): Do not allow methods with
8622         SpecialName to be invoked.
8623
8624 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
8625
8626         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
8627         number before adding it.
8628
8629 2002-12-21  Ravi Pratap  <ravi@ximian.com>
8630
8631         * ecore.cs (StandardImplicitConversion): When in an unsafe
8632         context, we allow conversion between void * to any other pointer
8633         type. This fixes bug #35973.
8634
8635 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
8636
8637         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
8638         is not thrown when extensionless outputs are used 
8639
8640 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8641
8642         * rootcontext.cs: fixed compilation of corlib.
8643
8644 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
8645
8646         * attribute.cs (Attributes.Contains): Add new method.
8647
8648         * class.cs (MethodCore.LabelParameters): if the parameter is an
8649         `out' parameter, check that no attribute `[In]' has been passed.
8650
8651         * enum.cs: Handle the `value__' name in an enumeration.
8652
8653 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
8654
8655         * decl.cs: Added special case to allow overrides on "protected
8656         internal" methods
8657
8658 2002-12-18  Ravi Pratap  <ravi@ximian.com>
8659
8660         * attribute.cs (Attributes.AddAttributeSection): Rename to this
8661         since it makes much more sense.
8662
8663         (Attributes.ctor): Don't require a Location parameter.
8664
8665         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
8666
8667         * attribute.cs (ApplyAttributes): Remove extra Location parameters
8668         since we already have that information per attribute.
8669
8670         * everywhere : make appropriate changes.
8671
8672         * class.cs (LabelParameters): Write the code which actually
8673         applies attributes to the return type. We can't do this on the MS
8674         .NET runtime so we flag a warning in the case an exception is
8675         thrown.
8676
8677 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
8678
8679         * const.cs: Handle implicit null conversions here too.
8680
8681 2002-12-17  Ravi Pratap  <ravi@ximian.com>
8682
8683         * class.cs (MethodCore.LabelParameters): Remove the extra
8684         Type [] parameter since it is completely unnecessary. Instead
8685         pass in the method's attributes so that we can extract
8686         the "return" attribute.
8687
8688 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
8689
8690         * cs-parser.jay (parse): Use Report.Error to flag errors instead
8691         of ignoring it and letting the compile continue.
8692
8693         * typemanager.cs (ChangeType): use an extra argument to return an
8694         error condition instead of throwing an exception.
8695
8696 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
8697
8698         * expression.cs (Unary.TryReduce): mimic the code for the regular
8699         code path.  Perform an implicit cast in the cases where we can
8700         implicitly convert to one of the integral types, and then reduce
8701         based on that constant.   This fixes bug #35483.
8702
8703 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8704
8705         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
8706
8707 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8708
8709         * namespace.cs: fixed bug #35489.
8710
8711 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
8712
8713         * class.cs: Remove some dead code.
8714
8715         * cs-parser.jay: Estimate the number of methods needed
8716         (RootContext.MethodCount);
8717
8718         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
8719         numbers instead of StringBuilders.
8720
8721         * support.cs (PtrHashtable): Add constructor with initial size;
8722         We can now reduce reallocations of the method table.
8723
8724 2002-12-10  Ravi Pratap  <ravi@ximian.com>
8725
8726         * attribute.cs (ApplyAttributes): Keep track of the emitted
8727         attributes on a per-target basis. This fixes bug #35413.
8728
8729 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
8730
8731         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
8732         default to the Windows 1252 encoding.
8733
8734         (UnixParseOption): Support version, thanks to Alp for the missing
8735         pointer. 
8736
8737         * AssemblyInfo.cs: Add nice assembly information.
8738
8739         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
8740         (bug 35169).
8741
8742         * cs-parser.jay: Allow a trailing comma before the close bracked
8743         in the attribute_section production.
8744
8745         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
8746         address of the instance was being taken, I will take this out,
8747         because we take the address of the object immediately here.
8748
8749 2002-12-09  Ravi Pratap  <ravi@ximian.com>
8750
8751         * typemanager.cs (AreMultipleAllowed): Take care of the most
8752         obvious case where attribute type is not in the current assembly -
8753         stupid me ;-)
8754
8755 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
8756
8757         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
8758         definitions, instead of doing that afterwards.  
8759
8760         Also we use a nice little hack, depending on the constructor, we
8761         know if we are a "composed" name or a simple name.  Hence, we
8762         avoid the IndexOf test, and we avoid 
8763
8764         * codegen.cs: Add code to assist in a bug reporter to track down
8765         the source of a compiler crash. 
8766
8767 2002-12-07  Ravi Pratap  <ravi@ximian.com>
8768
8769         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
8770         types have been emitted for a given element and flag an error
8771         if something which does not have AllowMultiple set is used more
8772         than once.
8773
8774         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
8775         attribute types and their corresponding AllowMultiple properties
8776
8777         (AreMultipleAllowed): Check the property for a given type.
8778
8779         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
8780         property in the case we have a TypeContainer.
8781
8782         (Attributes.AddAttribute): Detect duplicates and just skip on
8783         adding them. This trivial fix catches a pretty gross error in our
8784         attribute emission - global attributes were being emitted twice!
8785
8786         Bugzilla bug #33187 is now fixed.
8787
8788 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
8789
8790         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
8791         instead of pp_and).
8792
8793         * expression.cs (Binary.ResolveOperator): I can only use the
8794         Concat (string, string, string) and Concat (string, string,
8795         string, string) if the child is actually a concatenation of
8796         strings. 
8797
8798 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
8799
8800         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
8801         context where we need a 2-character lookahead.
8802
8803         * pending.cs (PendingImplementation): Rework so we can keep track
8804         of interface types all the time, and flag those which were
8805         implemented by parents as optional.
8806
8807 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
8808
8809         * expression.cs (Binary.ResolveOperator): Use
8810         String.Concat(string,string,string) or
8811         String.Concat(string,string,string,string) when possible. 
8812
8813         * typemanager: More helper methods.
8814
8815
8816 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
8817
8818         * pending.cs: remove the bogus return from GetMissingInterfaces()
8819         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
8820
8821 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8822
8823         * namespace.cs: avoid duplicated 'using xxx' being added to
8824         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
8825         when we get more than one 'using' statement for the same namespace.
8826         Report a CS0105 warning for it.
8827
8828 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
8829
8830         * cs-tokenizer.cs (consume_identifier): use read directly, instead
8831         of calling getChar/putback, uses internal knowledge of it.    
8832
8833         (xtoken): Reorder tokenizer so most common patterns are checked
8834         first.  This reduces the compilation time in another 5% (from 8.11s
8835         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
8836
8837         The parsing time is 22% of the compilation in mcs, and from that
8838         64% is spent on the tokenization process.  
8839
8840         I tried using a binary search for keywords, but this is slower
8841         than the hashtable.  Another option would be to do a couple of
8842         things:
8843
8844                 * Not use a StringBuilder, instead use an array of chars,
8845                   with a set value.  Notice that this way we could catch
8846                   the 645 error without having to do it *afterwards*.
8847
8848                 * We could write a hand-parser to avoid the hashtable
8849                   compares altogether.
8850
8851         The identifier consumption process takes 37% of the tokenization
8852         time.  Another 15% is spent on is_number.  56% of the time spent
8853         on is_number is spent on Int64.Parse:
8854
8855                 * We could probably choose based on the string length to
8856                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
8857                   computations. 
8858
8859         Another 3% is spend on wrapping `xtoken' in the `token' function.
8860
8861         Handle 0xa0 as whitespace (#34752)
8862
8863 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
8864
8865         * typemanager.cs (IsCLRType): New routine to tell whether a type
8866         is one of the builtin types.  
8867
8868         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
8869         typecode in more places instead of doing pointer comparissions.
8870         We could leverage some knowledge about the way the typecodes are
8871         laid out.
8872
8873         New code to cache namespaces in assemblies, it is currently not
8874         invoked, to be used soon.
8875
8876         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
8877
8878         * expression.cs (Binary.ResolveOperator): specially handle
8879         strings, and do not perform user-defined operator overloading for
8880         built-in types.
8881
8882 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
8883
8884         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
8885         internalcall as it is a pretty simple operation;  Avoid whenever
8886         possible to call Char.IsLetter.
8887
8888         (consume_identifier): Cut by half the number of
8889         hashtable calls by merging the is_keyword and GetKeyword behavior.
8890
8891         Do not short-circuit, because if we do, we
8892         report errors (ie, #if false && true would produce an invalid
8893         directive error);
8894
8895
8896 2002-11-24  Martin Baulig  <martin@ximian.com>
8897
8898         * expression.cs (Cast.TryReduce): If we're in checked syntax,
8899         check constant ranges and report a CS0221.  Fixes #33186.
8900
8901 2002-11-24  Martin Baulig  <martin@ximian.com>
8902
8903         * cs-parser.jay: Make this work for uninitialized variable
8904         declarations in the `for' initializer.  Fixes #32416.
8905
8906 2002-11-24  Martin Baulig  <martin@ximian.com>
8907
8908         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
8909         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
8910
8911 2002-11-24  Martin Baulig  <martin@ximian.com>
8912
8913         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
8914         argument; if true, we also check for user-defined conversions.
8915         This is only needed if both arguments are of a user-defined type.
8916         Fixes #30443, added test-175.cs.
8917         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
8918
8919         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
8920
8921 2002-11-24  Martin Baulig  <martin@ximian.com>
8922
8923         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
8924         function to get the store opcode.
8925         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
8926         only emit the Ldelema if the store opcode is Stobj.  You must run
8927         both test-34 and test-167 to test this.  Fixes #34529.
8928
8929 2002-11-23  Martin Baulig  <martin@ximian.com>
8930
8931         * ecore.cs (Expression.MemberLookup): Added additional
8932         `qualifier_type' argument which is used when we're being called
8933         from MemberAccess.DoResolve() and null if we're called from a
8934         SimpleName lookup.
8935         (Expression.MemberLookupFailed): New method to report errors; this
8936         does the CS1540 check and reports the correct error message.
8937
8938         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
8939         argument for the CS1540 check and redone the way how we're dealing
8940         with private members.  See the comment in the source code for details.
8941         (FilterWithClosure): Reverted this back to revision 1.197; renamed
8942         `closure_start_type' to `closure_qualifier_type' and check whether
8943         it's not null.  It was not this filter being broken, it was just
8944         being called with the wrong arguments.
8945
8946         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
8947         and pass it the correct `qualifier_type'; this also does the error
8948         handling for us.
8949
8950 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
8951
8952         * expression.cs (Invocation.EmitParams): If the we are dealing
8953         with a non-built-in value type, load its address as well.
8954
8955         (ArrayCreation): Use a a pretty constant instead
8956         of the hardcoded value 2.   Use 6 instead of 2 for the number of
8957         static initializers.  
8958
8959         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
8960         because they are not really value types, just glorified integers. 
8961
8962         * driver.cs: Do not append .exe, the CSC compiler does not do it.
8963
8964         * ecore.cs: Remove redundant code for enumerations, make them use
8965         the same code path as everything else, fixes the casting issue
8966         with enumerations in Windows.Forms.
8967
8968         * attribute.cs: Do only cast to string if it is a string, the
8969         validation happens later.
8970
8971         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
8972         people upgrade their corlibs.
8973
8974         * ecore.cs: Oops, enumerations were not following the entire code path
8975
8976 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
8977
8978         * typemanager.cs (FilterWithClosure): Commented out the test for
8979         1540 in typemanager.cs, as it has problems when accessing
8980         protected methods from a parent class (see test-174.cs). 
8981
8982         * attribute.cs (Attribute.ValidateGuid): new method.
8983         (Attribute.Resolve): Use above.
8984
8985 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
8986
8987         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
8988
8989         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
8990         handling for enumerations, as we only needed the TypeContainer
8991         functionality to begin with (this is required for the fix below to
8992         work for enums that reference constants in a container class for
8993         example). 
8994
8995         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
8996
8997         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
8998         a valid TypeBuilder to perform lookups on.o
8999
9000         * class.cs (InheritableMemberSignatureCompare): Use true in the
9001         call to GetGetMethod and GetSetMethod, because we are comparing
9002         the signature, and we need to get the methods *even* if they are
9003         private. 
9004
9005         (PropertyBase.CheckBase): ditto.
9006
9007         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
9008         GotoCase.Resolve): Use Peel on EmpytCasts.
9009
9010         * ecore.cs (EmptyCast): drop child, add Peel method.
9011
9012 2002-11-17  Martin Baulig  <martin@ximian.com>
9013
9014         * ecore.cs (EmptyCast.Child): New public property.
9015
9016         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
9017         label resolved to an EmptyCast.  Fixes #34162.
9018         (GotoCase.Resolve): Likewise.
9019         (Block.EmitMeta): Likewise.
9020
9021 2002-11-17  Martin Baulig  <martin@ximian.com>
9022
9023         * expression.cs (Invocation.BetterConversion): Prefer int over
9024         uint; short over ushort; long over ulong for integer literals.
9025         Use ImplicitConversionExists instead of StandardConversionExists
9026         since we also need to check for user-defined implicit conversions.
9027         Fixes #34165.  Added test-173.cs.
9028
9029 2002-11-16  Martin Baulig  <martin@ximian.com>
9030
9031         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
9032         with the `true' and `false' literals.  Fixes #33151.
9033
9034 2002-11-16  Martin Baulig  <martin@ximian.com>
9035
9036         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
9037         October 22nd; don't do the cs1540 check for static members.
9038
9039         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
9040         now using our own filter here and doing the cs1540 check again.
9041
9042 2002-11-16  Martin Baulig  <martin@ximian.com>
9043
9044         * support.cs (InternalParameters): Don't crash if we don't have
9045         any fixed parameters.  Fixes #33532.
9046
9047 2002-11-16  Martin Baulig  <martin@ximian.com>
9048
9049         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
9050         when looking up static methods to make this work on Windows.
9051         Fixes #33773.
9052
9053 2002-11-16  Martin Baulig  <martin@ximian.com>
9054
9055         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
9056         a setter rather than using PropertyInfo.CanWrite.
9057
9058 2002-11-15  Nick Drochak  <ndrochak@gol.com>
9059
9060         * class.cs: Allow acces to block member by subclasses. Fixes build
9061         breaker.
9062
9063 2002-11-14  Martin Baulig  <martin@ximian.com>
9064
9065         * class.cs (Constructor.Emit): Added the extern/block check.
9066         Fixes bug #33678.
9067
9068 2002-11-14  Martin Baulig  <martin@ximian.com>
9069
9070         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
9071         iteration while looking for indexers, this is needed because the
9072         indexer may have a different name in our base classes.  Fixed the
9073         error reporting (no indexers at all, not get accessor, no
9074         overloaded match).  Fixes bug #33089.
9075         (IndexerAccess.DoResolveLValue): Likewise.
9076
9077 2002-11-14  Martin Baulig  <martin@ximian.com>
9078
9079         * class.cs (PropertyBase.CheckBase): Make this work for multiple
9080         indexers.  Fixes the first part of bug #33089.
9081         (MethodSignature.InheritableMemberSignatureCompare): Added support
9082         for properties.
9083
9084 2002-11-13  Ravi Pratap  <ravi@ximian.com>
9085
9086         * attribute.cs (Attribute.Resolve): Catch the
9087         NullReferenceException and report it since it isn't supposed to
9088         happen. 
9089
9090 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
9091
9092         * expression.cs (Binary.EmitBranchable): Also handle the cases for
9093         LogicalOr and LogicalAnd that can benefit from recursively
9094         handling EmitBranchable.  The code now should be nice for Paolo.
9095
9096 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
9097
9098         * typemanager.cs (LookupType): Added a negative-hit hashtable for
9099         the Type lookups, as we perform quite a number of lookups on
9100         non-Types.  This can be removed once we can deterministically tell
9101         whether we have a type or a namespace in advance.
9102
9103         But this might require special hacks from our corlib.
9104
9105         * TODO: updated.
9106
9107         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
9108         and double which avoids a conversion from an integer to a double.
9109
9110         * expression.cs: tiny optimization, avoid calling IsConstant,
9111         because it effectively performs the lookup twice.
9112
9113 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
9114
9115         But a bogus return here to keep the semantics of the old code
9116         until the Mono runtime is fixed.
9117
9118         * pending.cs (GetMissingInterfaces): New method used to remove all
9119         the interfaces that are already implemented by our parent
9120         classes from the list of pending methods. 
9121
9122         * interface.cs: Add checks for calls after ResolveTypeExpr.
9123
9124 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
9125
9126         * class.cs (Class.Emit): Report warning 67: event not used if the
9127         warning level is beyond 3.
9128
9129         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
9130         being a NullLiteral.
9131
9132         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
9133         specifiers. 
9134
9135         * class.cs (TypeContainer.GetClassBases): Cover a missing code
9136         path that might fail if a type can not be resolved.
9137
9138         * expression.cs (Binary.Emit): Emit unsigned versions of the
9139         operators. 
9140
9141         * driver.cs: use error 5.
9142
9143 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
9144
9145         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
9146
9147 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
9148
9149         * cs-parser.jay (switch_section): A beautiful patch from Martin
9150         Baulig that fixed 33094.
9151
9152 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
9153
9154         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
9155         Check whether the base is abstract and report an error if so.
9156
9157         * expression.cs (IndexerAccess.DoResolveLValue,
9158         IndexerAccess.DoResolve): ditto. 
9159
9160         (Invocation.DoResolve): ditto.
9161
9162         (Invocation.FullMethodDesc): Improve the report string.
9163
9164         * statement.cs (Block): Eliminate IsVariableDefined as it is
9165         basically just a wrapper for GetVariableInfo.
9166
9167         * ecore.cs (SimpleName): Use new 
9168
9169         * support.cs (ReflectionParamter.ParameterType): We unwrap the
9170         type, as we return the actual parameter ref/unref state on a
9171         different call.
9172
9173 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
9174
9175         * support.cs: Return proper flags REF/OUT fixing the previous
9176         commit.  
9177
9178         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
9179         not used to mean `ref' but `ref or out' in ParameterReference
9180
9181         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
9182         full type signature instead of calling TypeManger.CSharpName
9183         ourselves. 
9184
9185         * support.cs (InternalParameters.ParameterDesc): Do not compare
9186         directly to the modflags, because REF/OUT will actually be bitsets
9187         if set. 
9188
9189         * delegate.cs (VerifyMethod): Check also the modifiers.
9190
9191         * cs-tokenizer.cs: Fix bug where floating point values with an
9192         exponent where a sign was missing was ignored.
9193
9194         * driver.cs: Allow multiple assemblies to be specified in a single
9195         /r: argument
9196
9197 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
9198
9199         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
9200         because identifiers after a parenthesis would end up in this kind
9201         of production, and we needed to desamiguate it for having casts
9202         like:
9203
9204                 (UserDefinedType *) xxx
9205
9206 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
9207
9208         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
9209         we should set on the Bindingflags.NonPublic, but not turn on
9210         private_ok.  private_ok controls whether a Private member is
9211         returned (this is chekced on the filter routine), while the
9212         BindingFlags.NonPublic just controls whether private/protected
9213         will be allowed.   This fixes the problem part of the problem of
9214         private properties being allowed to be used in derived classes.
9215
9216         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
9217         so we can call the children DoResolveLValue method (this will
9218         properly signal errors on lvalue assignments to base properties)
9219
9220         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
9221         getter are null, and we have a property info, we know that this
9222         happened because the lookup failed, so we report an error 122 for
9223         protection level violation.
9224
9225         We also silently return if setter and getter are null in the
9226         resolve functions, this condition only happens if we have flagged
9227         the error before.  This is the other half of the problem. 
9228
9229         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
9230         not have accessibility information, that is why we were returning
9231         true in the filter function in typemanager.cs.
9232
9233         To properly report 122 (property is inaccessible because of its
9234         protection level) correctly, we report this error in ResolveAccess
9235         by failing if both the setter and the getter are lacking (ie, the
9236         lookup failed). 
9237
9238         DoResolve and DoLResolve have been modified to check for both
9239         setter/getter being null and returning silently, the reason being
9240         that I did not want to put the knowledge about this error in upper
9241         layers, like:
9242
9243         int old = Report.Errors;
9244         x = new PropertyExpr (...);
9245         if (old != Report.Errors)
9246                 return null;
9247         else
9248                 return x;
9249
9250         So the property expr is returned, but it is invalid, so the error
9251         will be flagged during the resolve process. 
9252
9253         * class.cs: Remove InheritablePropertySignatureCompare from the
9254         class, as we no longer depend on the property signature to compute
9255         whether it is possible to implement a method or not.
9256
9257         The reason is that calling PropertyInfo.GetGetMethod will return
9258         null (in .NET, in Mono it works, and we should change this), in
9259         cases where the Get Method does not exist in that particular
9260         class.
9261
9262         So this code:
9263
9264         class X { public virtual int A { get { return 1; } } }
9265         class Y : X { }
9266         class Z : Y { public override int A { get { return 2; } } }
9267
9268         Would fail in Z because the parent (Y) would not have the property
9269         defined.  So we avoid this completely now (because the alternative
9270         fix was ugly and slow), and we now depend exclusively on the
9271         method names.
9272
9273         (PropertyBase.CheckBase): Use a method-base mechanism to find our
9274         reference method, instead of using the property.
9275
9276         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
9277         routines are gone now.
9278
9279         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
9280         names, they were incorrectly named.
9281
9282         * cs-tokenizer.cs: Return are more gentle token on failure. 
9283
9284         * pending.cs (PendingImplementation.InterfaceMethod): This routine
9285         had an out-of-sync index variable, which caused it to remove from
9286         the list of pending methods the wrong method sometimes.
9287
9288 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
9289
9290         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
9291         CanWrite, because those refer to this particular instance of the
9292         property, and do not take into account the fact that we can
9293         override single members of a property.
9294
9295         Constructor requires an EmitContext.  The resolution process does
9296         not happen here, but we need to compute the accessors before,
9297         because the resolution does not always happen for properties.
9298
9299         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
9300         subclass, before we did not update this flag, but we did update
9301         bindingflags. 
9302
9303         (GetAccessors): Drop this routine, as it did not work in the
9304         presence of partially overwritten set/get methods. 
9305
9306         Notice that this broke the cs1540 detection, but that will require
9307         more thinking. 
9308
9309 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9310
9311         * class.cs:
9312         * codegen.cs:
9313         * driver.cs: issue a warning instead of an error if we don't support
9314         debugging for the platform. Also ignore a couple of errors that may
9315         arise when trying to write the symbols. Undo my previous patch.
9316
9317 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9318
9319         * driver.cs: ignore /debug switch except for Unix platforms.
9320
9321 2002-10-23  Nick Drochak  <ndrochak@gol.com>
9322
9323         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
9324
9325 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
9326
9327         * driver.cs: Do not make mcs-debug conditional, so we do not break
9328         builds that use it.
9329
9330         * statement.cs (UsageVector.MergeChildren): I would like Martin to
9331         review this patch.  But basically after all the children variables
9332         have been merged, the value of "Breaks" was not being set to
9333         new_breaks for Switch blocks.  I think that it should be set after
9334         it has executed.  Currently I set this to the value of new_breaks,
9335         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
9336         conservative, but I do not understand this code very well.
9337
9338         I did not break anything in the build, so that is good ;-)
9339
9340         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
9341
9342 2002-10-20  Mark Crichton  <crichton@gimp.org>
9343
9344         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
9345
9346 2002-10-20  Nick Drochak  <ndrochak@gol.com>
9347
9348         * cfold.cs: Fixed compile blocker.
9349
9350 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
9351
9352         * driver.cs: I was chekcing the key, not the file.
9353
9354 2002-10-19  Ravi Pratap  <ravi@ximian.com>
9355
9356         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
9357         message that we were generating - we just need to silently return
9358         a null.
9359
9360 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
9361
9362         * class.cs (Event.Define): Change my previous commit, as this
9363         breaks the debugger.  This is a temporary hack, as it seems like
9364         the compiler is generating events incorrectly to begin with.
9365
9366         * expression.cs (Binary.ResolveOperator): Added support for 
9367         "U operator - (E x, E y)"
9368
9369         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
9370         y)".
9371
9372         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
9373         init-only variables, but this path did not take into account that
9374         there might be also instance readonly variables.  Correct this
9375         problem. 
9376
9377         This fixes bug 32253
9378
9379         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
9380         delegates as well.
9381
9382         * driver.cs: Change the extension for modules to `netmodule'
9383
9384         * cs-parser.jay: Improved slightly the location tracking for
9385         the debugger symbols.
9386
9387         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
9388         modifiers that were specified instead of the hardcoded value
9389         (FamAndAssem).  This was basically ignoring the static modifier,
9390         and others.  Fixes 32429.
9391
9392         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
9393         fixed a bug in the process (32476)
9394
9395         * expression.cs (ArrayAccess.EmitAssign): Patch from
9396         hwang_rob@yahoo.ca that fixes bug 31834.3
9397
9398 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
9399
9400         * driver.cs: Make the module extension .netmodule.
9401
9402 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
9403
9404         * driver.cs: Report an error if the resource file is not found
9405         instead of crashing.
9406
9407         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
9408         false, like Emit does.
9409
9410 2002-10-16  Nick Drochak  <ndrochak@gol.com>
9411
9412         * typemanager.cs: Remove unused private member.  Also reported mcs
9413         bug to report this as a warning like csc.
9414
9415 2002-10-15  Martin Baulig  <martin@gnome.org>
9416
9417         * statement.cs (Statement.Emit): Made this a virtual method; emits
9418         the line number info and calls DoEmit().
9419         (Statement.DoEmit): New protected abstract method, formerly knows
9420         as Statement.Emit().
9421
9422         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
9423
9424 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
9425
9426         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
9427         have fixed a remaining problem: not every AddXXXX was adding a
9428         fully qualified name.  
9429
9430         Now everyone registers a fully qualified name in the DeclSpace as
9431         being defined instead of the partial name.  
9432
9433         Downsides: we are slower than we need to be due to the excess
9434         copies and the names being registered this way.  
9435
9436         The reason for this is that we currently depend (on the corlib
9437         bootstrap for instance) that types are fully qualified, because
9438         we dump all the types in the namespace, and we should really have
9439         types inserted into the proper namespace, so we can only store the
9440         basenames in the defined_names array.
9441
9442 2002-10-10  Martin Baulig  <martin@gnome.org>
9443
9444         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
9445         from bug #31834, see the bug report for a testcase which is
9446         miscompiled.
9447
9448 2002-10-10  Martin Baulig  <martin@gnome.org>
9449
9450         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
9451         flow analysis code for this.
9452
9453         * statement.cs (Do, While, For): Tell the flow analysis code about
9454         infinite loops.
9455         (FlowBranching.UsageVector): Added support for infinite loops.
9456         (Block.Resolve): Moved the dead code elimination here and use flow
9457         analysis to do it.
9458
9459 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
9460
9461         * class.cs (Field.Define): Catch cycles on struct type
9462         definitions. 
9463
9464         * typemanager.cs (IsUnmanagedtype): Do not recursively check
9465         fields if the fields are static.  We only need to check instance
9466         fields. 
9467
9468         * expression.cs (As.DoResolve): Test for reference type.
9469
9470         * statement.cs (Using.ResolveExpression): Use
9471         ConvertImplicitRequired, not ConvertImplicit which reports an
9472         error on failture
9473         (Using.ResolveLocalVariableDecls): ditto.
9474
9475         * expression.cs (Binary.ResolveOperator): Report errors in a few
9476         places where we had to.
9477
9478         * typemanager.cs (IsUnmanagedtype): Finish implementation.
9479
9480 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
9481
9482         * expression.cs: Use StoreFromPtr instead of extracting the type
9483         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
9484
9485         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
9486         an enumeration value to a System.Enum, but System.Enum is not a
9487         value type, but an class type, so we need to box.
9488
9489         (Expression.ConvertExplicit): One codepath could return
9490         errors but not flag them.  Fix this.  Fixes #31853
9491
9492         * parameter.cs (Resolve): Do not allow void as a parameter type.
9493
9494 2002-10-06  Martin Baulig  <martin@gnome.org>
9495
9496         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
9497         if it's a class type and not a struct.  Fixes #31815.
9498
9499 2002-10-06  Martin Baulig  <martin@gnome.org>
9500
9501         * statement.cs: Reworked the flow analysis code a bit to make it
9502         usable for dead code elimination.
9503
9504 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9505
9506         * cs-parser.jay: allow empty source files. Fixes bug #31781.
9507
9508 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
9509
9510         * expression.cs (ComposedCast.DoResolveType): A quick workaround
9511         to fix the test 165, will investigate deeper.
9512
9513 2002-10-04  Martin Baulig  <martin@gnome.org>
9514
9515         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
9516         finally blocks actually work.
9517         (Try.Resolve): We don't need to create a sibling for `finally' if
9518         there is no finally block.
9519
9520 2002-10-04  Martin Baulig  <martin@gnome.org>
9521
9522         * class.cs (Constructor.Define): The default accessibility for a
9523         non-default constructor is private, not public.
9524
9525 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
9526
9527         * class.cs (Constructor): Make AllowedModifiers public, add
9528         EXTERN.
9529
9530         * cs-parser.jay: Perform the modifiers test here, as the
9531         constructor for the Constructor class usually receives a zero
9532         because of the way we create it (first we create, later we
9533         customize, and we were never checking the modifiers).
9534
9535         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
9536         is a version of LookupTypeReflection that includes the type-name
9537         cache.  This can be used as a fast path for functions that know
9538         the fully qualified name and are only calling into *.GetType() to
9539         obtain a composed type.
9540
9541         This is also used by TypeManager.LookupType during its type
9542         composition.
9543
9544         (LookupType): We now also track the real type name, as sometimes
9545         we can get a quey for the real type name from things like
9546         ComposedCast.  This fixes bug 31422.
9547
9548         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
9549         complete type fullname, it does not have to go through the type
9550         resolution system to obtain the composed version of the type (for
9551         obtaining arrays or pointers).
9552
9553         (Conditional.Emit): Use the EmitBoolExpression to
9554         generate nicer code, as requested by Paolo.
9555
9556         (ArrayCreation.CheckIndices): Use the patch from
9557         hwang_rob@yahoo.ca to validate the array initializers. 
9558
9559 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
9560
9561         * class.cs (ConstructorInitializer.Emit): simplify code by using
9562         Invocation.EmitCall, and at the same time, fix the bugs in calling
9563         parent constructors that took variable arguments. 
9564
9565         * ecore.cs (Expression.ConvertNumericExplicit,
9566         Expression.ImplicitNumericConversion): Remove the code that
9567         manually wrapped decimal (InternalTypeConstructor call is now gone
9568         as well).
9569
9570         * expression.cs (Cast.TryReduce): Also handle decimal types when
9571         trying to perform a constant fold on the type.
9572
9573         * typemanager.cs (IsUnmanagedtype): Partially implemented.
9574
9575         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
9576         that only turned off an error report, and did nothing else. 
9577
9578 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
9579
9580         * driver.cs: Handle and ignore /fullpaths
9581
9582 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
9583
9584         * expression.cs (Binary.ResolveOperator): Catch the case where
9585         DoNumericPromotions returns true, 
9586
9587         (Binary.DoNumericPromotions): Simplify the code, and the tests.
9588
9589 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
9590
9591         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
9592         report error 70.
9593
9594 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
9595
9596         * ecore.cs (ConvertNumericExplicit): It is not enough that the
9597         conversion exists, but it is also required that the conversion be
9598         performed.  This manifested in "(Type64Enum) 2".  
9599
9600         * class.cs (TypeManager.AddMethod): The fix is not to change
9601         AddEnum, because that one was using a fully qualified name (every
9602         DeclSpace derivative does), but to change the AddMethod routine
9603         that was using an un-namespaced name.  This now correctly reports
9604         the duplicated name.
9605
9606         Revert patch until I can properly fix it.  The issue
9607         is that we have a shared Type space across all namespaces
9608         currently, which is wrong.
9609
9610         Options include making the Namespace a DeclSpace, and merge
9611         current_namespace/current_container in the parser.
9612
9613 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
9614
9615         * cs-parser.jay: Improve error reporting when we get a different
9616         kind of expression in local_variable_type and
9617         local_variable_pointer_type. 
9618
9619         Propagate this to avoid missleading errors being reported.
9620
9621         * ecore.cs (ImplicitReferenceConversion): treat
9622         TypeManager.value_type as a target just like object_type.   As
9623         code like this:
9624
9625         ValueType v = 1;
9626
9627         Is valid, and needs to result in the int 1 being boxed before it
9628         is assigned to the value type v.
9629
9630         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
9631         to validate the enumeration name.
9632
9633         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
9634         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
9635         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
9636
9637         * ecore.cs (TryImplicitIntConversion): When doing an
9638         implicit-enumeration-conversion, check if the type is 64-bits and
9639         perform a conversion before passing to EnumConstant.
9640
9641 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
9642
9643         * decl.cs (Error_AmbiguousTypeReference); New routine used to
9644         report ambiguous type references.  Unlike the MS version, we
9645         report what the ambiguity is.   Innovation at work ;-)
9646
9647         (DeclSpace.FindType): Require a location argument to
9648         display when we display an ambiguous error.
9649
9650         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
9651
9652         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
9653
9654         * expression.cs (EmitDynamicInitializers): Apply patch from
9655         hwang_rob@yahoo.ca that fixes the order in which we emit our
9656         initializers. 
9657
9658 2002-09-21  Martin Baulig  <martin@gnome.org>
9659
9660         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
9661         delegate takes no arguments.
9662
9663 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
9664
9665         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
9666         from integers.
9667
9668         * expression.cs: Extract the underlying type.
9669
9670         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
9671
9672         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
9673
9674 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
9675
9676         * class.cs (TypeContainer.DefineType): We can not use the nice
9677         PackingSize with the size set to 1 DefineType method, because it
9678         will not allow us to define the interfaces that the struct
9679         implements.
9680
9681         This completes the fixing of bug 27287
9682
9683         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
9684         means also structs.  This fixes part of the problem. 
9685         (Expresion.ImplicitReferenceConversionExists): ditto.
9686
9687         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
9688         error if there were no errors reported during the type lookup
9689         process, to avoid duplicates or redundant errors.  Without this
9690         you would get an ambiguous errors plus a type not found.  We have
9691         beaten the user enough with the first error.  
9692
9693         (DeclSparce.FindType): Emit a warning if we have an ambiguous
9694         reference. 
9695
9696         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
9697         during the resolution process, stop the lookup, this avoids
9698         repeated error reports (same error twice).
9699
9700         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
9701
9702         * typemanager.cs (LookupType): Redo the type lookup code to match
9703         the needs of System.Reflection.  
9704
9705         The issue is that System.Reflection requires references to nested
9706         types to begin with a "+" sign instead of a dot.  So toplevel
9707         types look like: "NameSpace.TopLevelClass", and nested ones look
9708         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
9709         levels. 
9710
9711 2002-09-19  Martin Baulig  <martin@gnome.org>
9712
9713         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
9714         says that a method always returns or always throws an exception,
9715         don't report the CS0161.
9716
9717         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
9718         set `Returns = new_returns'.
9719
9720 2002-09-19  Martin Baulig  <martin@gnome.org>
9721
9722         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
9723         to an enum constant, check for a CS0176.
9724
9725 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
9726
9727         * class.cs (TypeContainer.CheckPairedOperators): Now we check
9728         for operators that must be in pairs and report errors.
9729
9730         * ecore.cs (SimpleName.DoResolveType): During the initial type
9731         resolution process, when we define types recursively, we must
9732         check first for types in our current scope before we perform
9733         lookups in the enclosing scopes.
9734
9735         * expression.cs (MakeByteBlob): Handle Decimal blobs.
9736
9737         (Invocation.VerifyArgumentsCompat): Call
9738         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
9739         I thought we were supposed to always call this, but there are a
9740         few places in the code where we dont do it.
9741
9742 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
9743
9744         * driver.cs: Add support in -linkres and -resource to specify the
9745         name of the identifier.
9746
9747 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
9748
9749         * ecore.cs (StandardConversionExists): Sync with the conversion
9750         code: allow anything-* to void* conversions.
9751
9752         (FindMostSpecificSource): Use an Expression argument
9753         instead of a Type, because we might be handed over a Literal which
9754         gets a few more implicit conversions that plain types do not.  So
9755         this information was being lost.
9756
9757         Also, we drop the temporary type-holder expression when not
9758         required.
9759
9760 2002-09-17  Martin Baulig  <martin@gnome.org>
9761
9762         * class.cs (PropertyBase.CheckBase): Don't check the base class if
9763         this is an explicit interface implementation.
9764
9765 2002-09-17  Martin Baulig  <martin@gnome.org>
9766
9767         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
9768         different `IndexerName' attributes.
9769
9770         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
9771         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
9772         virtual CommonResolve().
9773
9774 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
9775
9776         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
9777         and convert that to the UnderlyingType.
9778
9779         * statement.cs (Foreach.Resolve): Indexers are just like variables
9780         or PropertyAccesses.
9781
9782         * cs-tokenizer.cs (consume_string): Track line numbers and columns
9783         inside quoted strings, we were not doing this before.
9784
9785 2002-09-16  Martin Baulig  <martin@gnome.org>
9786
9787         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
9788         resolve it.  This is needed for the definite assignment check of the
9789         instance expression, fixes bug #29846.
9790         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
9791
9792 2002-09-16  Nick Drochak  <ndrochak@gol.com>
9793
9794         * parameter.cs: Fix compile error.  Cannot reference static member
9795         from an instance object.  Is this an mcs bug?
9796
9797 2002-09-14  Martin Baulig  <martin@gnome.org>
9798
9799         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
9800         multiple times.  Fixes bug #30295, added test-166.cs.
9801
9802 2002-09-14  Martin Baulig  <martin@gnome.org>
9803
9804         * statement.cs (Block.Emit): Don't emit unreachable code.
9805         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
9806         `break' statements.
9807         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
9808
9809 2002-09-14  Martin Baulig  <martin@gnome.org>
9810
9811         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
9812         is set.
9813
9814 2002-09-14  Martin Baulig  <martin@gnome.org>
9815
9816         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
9817         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
9818         be false on the ms runtime.
9819
9820 2002-09-13  Martin Baulig  <martin@gnome.org>
9821
9822         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
9823         the CS0038 error message.
9824
9825 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
9826
9827         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
9828         constant inside, return it.
9829
9830 2002-09-12  Martin Baulig  <martin@gnome.org>
9831
9832         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
9833         implicit conversion can be done between enum types.
9834
9835         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
9836         check whether an implicit conversion to the current enum's UnderlyingType
9837         exists and report an error if not.
9838
9839         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
9840         without debugging support.
9841
9842         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
9843         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
9844
9845 2002-09-12  Martin Baulig  <martin@gnome.org>
9846
9847         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
9848
9849         * ecore.cs (IMemberExpr.DeclaringType): New property.
9850         (SimpleName.SimpleNameResolve): Check whether we're accessing a
9851         nonstatic member of an outer type (CS0038).
9852
9853 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
9854
9855         * driver.cs: Activate the using-error detector at warning level
9856         4 (at least for MS-compatible APIs).
9857
9858         * namespace.cs (VerifyUsing): Small buglett fix.
9859
9860         * pending.cs (PendingImplementation): pass the container pointer. 
9861
9862         * interface.cs (GetMethods): Allow for recursive definition.  Long
9863         term, I would like to move every type to support recursive
9864         definitions, not the current ordering mechanism that we have right
9865         now.
9866
9867         The situation is this: Attributes are handled before interfaces,
9868         so we can apply attributes to interfaces.  But some attributes
9869         implement interfaces, we will now handle the simple cases
9870         (recursive definitions will just get an error).  
9871
9872         * parameter.cs: Only invalidate types at the end if we fail to
9873         lookup all types.  
9874
9875 2002-09-09  Martin Baulig  <martin@gnome.org>
9876
9877         * ecore.cs (PropertyExpr.Emit): Also check for
9878         TypeManager.system_int_array_get_length so this'll also work when
9879         compiling corlib.  Fixes #30003.
9880
9881 2002-09-09  Martin Baulig  <martin@gnome.org>
9882
9883         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
9884         and throw an exception if we can't get the type's size.  Fixed #30040,
9885         added test-165.cs.
9886
9887 2002-09-09  Martin Baulig  <martin@gnome.org>
9888
9889         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
9890
9891         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
9892         context.  Fixes bug #30027.
9893
9894         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
9895         virtual functions.  Fixes bug #30043, added test-164.cs.
9896
9897 2002-09-08  Ravi Pratap  <ravi@ximian.com>
9898
9899         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
9900
9901 2002-09-08  Nick Drochak  <ndrochak@gol.com>
9902
9903         * driver.cs: Use an object to get the windows codepage since it's not a
9904         static property.
9905
9906 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
9907
9908         * statement.cs (For.Emit): for infinite loops (test == null)
9909         return whether there is a break inside, not always "true".
9910
9911         * namespace.cs (UsingEntry): New struct to hold the name of the
9912         using definition, the location where it is defined, and whether it
9913         has been used in a successful type lookup.
9914
9915         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
9916         strings.
9917
9918         * decl.cs: ditto.
9919
9920 2002-09-06  Ravi Pratap  <ravi@ximian.com>
9921
9922         * attribute.cs : Fix incorrect code which relied on catching
9923         a NullReferenceException to detect a null being passed in
9924         where an object was expected.
9925
9926 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
9927
9928         * statement.cs (Try): flag the catch variable as assigned
9929
9930         * expression.cs (Cast): Simplified by using ResolveType instead of
9931         manually resolving.
9932
9933         * statement.cs (Catch): Fix bug by using ResolveType.
9934
9935 2002-09-06  Ravi Pratap  <ravi@ximian.com>
9936
9937         * expression.cs (BetterConversion): Special case for when we have
9938         a NullLiteral as the argument and we have to choose between string
9939         and object types - we choose string the way csc does.
9940
9941         * attribute.cs (Attribute.Resolve): Catch the
9942         NullReferenceException and report error #182 since the Mono
9943         runtime no more has the bug and having this exception raised means
9944         we tried to select a constructor which takes an object and is
9945         passed a null.
9946
9947 2002-09-05  Ravi Pratap  <ravi@ximian.com>
9948
9949         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
9950         message (1502, 1503) when we can't locate a method after overload
9951         resolution. This is much more informative and closes the bug
9952         Miguel reported.
9953
9954         * interface.cs (PopulateMethod): Return if there are no argument
9955         types. Fixes a NullReferenceException bug.
9956
9957         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
9958         expressions too. Previously we were checking only in one place for
9959         positional arguments leaving out named arguments.
9960
9961         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
9962         type to the enum type is not allowed. Remove code corresponding to
9963         that.
9964
9965         (ConvertNumericExplicit): Allow explicit conversions from
9966         the underlying type to enum type. This precisely follows the spec
9967         and closes a bug filed by Gonzalo.
9968
9969 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9970
9971         * compiler.csproj:
9972         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
9973
9974 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
9975
9976         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
9977         it was important that we stored the right value after the
9978         reduction in `converted'.
9979
9980 2002-09-04  Martin Baulig  <martin@gnome.org>
9981
9982         * location.cs (Location.SymbolDocument): Use full pathnames for the
9983         source files.
9984
9985 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
9986
9987         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
9988         of the expression resolve mechanism, because that will catch the
9989         SimpleName error failures.
9990
9991         (Conditional): If we can not resolve the
9992         expression, return, do not crash.
9993
9994 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9995
9996         * cs-tokenizer.cs:
9997         (location): display token name instead of its number.
9998
9999 2002-08-28  Martin Baulig  <martin@gnome.org>
10000
10001         * expression.cs (Binary.ResolveOperator): Don't silently return
10002         but return an error if an operator cannot be applied between two
10003         enum types.
10004
10005 2002-08-28  Martin Baulig  <martin@gnome.org>
10006
10007         * class.cs (Constructor.Define): Set the permission attributes
10008         correctly instead of making all constructors public.
10009
10010 2002-08-28  Martin Baulig  <martin@gnome.org>
10011
10012         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
10013         for private members before reporting a CS0103; if we find anything,
10014         it's a CS0122.
10015
10016 2002-08-28  Martin Baulig  <martin@gnome.org>
10017
10018         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
10019         to check whether `closure_start_type == closure_invocation_type',
10020         we also need to check whether `m.DeclaringType == closure_invocation_type'
10021         before bypassing the permission checks.  We might be accessing
10022         protected/private members from the base class.
10023         (TypeManager.RealMemberLookup): Only set private_ok if private
10024         members were requested via BindingFlags.NonPublic.
10025
10026         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
10027
10028         * expression.cs (MemberAccess.ResolveMemberAccess): Set
10029         MethodGroupExpr.IsExplicitImpl if appropriate.
10030         (Invocation.DoResolve): Don't report the CS0120 for explicit
10031         interface implementations.
10032
10033 2002-08-27  Martin Baulig  <martin@gnome.org>
10034
10035         * expression.cs (Invocation.DoResolve): If this is a static
10036         method and we don't have an InstanceExpression, we must report
10037         a CS0120.
10038
10039 2002-08-25  Martin Baulig  <martin@gnome.org>
10040
10041         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
10042         `==' between a valuetype and an object.
10043
10044 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
10045
10046         * ecore.cs (TypeExpr): Provide a ToString method.
10047
10048 2002-08-24  Martin Baulig  <martin@gnome.org>
10049
10050         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
10051         now called proggie.dbg and it's a binary file.
10052
10053 2002-08-23  Martin Baulig  <martin@gnome.org>
10054
10055         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
10056
10057 2002-08-23  Martin Baulig  <martin@gnome.org>
10058
10059         * struct.cs (MyStructInfo.ctor): Make this work with empty
10060         structs; it's not allowed to use foreach() on null.
10061
10062 2002-08-23  Martin Baulig  <martin@gnome.org>
10063
10064         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
10065         writer the full pathname of the generated assembly.
10066
10067 2002-08-23  Martin Baulig  <martin@gnome.org>
10068
10069         * statements.cs (FlowBranching.UsageVector.MergeChildren):
10070         A `finally' block never returns or breaks; improved handling of
10071         unreachable code.
10072
10073 2002-08-23  Martin Baulig  <martin@gnome.org>
10074
10075         * statement.cs (Throw.Resolve): Allow `throw null'.
10076
10077 2002-08-23  Martin Baulig  <martin@gnome.org>
10078
10079         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
10080         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
10081         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
10082         MemberLookup would return a wrong event if this is an explicit
10083         interface implementation and the class has an event with the same
10084         name.
10085
10086 2002-08-23  Martin Baulig  <martin@gnome.org>
10087
10088         * statement.cs (Block.AddChildVariableNames): New public method.
10089         (Block.AddChildVariableName): Likewise.
10090         (Block.IsVariableNameUsedInChildBlock): Likewise.
10091         (Block.AddVariable): Check whether a variable name has already
10092         been used in a child block.
10093
10094         * cs-parser.jay (declare_local_variables): Mark all variable names
10095         from the current block as being used in a child block in the
10096         implicit block.
10097
10098 2002-08-23  Martin Baulig  <martin@gnome.org>
10099
10100         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
10101         find the symbol writer.
10102
10103         * driver.cs: csc also allows the arguments to /define being
10104         separated by commas, not only by semicolons.
10105
10106 2002-08-23  Martin Baulig  <martin@gnome.org>
10107
10108         * interface.cs (Interface.GetMembers): Added static check for events.
10109
10110 2002-08-15  Martin Baulig  <martin@gnome.org>
10111
10112         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
10113         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
10114
10115         * ecore.cs (Expression.MemberLookup): Added documentation and explained
10116         why the MethodData.EmitDestructor() change was necessary.
10117
10118 2002-08-20  Martin Baulig  <martin@gnome.org>
10119
10120         * class.cs (TypeContainer.FindMembers): Added static check for events.
10121
10122         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
10123
10124         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
10125         use Type.GetEvents(), not Type.FindMembers().
10126
10127 2002-08-20  Martin Baulig  <martin@gnome.org>
10128
10129         * decl.cs (MemberCache): Added a special method cache which will
10130         be used for method-only searched.  This ensures that a method
10131         search will return a MethodInfo with the correct ReflectedType for
10132         inherited methods.      
10133
10134 2002-08-20  Martin Baulig  <martin@gnome.org>
10135
10136         * decl.cs (DeclSpace.FindMembers): Made this public.
10137
10138 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10139
10140         * delegate.cs: fixed build on windows.
10141         [FIXME:  Filed as bug #29150: MCS must report these errors.]
10142
10143 2002-08-19  Ravi Pratap  <ravi@ximian.com>
10144
10145         * ecore.cs (StandardConversionExists): Return a false
10146         if we are trying to convert the void type to anything else
10147         since that is not allowed.
10148
10149         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
10150         we flag error 70 in the event an event is trying to be accessed
10151         directly from outside the declaring type.
10152
10153 2002-08-20  Martin Baulig  <martin@gnome.org>
10154
10155         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
10156         MemberCache from typemanager.cs to decl.cs.
10157
10158 2002-08-19  Martin Baulig  <martin@gnome.org>
10159
10160         * class.cs (TypeContainer): Implement IMemberContainer.
10161         (TypeContainer.DefineMembers): Create the MemberCache.
10162         (TypeContainer.FindMembers): Do better BindingFlags checking; only
10163         return public members if BindingFlags.Public was given, check
10164         whether members are static.
10165
10166 2002-08-16  Martin Baulig  <martin@gnome.org>
10167
10168         * decl.cs (DeclSpace.Define): Splitted this in Define and
10169         DefineMembers.  DefineMembers is called first and initializes the
10170         MemberCache.
10171
10172         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
10173         DefineMembers() on all our DeclSpaces.
10174
10175         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
10176         but call DefineMembers() on all nested interfaces.  We call their
10177         Define() in our new Define() function.
10178
10179         * interface.cs (Interface): Implement IMemberContainer.
10180         (Interface.Define): Moved all code except the attribute stuf to
10181         DefineMembers().
10182         (Interface.DefineMembers): Initialize the member cache.
10183
10184         * typemanager.cs (IMemberFinder): Removed this interface, we don't
10185         need this anymore since we can use MemberCache.FindMembers directly.
10186
10187 2002-08-19  Martin Baulig  <martin@gnome.org>
10188
10189         * typemanager.cs (MemberCache): When creating the cache for an
10190         interface type, add all inherited members.
10191         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
10192         to `out bool used_cache' and documented it.
10193         (TypeManager.MemberLookup): If we already used the cache in the first
10194         iteration, we don't need to do the interfaces check.
10195
10196 2002-08-19  Martin Baulig  <martin@gnome.org>
10197
10198         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
10199         here from IMemberFinder and don't implement this interface anymore.
10200         (DeclSpace.MemberCache): Moved here from IMemberFinder.
10201
10202         * typemanager.cs (IMemberFinder): This interface is now only used by
10203         classes which actually support the member cache.
10204         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
10205         since we only put DeclSpaces into this Hashtable.
10206         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
10207         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
10208
10209 2002-08-16  Martin Baulig  <martin@gnome.org>
10210
10211         * typemanager.cs (ICachingMemberFinder): Removed.
10212         (IMemberFinder.MemberCache): New property.
10213         (TypeManager.FindMembers): Merged this with RealFindMembers().
10214         This function will never be called from TypeManager.MemberLookup()
10215         so we can't use the cache here, just the IMemberFinder.
10216         (TypeManager.MemberLookup_FindMembers): Check whether the
10217         IMemberFinder has a MemberCache and call the cache's FindMembers
10218         function.
10219         (MemberCache): Rewrote larger parts of this yet another time and
10220         cleaned it up a bit.
10221
10222 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
10223
10224         * driver.cs (LoadArgs): Support quoting.
10225
10226         (Usage): Show the CSC-like command line arguments.
10227
10228         Improved a few error messages.
10229
10230 2002-08-15  Martin Baulig  <martin@gnome.org>
10231
10232         * typemanager.cs (IMemberContainer.Type): New property.
10233         (IMemberContainer.IsInterface): New property.
10234
10235         The following changes are conditional to BROKEN_RUNTIME, which is
10236         defined at the top of the file.
10237
10238         * typemanager.cs (MemberCache.MemberCache): Don't add the base
10239         class'es members, but add all members from TypeHandle.ObjectType
10240         if we're an interface.
10241         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
10242         is the current type.
10243         (MemberCache.CacheEntry.Container): Removed this field.
10244         (TypeHandle.GetMembers): Include inherited members.
10245
10246 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10247
10248         * typemanager.cs: fixed compilation and added a comment on a field that
10249         is never used.
10250
10251 2002-08-15  Martin Baulig  <martin@gnome.org>
10252
10253         * class.cs (ConstructorInitializer.Resolve): In the
10254         Expression.MemberLookup call, use the queried_type as
10255         invocation_type.
10256
10257         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
10258         declared' attribute, it's always true.
10259         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
10260         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
10261         temporary wrapper for FindMembers which tells MemberLookup whether
10262         members from the base classes are included in the return value.
10263         This will go away soon.
10264         (TypeManager.MemberLookup): Use this temporary hack here; once the
10265         new MemberCache is completed, we don't need to do the DeclaredOnly
10266         looping here anymore since the MemberCache will take care of this.
10267         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
10268         (MemberCache): When creating the MemberCache for a class, get
10269         members from the current class and all its base classes.
10270         (MemberCache.CacheEntry.Container): New field.  This is a
10271         temporary hack until the Mono runtime is fixed to distinguish
10272         between ReflectedType and DeclaringType.  It allows us to use MCS
10273         with both the MS runtime and the unfixed Mono runtime without
10274         problems and without accecting performance.
10275         (MemberCache.SearchMembers): The DeclaredOnly looping from
10276         TypeManager.MemberLookup is now done here.      
10277
10278 2002-08-14  Martin Baulig  <martin@gnome.org>
10279
10280         * statement.cs (MyStructInfo.MyStructInfo): Don't call
10281         Type.GetFields on dynamic types but get the fields from the
10282         corresponding TypeContainer.
10283         (MyStructInfo.GetStructInfo): Added check for enum types.
10284
10285         * typemanager.cs (MemberList.IsSynchronized): Implemented.
10286         (MemberList.SyncRoot): Implemented.
10287         (TypeManager.FilterWithClosure): No need to check permissions if
10288         closure_start_type == closure_invocation_type, don't crash if
10289         closure_invocation_type is null.
10290
10291 2002-08-13  Martin Baulig  <martin@gnome.org>
10292
10293         Rewrote TypeContainer.FindMembers to use a member cache.  This
10294         gives us a speed increase of about 35% for the self-hosting MCS
10295         build and of about 15-20% for the class libs (both on GNU/Linux).
10296
10297         * report.cs (Timer): New class to get enhanced profiling.  This
10298         whole class is "TIMER" conditional since it remarkably slows down
10299         compilation speed.
10300
10301         * class.cs (MemberList): New class.  This is an IList wrapper
10302         which we're now using instead of passing MemberInfo[]'s around to
10303         avoid copying this array unnecessarily.
10304         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
10305         (ICachingMemberFinder, IMemberContainer): New interface.
10306         (TypeManager.FilterWithClosure): If `criteria' is null, the name
10307         has already been checked, otherwise use it for the name comparision.
10308         (TypeManager.FindMembers): Renamed to RealMemberFinder and
10309         provided wrapper which tries to use ICachingMemberFinder.FindMembers
10310         if possible.  Returns a MemberList, not a MemberInfo [].
10311         (TypeHandle): New class, implements IMemberContainer.  We create
10312         one instance of this class per type, it contains a MemberCache
10313         which is used to do the member lookups.
10314         (MemberCache): New class.  Each instance of this class contains
10315         all members of a type and a name-based hash table.
10316         (MemberCache.FindMembers): This is our new member lookup
10317         function.  First, it looks up all members of the requested name in
10318         the hash table.  Then, it walks this list and sorts out all
10319         applicable members and returns them.
10320
10321 2002-08-13  Martin Baulig  <martin@gnome.org>
10322
10323         In addition to a nice code cleanup, this gives us a performance
10324         increase of about 1.4% on GNU/Linux - not much, but it's already
10325         half a second for the self-hosting MCS compilation.
10326
10327         * typemanager.cs (IMemberFinder): New interface.  It is used by
10328         TypeManager.FindMembers to call FindMembers on a TypeContainer,
10329         Enum, Delegate or Interface.
10330         (TypeManager.finder_to_member_finder): New PtrHashtable.
10331         (TypeManager.finder_to_container): Removed.
10332         (TypeManager.finder_to_delegate): Removed.
10333         (TypeManager.finder_to_interface): Removed.
10334         (TypeManager.finder_to_enum): Removed.
10335
10336         * interface.cs (Interface): Implement IMemberFinder.
10337
10338         * delegate.cs (Delegate): Implement IMemberFinder.
10339
10340         * enum.cs (Enum): Implement IMemberFinder.
10341
10342         * class.cs (TypeContainer): Implement IMemberFinder.
10343
10344 2002-08-12  Martin Baulig  <martin@gnome.org>
10345
10346         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
10347
10348 2002-08-12  Martin Baulig  <martin@gnome.org>
10349
10350         * ecore.cs (ITypeExpression): New interface for expressions which
10351         resolve to a type.
10352         (TypeExpression): Renamed to TypeLookupExpression.
10353         (Expression.DoResolve): If we're doing a types-only lookup, the
10354         expression must implement the ITypeExpression interface and we
10355         call DoResolveType() on it.
10356         (SimpleName): Implement the new ITypeExpression interface.
10357         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
10358         hack, the situation that we're only looking up types can't happen
10359         anymore when this method is called.  Moved the type lookup code to
10360         DoResolveType() and call it.
10361         (SimpleName.DoResolveType): This ITypeExpression interface method
10362         is now doing the types-only lookup.
10363         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
10364         (ResolveFlags): Added MaskExprClass.
10365
10366         * expression.cs (MemberAccess): Implement the ITypeExpression
10367         interface.
10368         (MemberAccess.DoResolve): Added support for a types-only lookup
10369         when we're called via ITypeExpression.DoResolveType().
10370         (ComposedCast): Implement the ITypeExpression interface.
10371
10372         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
10373         Expression.Resolve() with ResolveFlags.Type instead.
10374
10375 2002-08-12  Martin Baulig  <martin@gnome.org>
10376
10377         * interface.cs (Interface.Define): Apply attributes.
10378
10379         * attribute.cs (Attribute.ApplyAttributes): Added support for
10380         interface attributes.
10381
10382 2002-08-11  Martin Baulig  <martin@gnome.org>
10383
10384         * statement.cs (Block.Emit): Only check the "this" variable if we
10385         do not always throw an exception.
10386
10387         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
10388         whether the property has a set accessor.
10389
10390 2002-08-11  Martin Baulig  <martin@gnome.org>
10391
10392         Added control flow analysis support for structs.
10393
10394         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
10395         with control flow analysis turned off.
10396         (IVariable): New interface.
10397         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
10398         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
10399         (FieldExpr.DoResolve): Resolve the instance expression with flow
10400         analysis turned off and do the definite assignment check after the
10401         resolving when we know what the expression will resolve to.
10402
10403         * expression.cs (LocalVariableReference, ParameterReference):
10404         Implement the new IVariable interface, only call the flow analysis
10405         code if ec.DoFlowAnalysis is true.
10406         (This): Added constructor which takes a Block argument.  Implement
10407         the new IVariable interface.
10408         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
10409         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
10410         This does the definite assignment checks for struct members.
10411
10412         * class.cs (Constructor.Emit): If this is a non-static `struct'
10413         constructor which doesn't have any initializer, call
10414         Block.AddThisVariable() to tell the flow analysis code that all
10415         struct elements must be initialized before control returns from
10416         the constructor.
10417
10418         * statement.cs (MyStructInfo): New public class.
10419         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
10420         argument to this indexer.  If non-zero, check an individual struct
10421         member, not the whole struct.
10422         (FlowBranching.CheckOutParameters): Check struct members.
10423         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
10424         overloaded versions of these methods which take an additional
10425         `int field_idx' argument to check struct members.
10426         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
10427         overloaded versions of these methods which take an additional
10428         `string field_name' argument to check struct member.s
10429         (VariableInfo): Implement the IVariable interface.
10430         (VariableInfo.StructInfo): New public property.  Returns the
10431         MyStructInfo instance of the variable if it's a struct or null.
10432         (Block.AddThisVariable): New public method.  This is called from
10433         Constructor.Emit() for non-static `struct' constructor which do
10434         not have any initializer.  It creates a special variable for the
10435         "this" instance variable which will be checked by the flow
10436         analysis code to ensure that all of the struct's fields are
10437         initialized before control returns from the constructor.
10438         (UsageVector): Added support for struct members.  If a
10439         variable/parameter is a struct with N members, we reserve a slot
10440         in the usage vector for each member.  A struct is considered fully
10441         initialized if either the struct itself (slot 0) or all its
10442         members are initialized.
10443
10444 2002-08-08  Martin Baulig  <martin@gnome.org>
10445
10446         * driver.cs (Driver.MainDriver): Only report an error CS5001
10447         if there were no compilation errors.
10448
10449         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
10450         `UnsafeContext' property to determine whether the parent is in
10451         unsafe context rather than checking the parent's ModFlags:
10452         classes nested in an unsafe class are unsafe as well.
10453
10454 2002-08-08  Martin Baulig  <martin@gnome.org>
10455
10456         * statement.cs (UsageVector.MergeChildren): Distinguish between
10457         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
10458         we return.  Added test17() and test18() to test-154.cs.
10459
10460 2002-08-08  Martin Baulig  <martin@gnome.org>
10461
10462         * typemanager.cs (TypeManager.FilterWithClosure): If we have
10463         Family access, make sure the invoking type isn't a subclass of the
10464         queried type (that'd be a CS1540).
10465
10466         * ecore.cs (Expression.MemberLookup): Added overloaded version of
10467         this method which takes an additional `Type invocation_type'.
10468
10469         * expression.cs (BaseAccess.DoResolve): Use the base type as
10470         invocation and query type.
10471         (MemberAccess.DoResolve): If the lookup failed and we're about to
10472         report a CS0122, try a lookup with the ec.ContainerType - if this
10473         succeeds, we must report a CS1540.
10474
10475 2002-08-08  Martin Baulig  <martin@gnome.org>
10476
10477         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
10478         (MethodGroupExpr): Implement the IMemberExpr interface.
10479
10480         * expression (MemberAccess.ResolveMemberAccess): No need to have
10481         any special code for MethodGroupExprs anymore, they're now
10482         IMemberExprs.   
10483
10484 2002-08-08  Martin Baulig  <martin@gnome.org>
10485
10486         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
10487         Family, FamANDAssem and FamORAssem permissions.
10488         (TypeManager.IsSubclassOrNestedChildOf): New public method.
10489
10490 2002-08-08  Martin Baulig  <martin@gnome.org>
10491
10492         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
10493         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
10494         or loop block.
10495
10496 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
10497
10498         * driver.cs: implemented /resource option to embed managed resources.
10499
10500 2002-08-07  Martin Baulig  <martin@gnome.org>
10501
10502         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
10503         (FieldBase.HasFieldInitializer): New public property.
10504         (FieldBase.GetInitializerExpression): New public method.  Resolves and
10505         returns the field initializer and makes sure it is only resolved once.
10506         (TypeContainer.EmitFieldInitializers): Call
10507         FieldBase.GetInitializerExpression to get the initializer, this ensures
10508         that it isn't resolved multiple times.
10509
10510         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
10511         the resolving process (SimpleName/MemberLookup) that we're currently
10512         emitting a field initializer (which must not access any instance members,
10513         this is an error CS0236).
10514
10515         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
10516         argument, if the `IsFieldInitializer' flag is set, we must report and
10517         error CS0236 and not an error CS0120.   
10518
10519 2002-08-07  Martin Baulig  <martin@gnome.org>
10520
10521         * ecore.cs (IMemberExpr): New public interface.
10522         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
10523         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
10524         if the expression is an IMemberExpr.
10525
10526         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
10527         to be null, implicitly default to `this' if we're non-static in
10528         this case.  Simplified the code a lot by using the new IMemberExpr
10529         interface.  Also fixed bug #28176 here.
10530
10531 2002-08-06  Martin Baulig  <martin@gnome.org>
10532
10533         * cs-parser.jay (SimpleLookup): Removed.  We need to create
10534         ParameterReferences during semantic analysis so that we can do a
10535         type-only search when resolving Cast, TypeOf and SizeOf.
10536         (block): Pass the `current_local_parameters' to the Block's
10537         constructor.
10538
10539         * class.cs (ConstructorInitializer): Added `Parameters parameters'
10540         argument to the constructor.
10541         (ConstructorInitializer.Resolve): Create a temporary implicit
10542         block with the parameters.
10543
10544         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
10545         references here if we aren't doing a type-only search.
10546
10547         * statement.cs (Block): Added constructor which takes a
10548         `Parameters parameters' argument.
10549         (Block.Parameters): New public property.
10550
10551         * support.cs (InternalParameters.Parameters): Renamed `parameters'
10552         to `Parameters' and made it public readonly.
10553
10554 2002-08-06  Martin Baulig  <martin@gnome.org>
10555
10556         * ecore.cs (Expression.Warning): Made this public as well.
10557
10558         * report.cs (Report.Debug): Print the contents of collections.
10559
10560 2002-08-06  Martin Baulig  <martin@gnome.org>
10561
10562         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
10563         used to tell Resolve() which kinds of expressions it may return.
10564         (Expression.Resolve): Added overloaded version of this method which
10565         takes a `ResolveFlags flags' argument.  This can be used to tell
10566         Resolve() which kinds of expressions it may return.  Reports a
10567         CS0118 on error.
10568         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
10569         ResolveFlags.SimpleName.
10570         (Expression.Error118): Added overloaded version of this method which
10571         takes a `ResolveFlags flags' argument.  It uses the flags to determine
10572         which kinds of expressions are allowed.
10573
10574         * expression.cs (Argument.ResolveMethodGroup): New public method.
10575         Resolves an argument, but allows a MethodGroup to be returned.
10576         This is used when invoking a delegate.
10577
10578         * TODO: Updated a bit.
10579
10580 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10581
10582         Fixed compilation with csc.
10583
10584         * ecore.cs: Expression.Error made public. Is this correct? Should
10585         Warning be made public too?
10586
10587         * expression.cs: use ea.Location instead of ea.loc.
10588         [FIXME:  Filed as bug #28607: MCS must report these errors.]
10589
10590 2002-08-06  Martin Baulig  <martin@gnome.org>
10591
10592         * ecore.cs (Expression.loc): Moved the location here instead of
10593         duplicating it in all derived classes.
10594         (Expression.Location): New public property.
10595         (Expression.Error, Expression.Warning): Made them non-static and
10596         removed the location argument.
10597         (Expression.Warning): Added overloaded version which takes an
10598         `int level' argument.
10599         (Expression.Error118): Make this non-static and removed the
10600         expression and location arguments.
10601         (TypeExpr): Added location argument to the constructor.
10602
10603         * expression.cs (StaticCallExpr): Added location argument to
10604         the constructor.
10605         (Indirection, PointerArithmetic): Likewise.
10606         (CheckedExpr, UnCheckedExpr): Likewise.
10607         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
10608         (StringPtr): Likewise.
10609
10610
10611 2002-08-05  Martin Baulig  <martin@gnome.org>
10612
10613         * expression.cs (BaseAccess.DoResolve): Actually report errors.
10614
10615         * assign.cs (Assign.DoResolve): Check whether the source
10616         expression is a value or variable.
10617
10618         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
10619         while resolving the corresponding blocks.
10620
10621         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
10622         an error, don't silently return null.
10623
10624         * statement.cs (Block.AddVariable): Do the error reporting here
10625         and distinguish between CS0128 and CS0136.
10626         (Block.DoResolve): Report all unused labels (warning CS0164).
10627         (LabeledStatement): Pass the location to the constructor.
10628         (LabeledStatement.HasBeenReferenced): New property.
10629         (LabeledStatement.Resolve): Set it to true here.
10630
10631         * statement.cs (Return.Emit): Return success even after reporting
10632         a type mismatch error (CS0126 or CS0127), this is what csc does and
10633         it avoids confusing the users with any consecutive errors.
10634
10635 2002-08-05  Martin Baulig  <martin@gnome.org>
10636
10637         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
10638
10639         * const.cs (Const.LookupConstantValue): Catch circular definitions.
10640
10641         * expression.cs (MemberAccess.DoResolve): Silently return if an
10642         error has already been reported.
10643
10644         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
10645         error has already been reported.
10646
10647 2002-08-05  Martin Baulig  <martin@gnome.org>
10648
10649         * statement.cs (UsageVector): Only initialize the `parameters'
10650         vector if we actually have any "out" parameters.
10651
10652 2002-08-05  Martin Baulig  <martin@gnome.org>
10653
10654         * expression.cs (Binary.ResolveOperator): When combining delegates,
10655         they must have the same type.
10656
10657 2002-08-05  Martin Baulig  <martin@gnome.org>
10658
10659         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
10660         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
10661         work with the ms runtime and we also don't need it: if we're a
10662         PropertyBuilder and not in the `indexer_arguments' hash, then we
10663         are a property and not an indexer.
10664
10665         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
10666         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
10667         since the latter one doesn't work with the ms runtime.
10668
10669 2002-08-03  Martin Baulig  <martin@gnome.org>
10670
10671         Fixed bugs #27998 and #22735.
10672
10673         * class.cs (Method.IsOperator): New public field.
10674         (Method.CheckBase): Report CS0111 if there's already a method
10675         with the same parameters in the current class.  Report CS0508 when
10676         attempting to change the return type of an inherited method.
10677         (MethodData.Emit): Report CS0179 if a method doesn't have a body
10678         and it's not marked abstract or extern.
10679         (PropertyBase): New abstract base class for Property and Indexer.
10680         (PropertyBase.CheckBase): Moved here from Property and made it work
10681         for indexers.
10682         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
10683         the same so we can reuse it there.
10684         (Property, Indexer): Derive from PropertyBase.
10685         (MethodSignature.inheritable_property_signature_filter): New delegate
10686         to find properties and indexers.
10687
10688         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
10689         argument and improved error reporting.
10690
10691         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
10692         EmptyReadOnlyParameters and made it a property.
10693
10694         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
10695         version of this method which takes a `PropertyInfo indexer'.
10696         (TypeManager.RegisterIndexer): New method.
10697
10698         * class.cs: Added myself as author of this file :-)
10699
10700 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10701
10702         * class.cs: fixed compilation on windoze.
10703
10704 2002-08-03  Martin Baulig  <martin@gnome.org>
10705
10706         * interface.cs (Interface.GetInterfaceBases): Check whether all
10707         base interfaces are at least as accessible than the current one.
10708
10709         * class.cs (TypeContainer.GetClassBases): Check whether base types
10710         are at least as accessible than the current type.
10711         (TypeContainer.AsAccessible): Implemented and made non-static.
10712         (MemberBase.CheckParameters): Report errors if the accessibility
10713         checks fail.
10714
10715         * delegate.cs (Delegate.Delegate): The default visibility is
10716         internal for top-level types and private for nested types.
10717         (Delegate.Define): Report errors if the accessibility checks fail.
10718
10719         * enum.cs (Enum.Enum): The default visibility is internal for
10720         top-level types and private for nested types.
10721         (Enum.DefineType): Compute the correct visibility.
10722
10723         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
10724         function which takes a `bool is_toplevel' instead of a TypeContainer.
10725
10726         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
10727         builtin type.
10728
10729 2002-08-02  Martin Baulig  <martin@gnome.org>
10730
10731         * expression.cs (LocalVariableReferenc): Added constructor which
10732         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
10733         (LocalVariableReference.IsReadOnly): New property.
10734         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
10735         variable is readonly, use our own readonly flag to do this; you can
10736         use the new constructor to get a writable reference to a read-only
10737         variable.
10738
10739         * cs-parser.jay (foreach_statement, using_statement): Get a writable
10740         reference to the local variable.
10741
10742 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
10743
10744         * rootcontext.cs (ResolveCore): Also include System.Exception
10745
10746         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
10747         we reach an EmptyStatement.
10748
10749         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
10750         is also fine.
10751
10752         * expression.cs (Binary.ResolveOperator): Check error result in
10753         two places.
10754
10755         use brtrue/brfalse directly and avoid compares to null.
10756
10757 2002-08-02  Martin Baulig  <martin@gnome.org>
10758
10759         * class.cs (TypeContainer.Define): Define all nested interfaces here.
10760         Fixes bug #28407, added test-155.cs.
10761
10762 2002-08-01  Martin Baulig  <martin@gnome.org>
10763
10764         * class.cs (Event.EmitDefaultMethod): Make this work with static
10765         events.  Fixes #28311, added verify-3.cs.
10766
10767 2002-08-01  Martin Baulig  <martin@gnome.org>
10768
10769         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
10770         `is_disposable' fields.
10771         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
10772         `hm.is_disposable' if we're using the collection pattern.
10773         (Foreach.EmitCollectionForeach): Use the correct type for the
10774         enumerator's local variable, only emit the try/finally block if
10775         necessary (fixes #27713).
10776
10777 2002-08-01  Martin Baulig  <martin@gnome.org>
10778
10779         * ecore.cs (Expression.report118): Renamed to Error118 and made
10780         it public static.
10781
10782         * statement.cs (Throw.Resolve): Check whether the expression is of
10783         the correct type (CS0118) and whether the type derives from
10784         System.Exception (CS0155).
10785         (Catch.Resolve): New method.  Do the type lookup here and check
10786         whether it derives from System.Exception (CS0155).
10787         (Catch.CatchType, Catch.IsGeneral): New public properties.
10788
10789         * typemanager.cs (TypeManager.exception_type): Added.
10790
10791 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
10792
10793         * driver.cs: Updated About function.
10794
10795 2002-07-31  Martin Baulig  <martin@gnome.org>
10796
10797         Implemented Control Flow Analysis.
10798
10799         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
10800         (EmitContext.CurrentBranching): Added.
10801         (EmitContext.StartFlowBranching): Added.
10802         (EmitContext.EndFlowBranching): Added.
10803         (EmitContext.KillFlowBranching): Added.
10804         (EmitContext.IsVariableAssigned): Added.
10805         (EmitContext.SetVariableAssigned): Added.
10806         (EmitContext.IsParameterAssigned): Added.
10807         (EmitContext.SetParameterAssigned): Added.
10808         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
10809         Added control flow analysis stuff here.
10810
10811         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
10812         resolve the expression as lvalue.
10813         (LocalVariableReference.DoResolve): Check whether the variable has
10814         already been assigned.
10815         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
10816         the parameter as assigned here.
10817         (ParameterReference.DoResolve): Check whether the parameter has already
10818         been assigned.
10819         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
10820         expression as lvalue.
10821
10822         * statement.cs (FlowBranching): New class for the flow analysis code.
10823         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
10824         (LabeledStatement.IsDefined): New public property.
10825         (LabeledStatement.AddUsageVector): New public method to tell flow
10826         analyis that the label may be reached via a forward jump.
10827         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
10828         flow analysis.
10829         (VariableInfo.Number): New public field.  This is used by flow analysis
10830         to number all locals of a block.
10831         (Block.CountVariables): New public property.  This is the number of
10832         local variables in this block (including the locals from all parent
10833         blocks).
10834         (Block.EmitMeta): Number all the variables.
10835
10836         * statement.cs: Added flow analysis support to all classes.
10837
10838 2002-07-31  Martin Baulig  <martin@gnome.org>
10839
10840         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
10841         To get debugging messages, compile mcs with /define:MCS_DEBUG and
10842         then use this argument.
10843
10844         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
10845
10846         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
10847         use this to specify /define options.
10848
10849 2002-07-29  Martin Baulig  <martin@gnome.org>
10850
10851         * statement.cs (Fixed): Moved all code that does variable lookups
10852         and resolvings from Emit to Resolve.
10853
10854         * statement.cs (For): Moved all code that does variable lookups
10855         and resolvings from Emit to Resolve.
10856
10857         * statement.cs (Using): Moved all code that does variable lookups
10858         and resolvings from Emit to Resolve.
10859
10860 2002-07-29  Martin Baulig  <martin@gnome.org>
10861
10862         * attribute.cs (Attribute.Resolve): Explicitly catch a
10863         System.NullReferenceException when creating the
10864         CustromAttributeBuilder and report a different warning message.
10865
10866 2002-07-29  Martin Baulig  <martin@gnome.org>
10867
10868         * support.cs (ParameterData.ParameterName): Added method to
10869         get the name of a parameter.
10870
10871         * typemanager.cs (TypeManager.IsValueType): New public method.
10872
10873 2002-07-29  Martin Baulig  <martin@gnome.org>
10874
10875         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
10876         is a flag which specifies that it's either ref or out.
10877         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
10878         the out parameter to `out Parameter.Modifier mod', also set the
10879         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
10880
10881         * support.cs (InternalParameters.ParameterModifier): Distinguish
10882         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
10883         Parameter.Modifier.ISBYREF flag if it's either ref or out.
10884
10885         * expression.cs (Argument.GetParameterModifier): Distinguish
10886         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
10887         Parameter.Modifier.ISBYREF flag if it's either ref or out.
10888
10889 2002-07-29  Martin Baulig  <martin@gnome.org>
10890
10891         * expression.cs (ParameterReference.ParameterReference): Added
10892         `Location loc' argument to the constructor.
10893
10894         * cs-parser.jay: Pass location to ParameterReference.
10895
10896 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
10897
10898         * statement.cs (Try): Initialize the location.
10899
10900         * cs-parser.jay: pass location to Try.
10901
10902         * expression.cs (Unary.Reduce): Change the prototype to return
10903         whether a constant fold could be performed or not.  The result is
10904         returned in an out parameters.  In the case of Indirection and
10905         AddressOf, we want to perform the full tests.
10906
10907 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
10908
10909         * statement.cs (Statement.Emit): Flag dead code.
10910
10911 2002-07-27  Andrew Birkett  <andy@nobugs.org>
10912
10913         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
10914
10915 2002-07-27  Martin Baulig  <martin@gnome.org>
10916
10917         * class.cs (MethodData.Define): Put back call to
10918         TypeManager.AddMethod(), accidentally commented this out.
10919
10920         * report.cs (Debug): New public method to print debugging information,
10921         this is `[Conditional ("DEBUG")]'.
10922
10923 2002-07-26  Martin Baulig  <martin@gnome.org>
10924
10925         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
10926         (switch_statement): Push the current_block to the switch_stack and
10927         pop it again when we're done with the switch.
10928         (switch_section): The new block is a child of the current_block.
10929         Fixes bug #24007, added test-152.cs.
10930
10931 2002-07-27  Martin Baulig  <martin@gnome.org>
10932
10933         * expression.cs (Invocation.EmitArguments): When calling a varargs
10934         function with only its fixed arguments, we need to pass an empty
10935         array.
10936
10937 2002-07-27  Martin Baulig  <martin@gnome.org>
10938
10939         Mono 0.13 has been released.
10940
10941 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
10942
10943         * driver.cs: Rename --resource to --linkres, because that is what
10944         we do currently, we dont support --resource yet.
10945
10946         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
10947
10948 2002-07-25  Martin Baulig  <martin@gnome.org>
10949
10950         * class.cs (MethodData): New public class.  This is a `method builder'
10951         class for a method or one accessor of a Property/Indexer/Event.
10952         (MethodData.GetMethodFlags): Moved here from MemberBase.
10953         (MethodData.ApplyAttributes): Likewise.
10954         (MethodData.ApplyObsoleteAttribute): Likewise.
10955         (MethodData.ApplyConditionalAttribute): Likewise.
10956         (MethodData.ApplyDllImportAttribute): Likewise.
10957         (MethodData.CheckAbstractAndExternal): Likewise.
10958         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
10959         (MethodData.Emit): Formerly known as Method.Emit().
10960         (MemberBase): Moved everything which was specific to a single
10961         accessor/method to MethodData.
10962         (Method): Create a new MethodData and call Define() and Emit() on it.
10963         (Property, Indexer, Event): Create a new MethodData objects for each
10964         accessor and call Define() and Emit() on them.
10965
10966 2002-07-25  Martin Baulig  <martin@gnome.org>
10967
10968         Made MethodCore derive from MemberBase to reuse the code from there.
10969         MemberBase now also checks for attributes.
10970
10971         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
10972         (MemberBase.GetMethodFlags): Moved here from class Method and marked
10973         as virtual.
10974         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
10975         `CallingConventions cc' and `Attributes opt_attrs' arguments.
10976         (MemberBase.ApplyAttributes): New virtual method; applies the
10977         attributes to a method or accessor.
10978         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
10979         (MemberBase.ApplyConditionalAttribute): Likewise.
10980         (MemberBase.ApplyDllImportAttribute): Likewise.
10981         (MemberBase.CheckAbstractAndExternal): Likewise.
10982         (MethodCore.ParameterTypes): This is now a property instead of a
10983         method, it's initialized from DoDefineParameters().
10984         (MethodCore.ParameterInfo): Removed the set accessor.
10985         (MethodCore.DoDefineParameters): New protected virtual method to
10986         initialize ParameterTypes and ParameterInfo.
10987         (Method.GetReturnType): We can now simply return the MemberType.
10988         (Method.GetMethodFlags): Override the MemberBase version and add
10989         the conditional flags.
10990         (Method.CheckBase): Moved some code from Define() here, call
10991         DoDefineParameters() here.
10992         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
10993         here to avoid some larger code duplication.
10994         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
10995         ensure that abstract and external accessors don't declare a body.
10996
10997         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
10998         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
10999         lookup in the attribute's parent classes, so we need to abort as soon
11000         as we found the first match.
11001         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
11002         the attribute has no arguments.
11003
11004         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
11005         of a Method.
11006
11007 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11008
11009         * cs-parser.jay: reverted previous patch.
11010
11011 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11012
11013         * cs-parser.jay: fixed bug #22119.
11014
11015 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11016
11017         * attribute.cs: fixed compilation. The error was:
11018         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
11019         be assigned to before control leaves the current method."
11020         [FIXME:  Filed as bug #28186: MCS must report this error.]
11021
11022 2002-07-25  Martin Baulig  <martin@gnome.org>
11023
11024         * attribute.cs (Attribute.Conditional_GetConditionName): New static
11025         method to pull the condition name ouf of a Conditional attribute.
11026         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
11027         the obsolete message and error flag out of an Obsolete attribute.
11028
11029         * class.cs (Method.GetMethodFlags): New public method to get the
11030         TypeManager.MethodFlags for this method.
11031         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
11032         private methods.
11033         (Method.Define): Get and apply the Obsolete and Conditional attributes;
11034         if we're overriding a virtual function, set the new private variable
11035         `parent_method'; call the new TypeManager.AddMethod().
11036
11037         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
11038         the MethodBuilder and the Method in a PtrHashtable.
11039         (TypeManager.builder_to_method): Added for this purpose.
11040         (TypeManager.MethodFlags): Added IsObsoleteError.
11041         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
11042         Obsolete and Conditional arguments in MethodBuilders.  If we discover
11043         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
11044         the message from the attribute.
11045
11046 2002-07-24  Martin Baulig  <martin@gnome.org>
11047
11048         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
11049         preprocessor directives, ensure that the argument to #define/#undef is
11050         exactly one identifier and that it's actually an identifier.
11051
11052         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
11053         did not work ....
11054
11055 2002-07-24  Martin Baulig  <martin@gnome.org>
11056
11057         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
11058         initialize it to TypeManager.object_type in the constructor.
11059         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
11060         of the `hm.get_current' method if we're using the collection pattern.
11061         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
11062         for the explicit conversion to make it work when we're using the collection
11063         pattern and the `Current' property has a different return type than `object'.
11064         Fixes #27713.
11065
11066 2002-07-24  Martin Baulig  <martin@gnome.org>
11067
11068         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
11069         does not match, but don't report any errors.  This method is called in
11070         order for all methods in a MethodGroupExpr until a matching method is
11071         found, so we don't want to bail out if the first method doesn't match.
11072         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
11073         matches, report the 123.  Fixes #28070.
11074
11075 2002-07-24  Martin Baulig  <martin@gnome.org>
11076
11077         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
11078         TypeManager.TypeToCoreType() to the top of the method so the
11079         following equality checks will work.  Fixes #28107.
11080
11081 2002-07-24  Martin Baulig  <martin@gnome.org>
11082
11083         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
11084         operand is of type uint, and the other operand is of type sbyte,
11085         short or int, the operands are converted to type long." -
11086         Actually do what this comment already told us.  Fixes bug #28106,
11087         added test-150.cs.
11088
11089 2002-07-24  Martin Baulig  <martin@gnome.org>
11090
11091         * class.cs (MethodBase): New abstract class.  This is now a base
11092         class for Property, Indexer and Event to avoid some code duplication
11093         in their Define() and DefineMethods() methods.
11094         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
11095         generic methods for Define() and DefineMethods().
11096         (FieldBase): Derive from MemberBase, not MemberCore.
11097         (Property): Derive from MemberBase, not MemberCore.
11098         (Property.DefineMethod): Moved all the code from this method to the
11099         new MethodBase.DefineAccessor(), just call it with appropriate
11100         argumetnts.
11101         (Property.Define): Call the new Property.DoDefine(), this does some
11102         sanity checks and we don't need to duplicate the code everywhere.
11103         (Event): Derive from MemberBase, not MemberCore.
11104         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
11105         accessors, this will also make them work with interface events.
11106         (Indexer): Derive from MemberBase, not MemberCore.
11107         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
11108         (Indexer.Define): Use the new MethodBase functions.
11109
11110         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
11111         argument to the constructor.
11112         (Interface.FindMembers): Added support for interface events.
11113         (Interface.PopluateEvent): Implemented.
11114
11115         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
11116
11117 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
11118
11119         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
11120         but this is required to check for a method name being the same as
11121         the containing class.  
11122
11123         Handle this now.
11124
11125 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11126
11127         * interface.cs: initialize variable.
11128
11129 2002-07-23  Martin Baulig  <martin@gnome.org>
11130
11131         Implemented the IndexerName attribute in interfaces.
11132
11133         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
11134         name if this is an explicit interface implementation.
11135         (Indexer.InterfaceIndexerName): New public variable.  If we're
11136         implementing an interface indexer, this is the IndexerName in that
11137         interface.  Otherwise, it's the IndexerName.
11138         (Indexer.DefineMethod): If we're implementing interface indexer,
11139         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
11140         and Pending.ImplementIndexer methods.
11141         (Indexer.Define): Also define the PropertyBuilder if we're
11142         implementing an interface indexer and this is neither an explicit
11143         interface implementation nor do the IndexerName match the one in
11144         the interface.
11145
11146         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
11147         If a method is defined here, then we always need to create a proxy
11148         for it.  This is used when implementing interface indexers.
11149         (Pending.IsInterfaceIndexer): New public method.
11150         (Pending.ImplementIndexer): New public method.
11151         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
11152         This is used when implementing interface indexers to define a proxy
11153         if necessary.
11154         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
11155         define a proxy if necessary.
11156
11157         * interface.cs (Interface.IndexerName): New public variable.
11158         (Interface.PopulateIndexer): Set the IndexerName.
11159         (Interface.DefineIndexers): New private method.  Populate all the
11160         indexers and make sure their IndexerNames match.
11161
11162         * typemanager.cs (IndexerPropertyName): Added support for interface
11163         indexers.
11164
11165 2002-07-22  Martin Baulig  <martin@gnome.org>
11166
11167         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
11168         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
11169         ret if HasReturnLabel.
11170         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
11171         variables.
11172
11173         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
11174         and set the ec.LoopBeginTryCatchLevel.
11175         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
11176         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
11177         the current ec.TryCatchLevel, the branch goes out of an exception
11178         block.  In this case, we need to use Leave and not Br.
11179
11180 2002-07-22  Martin Baulig  <martin@gnome.org>
11181
11182         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
11183         block unless the block does not always return or it is contained in
11184         another try { ... } catch { ... } block.  Fixes bug #26506.
11185         Added verify-1.cs to the test suite.
11186
11187 2002-07-22  Martin Baulig  <martin@gnome.org>
11188
11189         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
11190         then we do not always return.  Fixes bug #24985.
11191
11192 2002-07-22  Martin Baulig  <martin@gnome.org>
11193
11194         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
11195         lookup on a per-class level; ie. walk up the class hierarchy until we
11196         found at least one applicable method, then choose the best among them.
11197         Fixes bug #24463 and test-29.cs.
11198
11199 2002-07-22  Martin Baulig  <martin@gnome.org>
11200
11201         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
11202         return types of the methods.  The return type is not part of the
11203         signature and we must not check it to make the `new' modifier work.
11204         Fixes bug #27999, also added test-147.cs.
11205         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
11206
11207         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
11208         on the method's return type.
11209
11210 2002-07-21  Martin Baulig  <martin@gnome.org>
11211
11212         * assign.cs: Make this work if the rightmost source is a constant and
11213         we need to do an implicit type conversion.  Also adding a few more tests
11214         to test-38.cs which should have caught this.
11215
11216         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
11217         target in the makefile for this.  The makefile.gnu is primarily intended
11218         for end-users who don't want to debug the compiler.
11219
11220 2002-07-21  Martin Baulig  <martin@gnome.org>
11221
11222         * assign.cs: Improved the Assign class so it can now handle embedded
11223         assignments (X = Y = Z = something).  As a side-effect this'll now also
11224         consume less local variables.  test-38.cs now passes with MCS, added
11225         a few new test cases to that test.
11226
11227 2002-07-20  Martin Baulig  <martin@gnome.org>
11228
11229         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
11230         instructions.  Fixes bug #27977, also added test-146.cs.
11231
11232 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11233
11234         * cs-tokenizer.cs: fixed getHex ().
11235
11236 2002-07-19  Martin Baulig  <martin@gnome.org>
11237
11238         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
11239         not Type.GetType() to lookup the array type.  This is needed when
11240         we're constructing an array of a user-defined type.
11241         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
11242         single-dimensional arrays, but also for single-dimensial arrays of
11243         type decimal.
11244
11245 2002-07-19  Martin Baulig  <martin@gnome.org>
11246
11247         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
11248         this function is called, it's not allowed to share LocalBuilders
11249         among ILGenerators.
11250
11251 2002-07-19  Martin Baulig  <martin@gnome.org>
11252
11253         * expression.cs (Argument.Resolve): Report an error 118 when trying
11254         to pass a type as argument.
11255
11256 2002-07-18  Martin Baulig  <martin@gnome.org>
11257
11258         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
11259         Conv_R_Un for the signed `long' type.
11260
11261 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
11262
11263         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
11264         `expr' for the temporary result, as that will fail if we do
11265         multiple resolves on the same expression.
11266
11267 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
11268
11269         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
11270         ec.TypeContainer for looking up aliases. 
11271
11272         * class.cs (TypeContainer): Remove LookupAlias from here.
11273
11274         * decl.cs (DeclSpace); Move here.
11275
11276 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
11277
11278         * class.cs (FindMembers): Only call filter if the constructor
11279         bulider is not null.
11280
11281         Also handle delegates in `NestedTypes' now.  Now we will perform
11282         type lookups using the standard resolution process.  This also
11283         fixes a bug.
11284
11285         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
11286         This uses Expressions (the limited kind that can be parsed by the
11287         tree) instead of strings.
11288
11289         * expression.cs (ComposedCast.ToString): Implement, used to flag
11290         errors since now we have to render expressions.
11291
11292         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
11293         FormArrayType. 
11294
11295         * ecore.cs (SimpleName.ToString): ditto.
11296
11297         * cs-parser.jay: Instead of using strings to assemble types, use
11298         Expressions to assemble the type (using SimpleName, ComposedCast,
11299         MemberAccess).  This should fix the type lookups in declarations,
11300         because we were using a different code path for this.
11301
11302         * statement.cs (Block.Resolve): Continue processing statements
11303         even when there is an error.
11304
11305 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
11306
11307         * class.cs (Event.Define): Also remove the `remove' method from
11308         the list of pending items.
11309
11310         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
11311         generate more compact code. 
11312
11313 2002-07-17  Martin Baulig  <martin@gnome.org>
11314
11315         * const.cs (Const.LookupConstantValue): Add support for constant
11316         `unchecked' and `checked' expressions.
11317         Also adding test case test-140.cs for this.
11318
11319 2002-07-17  Martin Baulig  <martin@gnome.org>
11320
11321         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
11322         check whether mi.ReturnType implements the IEnumerator interface; the
11323         `==' and the IsAssignableFrom() will fail in this situation.
11324
11325 2002-07-16  Ravi Pratap  <ravi@ximian.com>
11326
11327         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
11328         here too.
11329
11330 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11331
11332         * expression.cs: fixed bug #27811.
11333
11334 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
11335
11336         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
11337         Molaro: when we are a ref, the value already contains a pointer
11338         value, do not take the address of it.
11339
11340 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
11341         * removed mb-parser.jay and mb-tokenizer.cs
11342
11343 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
11344
11345         * expression.cs: check against the building corlib void type.
11346
11347 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
11348
11349         * ecore.cs: fix for valuetype static readonly fields: when 
11350         initializing them, we need their address, not the address of a copy.
11351
11352 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
11353
11354         * typemanager.cs: register also enum_type in corlib.
11355
11356 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
11357
11358         * class.cs: allow calling this (but not base) initializers in structs.
11359
11360 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
11361
11362         * ecore.cs: make sure we compare against the building base types
11363         in GetTypeSize ().
11364
11365 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
11366
11367         * typemanager.cs: fix TypeToCoreType() to handle void and object
11368         (corlib gets no more typerefs after this change).
11369
11370 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
11371
11372         * expression.cs (ArrayCreation.EmitArrayArguments): use
11373         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
11374
11375         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
11376         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
11377         array indexes, the runtime actually forbids them.
11378
11379         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
11380         for array arguments here.
11381
11382         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
11383         instead of the default for ValueTypes.
11384
11385         (New.DoEmit): Use IsValueType instead of
11386         IsSubclassOf (value_type)
11387         (New.DoResolve): ditto.
11388         (Invocation.EmitCall): ditto.
11389
11390         * assign.cs (Assign): ditto.
11391
11392         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
11393         Statements *are* currently doing part of their resolution during
11394         Emit.  
11395
11396         Expressions do always resolve during resolve, but statements are
11397         only required to propagate resolution to their children.
11398
11399 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
11400
11401         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
11402
11403         (LoadAssembly): Do not add the dll if it is already specified
11404
11405         (MainDriver): Add the System directory to the link path at the end,
11406         after all the other -L arguments. 
11407
11408         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
11409         wrong opcode for loading bytes and bools (ldelem.i1 instead of
11410         ldelem.u1) and using the opposite for sbytes.
11411
11412         This fixes Digger, and we can finally run it.
11413
11414         * driver.cs (UnixParseOption): Move the option parsing here.  
11415         (CSCParseOption): Implement CSC-like parsing of options.
11416
11417         We now support both modes of operation, the old Unix way, and the
11418         new CSC-like way.  This should help those who wanted to make cross
11419         platform makefiles.
11420
11421         The only thing broken is that /r:, /reference: and /lib: are not
11422         implemented, because I want to make those have the same semantics
11423         as the CSC compiler has, and kill once and for all the confussion
11424         around this.   Will be doing this tomorrow.
11425
11426         * statement.cs (Unsafe.Resolve): The state is checked during
11427         resolve, not emit, so we have to set the flags for IsUnsfe here.
11428
11429 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
11430
11431         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
11432         not catch the Error_ObjectRefRequired in SimpleName (as it is
11433         possible to have a class/instance variable name that later gets
11434         deambiguated), we have to check this here.      
11435
11436 2002-07-10  Ravi Pratap  <ravi@ximian.com>
11437
11438         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
11439         make static and put into Expression.
11440
11441         (Event.Define): Register the private field of the event with the 
11442         TypeManager so that GetFieldFromEvent can get at it.
11443
11444         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
11445         keep track of the private field associated with an event which
11446         has no accessors.
11447
11448         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
11449         private field.
11450
11451         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
11452
11453 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
11454
11455         * expression.cs (Binary.EmitBranchable): this routine emits the
11456         Binary expression in a branchable context.  This basically means:
11457         we need to branch somewhere, not just get the value on the stack.
11458
11459         This works together with Statement.EmitBoolExpression.
11460
11461         * statement.cs (Statement.EmitBoolExpression): Use
11462         EmitBranchable. 
11463
11464 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
11465
11466         * statement.cs (For): Reduce the number of jumps in loops.
11467
11468         (For): Implement loop inversion for the For statement.
11469
11470         (Break): We can be breaking out of a Try/Catch controlled section
11471         (foreach might have an implicit try/catch clause), so we need to
11472         use Leave instead of Br.
11473
11474         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
11475         now).  If the instace expression supports IMemoryLocation, we use
11476         the AddressOf method from the IMemoryLocation to extract the
11477         address instead of emitting the instance.
11478
11479         This showed up with `This', as we were emitting the instance
11480         always (Emit) instead of the Address of This.  Particularly
11481         interesting when This is a value type, as we dont want the Emit
11482         effect (which was to load the object).
11483
11484 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
11485
11486         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
11487
11488         * statement.cs (Checked): Set the CheckedState during the resolve
11489         process too, as the ConvCast operations track the checked state on
11490         the resolve process, and not emit.
11491
11492         * cs-parser.jay (namespace_member_declaration): Flag that we have
11493         found a declaration when we do.  This is used to flag error 1529
11494
11495         * driver.cs: Report ok when we display the help only.
11496
11497 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
11498
11499         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
11500
11501 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
11502
11503         * cs-tokenizer.cs (define): We also have to track locally the
11504         defines.  AllDefines is just used for the Conditional Attribute,
11505         but we also need the local defines for the current source code. 
11506
11507 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
11508
11509         * statement.cs (While, For, Do): These loops can exit through a
11510         Break statement, use this information to tell whether the
11511         statement is the last piece of code.
11512
11513         (Break): Flag that we break.
11514
11515         * codegen.cs (EmitContexts): New `Breaks' state variable.
11516
11517 2002-07-03  Martin Baulig  <martin@gnome.org>
11518
11519         * class.cs (TypeContainer.MethodModifiersValid): Allow override
11520         modifiers in method declarations in structs.  Otherwise, you won't
11521         be able to override things like Object.Equals().
11522
11523 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
11524
11525         * class.cs (Method, Property, Indexer): Do not allow the public
11526         modifier to be used in explicit interface implementations.
11527
11528         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
11529         override modifiers in method declarations in structs
11530
11531 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
11532
11533         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
11534         integer or real overflow, report an error
11535
11536 2002-07-02  Martin Baulig  <martin@gnome.org>
11537
11538         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
11539         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
11540         to tell the runtime about our newly created System.Object and
11541         System.ValueType types.
11542
11543 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
11544
11545         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
11546         struct instead of Ldarg/Starg.
11547
11548 2002-07-02  Martin Baulig  <martin@gnome.org>
11549
11550         * expression.cs (Indirection.Indirection): Call
11551         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
11552
11553 2002-07-02  Martin Baulig  <martin@gnome.org>
11554
11555         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
11556         ValueType, call TypeManager.TypeToCoreType() on it.
11557         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
11558         the OpCodes.Newarr argument.
11559
11560 2002-07-02  Martin Baulig  <martin@gnome.org>
11561
11562         * expression.cs (Invocation.EmitCall): When compiling corlib,
11563         replace all calls to the system's System.Array type to calls to
11564         the newly created one.
11565
11566         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
11567         System.Array methods.
11568         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
11569         from the system's System.Array type which must be replaced.
11570
11571 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
11572
11573         * typemanager.cs: load unverifiable_code_ctor so we can build
11574         corlib using the correct type. Avoid using GetTypeCode() with
11575         TypeBuilders.
11576         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
11577         TypeManager.object_type to allow building corlib.
11578
11579 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
11580
11581         * ecore.cs: handle System.Enum separately in LoadFromPtr().
11582
11583 2002-07-01  Martin Baulig  <martin@gnome.org>
11584
11585         * class.cs: Make the last change actually work, we need to check
11586         whether `ifaces != null' to avoid a crash.
11587
11588 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
11589
11590         * class.cs: when we build structs without fields that implement
11591         interfaces, we need to add the interfaces separately, since there is
11592         no API to both set the size and add the interfaces at type creation
11593         time.
11594
11595 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
11596
11597         * expression.cs: the dimension arguments to the array constructors
11598         need to be converted if they are a long.
11599
11600 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
11601
11602         * class.cs: don't emit ldarg.0 if there is no parent constructor
11603         (fixes showstopper for corlib).
11604
11605 2002-06-29  Martin Baulig  <martin@gnome.org>
11606
11607         MCS now compiles corlib on GNU/Linux :-)
11608
11609         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
11610         ie. check for MethodImplOptions.InternalCall.
11611
11612         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
11613         and TypeManager.attribute_type are null, so we must explicitly check
11614         whether parent is not null to find out whether it's an attribute type.
11615         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
11616         and SetBuilder, not only if the property is neither abstract nor external.
11617         This is necessary to set the MethodImplOptions on the accessor methods.
11618         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
11619         SetBuilder, see Property.Emit().
11620
11621         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
11622         populate "System.Object", "System.ValueType" and "System.Attribute" since
11623         they've already been populated from BootCorlib_PopulateCoreTypes().
11624
11625 2002-06-29  Martin Baulig  <martin@gnome.org>
11626
11627         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
11628         is the NullLiteral, we also need to make sure that target_type is not
11629         an enum type.   
11630
11631 2002-06-29  Martin Baulig  <martin@gnome.org>
11632
11633         * rootcontext.cs (RootContext.ResolveCore): We must initialize
11634         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
11635         before calling BootstrapCorlib_ResolveDelegate ().
11636
11637 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11638
11639         * statement.cs: fixed build-breaker. All tests passed ok.
11640
11641 2002-06-27  Martin Baulig  <martin@gnome.org>
11642
11643         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
11644         for System.Decimal when compiling corlib.
11645
11646 2002-06-27  Martin Baulig  <martin@gnome.org>
11647
11648         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
11649         switch blocks which contain nothing but a default clause.
11650
11651 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
11652
11653        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
11654
11655 2002-06-27  Martin Baulig  <martin@gnome.org>
11656
11657         * ecore.cs (PropertyExpr.PropertyExpr): Call
11658         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
11659
11660         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
11661         is already a TypeBuilder.
11662
11663 2002-06-27  Martin Baulig  <martin@gnome.org>
11664
11665         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
11666         `target_type == TypeManager.array_type', not IsAssignableFrom() in
11667         the "from an array-type to System.Array" case.  This makes it work
11668         when compiling corlib.
11669
11670 2002-06-27  Martin Baulig  <martin@gnome.org>
11671
11672         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
11673         non-static PropertyExpr, set its InstanceExpression.  This makes
11674         the `ICollection.Count' property work in System/Array.cs.
11675
11676 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
11677
11678         * driver.cs: Made error handling more consistent.  Errors now
11679         tracked by Report class, so many methods which used to return int
11680         now return void.  Main() now prints success/failure and 
11681         errors/warnings message.
11682
11683         Renamed '--probe' compiler argument to '--expect-error'.  Removed
11684         the magic number return values (123 and 124).  Now, if the
11685         expected error occurs, the compiler exits with success (exit value
11686         0).  If the compilation completes without seeing that particular
11687         error, the compiler exits with failure (exit value 1).  The
11688         makefile in mcs/errors has been changed to handle the new behaviour.
11689
11690         * report.cs: Made 'expected error' number a property and renamed
11691         it from 'Probe' to 'ExpectedError'.
11692
11693         * genericparser.cs: Removed error handling support, since it is
11694         now all done by Report class.
11695
11696         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
11697         class, so parse() no longer returns an int.
11698
11699         * namespace.cs: Use Report.Error instead of GenericParser.error
11700
11701 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
11702
11703         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
11704         TypeContainer.AddOperator): At the front of the list put the
11705         explicit implementations, so they get resolved/defined first. 
11706
11707 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
11708
11709         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
11710         interface type is implemented by this TypeContainer.  Used during
11711         explicit interface implementation.
11712
11713         (Property.Define, Indexer.Define, Method.Define): Validate that
11714         the given interface in the explicit implementation is one of the
11715         base classes for the containing type.
11716
11717         Also if we are explicitly implementing an interface, but there is
11718         no match in the pending implementation table, report an error.
11719
11720         (Property.Define): Only define the property if we are
11721         not explicitly implementing a property from an interface.  Use the
11722         correct name also for those properties (the same CSC uses,
11723         although that is really not needed).
11724
11725         (Property.Emit): Do not emit attributes for explicitly implemented
11726         properties, as there is no TypeBuilder.
11727
11728         (Indexer.Emit): ditto.
11729
11730         Hiding then means that we do not really *implement* a pending
11731         implementation, which makes code fail.
11732
11733 2002-06-22  Martin Baulig  <martin@gnome.org>
11734
11735         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
11736         the return value of Object.GetType().  [FIXME: we need to do this whenever
11737         we get a type back from the reflection library].
11738
11739 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
11740
11741         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
11742
11743 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
11744
11745         * attribute.cs: Return null if we can not look up the type.
11746
11747         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
11748         the interface types found.
11749
11750         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
11751         interface types found.
11752
11753         * typemanager.cs (GetInterfaces): Make this routine returns alll
11754         the interfaces and work around the lame differences between
11755         System.Type and System.Reflection.Emit.TypeBuilder in the results
11756         result for GetInterfaces.
11757
11758         (ExpandInterfaces): Given an array of interface types, expand and
11759         eliminate repeated ocurrences of an interface.  This expands in
11760         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
11761         be IA, IB, IC.
11762
11763 2002-06-21  Martin Baulig  <martin@gnome.org>
11764
11765         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
11766         on System.Enum.
11767
11768 2002-06-21  Martin Baulig  <martin@gnome.org>
11769
11770         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
11771         and called with one of the core types, return the corresponding typebuilder for
11772         that type.
11773
11774         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
11775         element type.
11776
11777 2002-06-21  Martin Baulig  <martin@gnome.org>
11778
11779         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
11780         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
11781         (Expression.ConvertReferenceExplicit): Likewise.
11782
11783         * expression.cs (ElementAccess.DoResolve): Likewise.
11784         (ElementAccess.DoResolveLValue): Likewise.
11785
11786 2002-06-10  Martin Baulig  <martin@gnome.org>
11787
11788         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
11789         add the "value" parameter to the parameter list.
11790
11791         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
11792         to our caller.
11793
11794 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
11795
11796         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
11797         the argument to an int, uint, long or ulong, per the spec.  Also
11798         catch negative constants in array creation.
11799
11800 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
11801
11802         * class.cs: do not allow the same interface to appear twice in
11803         the definition list.
11804
11805 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
11806
11807         * ecore.cs: don't use ldlen with System.Array.
11808
11809 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
11810
11811         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
11812
11813 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
11814
11815         * modifiers.cs: produce correct field attributes for protected
11816         internal. Easy fix so miguel can work on ther harder stuff:-)
11817
11818 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
11819
11820         * pending.cs: New file.  Move the code from class.cs here.
11821         Support clearning the pending flag for all methods (when not doing
11822         explicit interface implementation).
11823
11824 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
11825
11826         * rootcontext.cs: added a couple more types needed to bootstrap.
11827
11828 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
11829
11830         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
11831         constructor in the type, instead of any constructor in the type
11832         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
11833         a bug in the Mono runtime when applying the params attribute). 
11834
11835 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
11836         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
11837
11838 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
11839
11840         * expression.cs (Unary.ResolveOperator): Use TypeManager
11841         to resolve the type.
11842
11843 2002-06-13  Ravi Pratap  <ravi@ximian.com>
11844
11845         * cs-parser.jay (enum_member_declaration): Pass in the attributes
11846         attached.
11847
11848         * enum.cs (AddEnumMember): Add support to store the attributes associated 
11849         with each member too.
11850
11851         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
11852         field builders too - this takes care of the enum member case.
11853
11854 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
11855
11856         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
11857         address-of operator on both value types and pointers.
11858
11859 2002-06-10  Martin Baulig  <martin@gnome.org>
11860
11861         * interface.cs (Interface.PopulateIndexer): Add the indexer's
11862         PropertyBuilder to the `property_builders' list.
11863
11864         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
11865         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
11866         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
11867         find any indexers which are inherited from an interface.
11868
11869 2002-06-09  Martin Baulig  <martin@gnome.org>
11870
11871         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
11872         the same type as the constant if necessary.  There's also a test-130.cs
11873         for this.
11874
11875         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
11876
11877         * typemanager.cs (TypeManager.ChangeType): Previously known as
11878         Enum.ChangeEnumType().
11879
11880 2002-06-09  Martin Baulig  <martin@gnome.org>
11881
11882         * expression.cs (Cast.TryReduce): Added support for consts.
11883
11884 2002-06-08  Ravi Pratap  <ravi@ximian.com>
11885
11886         * class.cs (Accessor): Hold attributes information so we can pass
11887         it along.
11888
11889         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
11890         Modify to pass in attributes attached to the methods.
11891
11892         (add_accessor_declaration, remove_accessor_declaration): Ditto.
11893
11894         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
11895         to handle the Accessor kind :-)
11896
11897         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
11898
11899 2002-06-08  Martin Baulig  <martin@gnome.org>
11900
11901         * expression.cs (Unary.TryReduceNegative): Added support for
11902         ULongConstants.
11903
11904 2002-06-08  Martin Baulig  <martin@gnome.org>
11905
11906         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
11907         name can't be found in the `defined_names' - the caller will do a
11908         MemberLookup in this case and thus find methods in System.Enum
11909         such as Enum.IsDefined().
11910
11911 2002-06-08  Martin Baulig  <martin@gnome.org>
11912
11913         * enum.cs (Enum.ChangeEnumType): This is a custom version of
11914         Convert.ChangeType() which works with TypeBuilder created types.
11915         (Enum.LookupEnumValue, Enum.Define): Use it here.
11916
11917         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
11918         `TypeBuilder.BaseType != null' check.
11919         (TypeContainer.FindMembers): Only lookup parent members if we
11920         actually have a parent.
11921         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
11922         (ConstructorInitializer.Resolve): Likewise.
11923
11924         * interface.cs (Interface.FindMembers): Added
11925         `TypeBuilder.BaseType != null' check.
11926
11927         * rootcontext.cs (RootContext.ResolveCore): Added
11928         "System.Runtime.CompilerServices.IndexerNameAttribute" to
11929         classes_second_stage.
11930
11931         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
11932         debug_type and trace_type when compiling with --nostdlib.       
11933
11934 2002-06-07  Martin Baulig  <martin@gnome.org>
11935
11936         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
11937         (AddField): Set it to true when adding a non-static field.
11938         (DefineType): Use `have_nonstatic_fields' to find out whether we
11939         have non-static fields, not `Fields != null'.
11940
11941 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
11942
11943         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
11944         dereferencing a null on the static-field code path)
11945
11946 2002-05-30  Martin Baulig  <martin@gnome.org>
11947
11948         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
11949         to take command line arguments.  Use reflection to call the new
11950         custom `Initialize' function on the symbol writer and pass it the
11951         command line arguments.
11952
11953         * driver.cs (--debug-args): New command line argument to pass command
11954         line arguments to the symbol writer.
11955
11956 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
11957
11958         * assign.cs (DoResolve): Forgot to do the implicit conversion to
11959         the target type for indexers and properties.  Thanks to Joe for
11960         catching this.
11961
11962 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
11963
11964         * typemanager.cs (MethodFlags): returns the method flags
11965         (Obsolete/ShouldIgnore) that control warning emission and whether
11966         the invocation should be made, or ignored. 
11967
11968         * expression.cs (Invocation.Emit): Remove previous hack, we should
11969         not do this on matching a base type, we should do this based on an attribute
11970
11971         Only emit calls to System.Diagnostics.Debug and
11972         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
11973         on the command line.
11974
11975         * rootcontext.cs: Global settings for tracing and debugging.
11976
11977         * cs-tokenizer.cs (define): New utility function to track
11978         defines.   Set the global settings for TRACE and DEBUG if found.
11979
11980 2002-05-25  Ravi Pratap  <ravi@ximian.com>
11981
11982         * interface.cs (Populate*): Pass in the TypeContainer as well as
11983         the DeclSpace as parameters so that we can create EmitContexts and
11984         then use that to apply attributes etc.
11985
11986         (PopulateMethod, PopulateEvent, PopulateProperty)
11987         (PopulateIndexer): Apply attributes everywhere.
11988
11989         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
11990         etc.
11991
11992         (ApplyAttributes): Update accordingly.
11993
11994         We now apply interface attributes for all members too.
11995
11996 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
11997
11998         * class.cs (Indexer.Define); Correctly check if we are explicit
11999         implementation (instead of checking the Name for a ".", we
12000         directly look up if the InterfaceType was specified).
12001
12002         Delay the creation of the PropertyBuilder.
12003
12004         Only create the PropertyBuilder if we are not an explicit
12005         interface implementation.   This means that explicit interface
12006         implementation members do not participate in regular function
12007         lookups, and hence fixes another major ambiguity problem in
12008         overload resolution (that was the visible effect).
12009
12010         (DefineMethod): Return whether we are doing an interface
12011         implementation. 
12012
12013         * typemanager.cs: Temporary hack until we get attributes in
12014         interfaces (Ravi is working on that) and we get IndexerName
12015         support in interfaces.
12016
12017         * interface.cs: Register the indexers as properties.
12018
12019         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
12020         warning, I have verified that this is a bug in the .NET runtime
12021         (JavaScript suffers of the same problem).
12022
12023         * typemanager.cs (MemberLookup): When looking up members for
12024         interfaces, the parent of an interface is the implicit
12025         System.Object (so we succeed in searches of Object methods in an
12026         interface method invocation.  Example:  IEnumerable x;  x.ToString
12027         ()) 
12028
12029 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
12030
12031         * class.cs (Event): Events should also register if they do
12032         implement the methods that an interface requires.
12033
12034         * typemanager.cs (MemberLookup); use the new GetInterfaces
12035         method. 
12036
12037         (GetInterfaces): The code used to lookup interfaces for a type is
12038         used in more than one place, factor it here. 
12039
12040         * driver.cs: Track the errors at the bottom of the file, we kept
12041         on going.
12042
12043         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
12044         instance if the method we are calling is static!
12045
12046 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
12047
12048         * attribute.cs (ApplyAttributes): Make this function filter out
12049         the IndexerName attribute (as that attribute in reality is never
12050         applied) and return the string constant for the IndexerName
12051         attribute. 
12052
12053         * class.cs (TypeContainer.Emit): Validate that all the indexers
12054         have the same IndexerName attribute, and if so, set the
12055         DefaultName attribute on the class. 
12056
12057         * typemanager.cs: The return value might contain other stuff (not
12058         only methods).  For instance, consider a method with an "Item"
12059         property and an Item method.
12060
12061         * class.cs: If there is a problem with the parameter types,
12062         return. 
12063
12064 2002-05-24  Ravi Pratap  <ravi@ximian.com>
12065
12066         * ecore.cs (ImplicitConversionExists): Wrapper function which also
12067         looks at user defined conversion after making a call to 
12068         StandardConversionExists - we need this for overload resolution.
12069
12070         * expression.cs : Update accordingly the various method calls.
12071
12072         This fixes 2 bugs filed against implicit user defined conversions 
12073
12074 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
12075
12076         * statement.cs: Track the result of the assignment.
12077
12078 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
12079
12080         * expression.cs (MemberAccess): Improved error reporting for
12081         inaccessible members.
12082
12083 2002-05-22  Martin Baulig  <martin@gnome.org>
12084
12085         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
12086         itself with debugging support.
12087
12088 2002-05-22  Martin Baulig  <martin@gnome.org>
12089
12090         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
12091         Removed, this isn't needed anymore.
12092
12093 2002-05-20  Martin Baulig  <martin@gnome.org>
12094
12095         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
12096         be underlying type for an enum.
12097
12098 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
12099
12100         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
12101         that splits out the loading of just the core types.
12102
12103         * rootcontext.cs (ResolveCore): Split the struct resolution in
12104         two, so we can load the enumeration underlying types before any
12105         enums are used.
12106
12107         * expression.cs (Is): Bandaid until we fix properly Switch (see
12108         bug #24985 for details).
12109
12110         * typemanager.cs (ImplementsInterface): The hashtable will contain
12111         a null if there are no interfaces implemented.
12112
12113 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
12114
12115         * cs-parser.jay (indexer_declarator): It is fine to have array
12116         parameters
12117
12118 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
12119
12120         * typemanager.cs: (RegisterBuilder): New function used to register
12121         TypeBuilders that implement interfaces.  Since
12122         TypeBuilder.GetInterfaces (as usual) does not work with lame
12123         Reflection.Emit. 
12124         (AddUserType): register interfaces.
12125
12126         (ImplementsInterface): Use the builder_to_ifaces hash if we are
12127         dealing with TypeBuilder.  Also, arrays are showing up as
12128         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
12129         methods can not be invoked on them!
12130
12131         * ecore.cs (ExplicitReferenceConversionExists): Made public.
12132         (ImplicitReferenceConversionExists): Split out from
12133         StandardConversionExists. 
12134
12135         * expression.cs (As): We were only implementing one of the three
12136         cases for the as operator.  We now implement them all.
12137         (Is): Implement the various other cases for Is as well.
12138
12139         * typemanager.cs (CACHE): New define used to control if we want or
12140         not the FindMembers cache.  Seems to have a negative impact on
12141         performance currently
12142
12143         (MemberLookup): Nested types have full acess to
12144         enclosing type members
12145
12146         Remove code that coped with instance/static returns for events, we
12147         now catch this in RealFindMembers.
12148
12149         (RealFindMembers): only perform static lookup if the instance
12150         lookup did not return a type or an event.  
12151
12152 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
12153
12154         * assign.cs (CompoundAssign): We pass more semantic information
12155         now to Compound Assignments than we did before: now we have all
12156         the information at hand, and now we resolve the target *before* we
12157         do the expression expansion, which allows the "CacheValue" method
12158         to have the effect we intended (before, a [x] += 1 would generate
12159         two differen ArrayAccess expressions from the ElementAccess,
12160         during the resolution process).
12161
12162         (CompoundAssign.DoResolve): Resolve target and original_source here.
12163
12164 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
12165
12166         * expression.cs (ArrayAccess): dropped debugging information. 
12167
12168         * typemanager.cs: Small bug fix: I was always returning i_members,
12169         instead of one of i_members or s_members (depending on which had
12170         the content).
12171
12172         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
12173         method is invoked before any code generation takes place, and it
12174         is a mechanism to inform that the expression will be invoked more
12175         than once, and that the method should use temporary values to
12176         avoid having side effects
12177
12178         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
12179
12180         * ecore.cs (Expression.CacheTemporaries): Provide empty default
12181         implementation.
12182
12183         * expression.cs (Indirection, ArrayAccess): Add support for
12184         CacheTemporaries in these two bad boys. 
12185
12186         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
12187         ldobj or ldind_ref.  
12188         (StoreFromPtr): Handle stobj as well.
12189
12190         * expression.cs (UnaryMutator): Share more code.
12191
12192         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
12193         down: I was not tracking the Filter function as well, which
12194         was affecting the results of the cache.
12195
12196 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
12197
12198         * attribute.cs: Remove the hack to handle the CharSet property on
12199         StructLayouts. 
12200
12201 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
12202
12203         * attribute.cs (DoResolve): More uglyness, we now only try to
12204         resolve the attribute partially, to extract the CharSet
12205         information (only if we are a StructLayout attribute).  Otherwise 
12206
12207         (GetExtraTypeInfo): Add some code to conditionally kill in the
12208         future this.   I am more and more convinced that the .NET
12209         framework has special code to handle the attribute setting on
12210         certain elements.
12211
12212         * expression.cs (IsParamsMethodApplicable): Revert my previous
12213         foreach change here, it was wrong.
12214
12215 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
12216
12217         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
12218         (pp_expr): do not abort on unknown input, just return.
12219         (eval): abort if there are pending chars.
12220
12221         * attribute.cs (Attribute.Resolve): Positional parameters are
12222         optional.  Deal with that case.
12223
12224         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
12225         the Ansi/Unicode/Auto information for the type.
12226
12227         (TypeContainer.DefineType): instantiate the EmitContext here, as
12228         we will be using it during the type definition (to resolve
12229         attributes) and during the emit phase.
12230
12231         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
12232         to pull type information out of the attributes
12233
12234         (Attribute.Resolve): track the constructor builder, and allow for
12235         multiple invocations (structs and classes will use this).
12236
12237         * ecore.cs (MemberLookupFinal): new version with all the
12238         parameters customizable.
12239
12240         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
12241         constructors.  Return if the result value is null (as the error
12242         would have been flagged already by MemberLookupFinal)
12243
12244         Do not allow instances of abstract classes or interfaces to be
12245         created.
12246
12247         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
12248         We have to compare the assembly property here when dealing with
12249         FamANDAssem and Assembly access modifiers, because we might be
12250         creating an assembly from *modules* (that means that we are not
12251         getting TypeBuilders for types defined in other modules that are
12252         part of this assembly).
12253
12254         (Method.Emit): If the method is marked abstract and has a body,
12255         emit an error. 
12256
12257         (TypeContainer.DefineMembers): If both the defined member and the
12258         parent name match are methods, then do not emit any warnings: let
12259         the Method.Define routine take care of flagging warnings.  But if
12260         there is a mismatch (method overrides something else, or method is
12261         overriwritten by something, then emit warning).
12262
12263         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
12264         set to null, this means `do not check for the return type on the
12265         signature'. 
12266
12267         (Method.Define): set the return type for the method signature to
12268         null, so that we get methods with the same name and parameters and
12269         different return types.  This is used to flag warning 114 (you are
12270         hiding a method, and you probably want to use the new/override
12271         keywords instead).
12272
12273         * typemanager.cs (MemberLookup): Implemented proper access
12274         control, closing a long standing set of bug reports.  The problem
12275         was that the Framework only has two bits: Public and NonPublic,
12276         and NonPublic includes private and protected methods, but we need
12277         to enforce the FamANDAssem, FamOrAssem and Family. 
12278
12279 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
12280
12281         * statement.cs (GotoCase): Return true: Ammounts to giving up
12282         knowledge on whether we return or not, and letting the other case
12283         be responsible for it.
12284
12285 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
12286
12287         * driver.cs: Do not load directories for each file processed, only
12288         do it if there is a pattern.
12289
12290         * ecore.cs: Report readonly assigns here as well, as we might have
12291         been resolved only by MemberAccess.
12292
12293         (SimpleName.SimpleNameResolve): Also be useful for LValue
12294         resolution.   We need this to propagate assign to local readonly variables
12295
12296         * typemanager.cs: Use a ptrhashtable for the criteria, because we
12297         do not want to reuse potential criteria memory.
12298
12299         * class.cs (MyEventBuilder): Set reflected_type;
12300
12301         * ecore.cs (Constantify): Added support for constifying bools.
12302
12303         (RootContext.LookupType): Added a cache for values looked up in
12304         the declaration space.
12305
12306         * typemanager.cs (FindMembers): Now is a front-end to
12307         RealFindMembers, and provides a two-level hashtable-based cache to
12308         the request.  
12309
12310         15% performance improvement: from 22.5 to 19.2 seconds.
12311
12312         * expression.cs (IsParamsMethodApplicable): use foreach.
12313         (Invocation.DoResolve): ditto.
12314         (New.DoResolve): ditto.
12315         (ArrayCreation.DoResolve): ditto.
12316
12317         * ecore.cs (FindMostEncompassingType): use foreach.
12318
12319         * delegate.cs (NewDelegate.DoResolve): Use foreach
12320
12321         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
12322         (RemoveMethods): use foreach.
12323
12324         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
12325         nested foreach statements instead of for, and also break out of
12326         the inner loop once a match is found.
12327
12328         (Invocation.OverloadResolve): Use foreach, simplify the code. 
12329
12330 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
12331
12332         * cfold.cs (BinaryFold): During an enumeration evaluation context,
12333         we actually unwrap the expression to allow for extra information
12334         to be extracted. 
12335
12336         * expression.cs: Use Shr_Un on unsigned operations. 
12337
12338 2002-05-08  Ravi Pratap  <ravi@ximian.com>
12339
12340         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
12341         applicable operators was not being considered correctly. This closes
12342         the bug Miguel reported.
12343
12344 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
12345
12346         * attribute.cs: check that the type derives from System.Attribute
12347         and report the correct error in that case (moved the duplicate code to
12348         its own method, too).
12349
12350 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
12351
12352         * attribute.cs: lookup attribute type name as the spec says: first the
12353         bare attribute name and then name + "Attribute" (nant compiles with
12354         mcs after this fix).
12355
12356 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
12357
12358         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
12359         Because of the way we parse things, we should try to see if a
12360         UIntConstant can fit in an integer.
12361
12362 2002-05-07  Ravi Pratap  <ravi@ximian.com>
12363
12364         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
12365         when we are in an explicit context.
12366
12367         (ConvertReferenceExplicit): When converting from Iface type S to Class
12368         T make sure the rules are implemented as an OR.
12369
12370         * parameter.cs (ParameterType): Make it a property for now although the
12371         purpose really isn't anything immediate.
12372
12373         * expression.cs (Is*Applicable): Do better checking on the parameter type
12374         of a ref/out parameter. The ones from the system assemblies are already 
12375         marked with the correct type so we don't need to do any correction.
12376
12377         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
12378         the object type is standard too so include that.
12379
12380 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
12381
12382         * ecore.cs (StandardConversionExists): Augment with missing code:
12383         deal with IntConstant, LongConstants and Enumerations.
12384
12385         * assign.cs: Report the error, instead of failing silently
12386
12387         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
12388         typecontainer that they are declared, because the
12389         typecontainer/namespace will have the list of using clauses that
12390         need to be applied.
12391
12392         Assembly Attributes were escaping the normal registration
12393         mechanism. 
12394
12395         (EmitCode): Apply attributes within an EmitContext that represents
12396         the container they were declared on.
12397
12398         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
12399
12400 2002-05-06  Ravi Pratap  <ravi@ximian.com>
12401
12402         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
12403         Revamp completely - make much cleaner as we now operate only
12404         on a set of Types.
12405
12406         (FindMostSpecificSource, FindMostSpecificTarget): New methods
12407         to implement the logic detailed in the spec more correctly.
12408
12409         (UserDefinedConversion): Update accordingly.
12410
12411 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
12412
12413         * statement.cs: Return flow analysis information up.
12414
12415         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
12416         and the default.
12417
12418         (token): Do not consume an extra character before calling
12419         decimal_digits.
12420
12421 2002-05-06  Piers Haken <piersh@friskit.com>
12422
12423         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
12424
12425 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
12426
12427         * class.cs (Constructor.Emit): Set the IsStatic flag in the
12428         EmitContext during the instance constructor initializer
12429         resolution, to stop access to instance variables.
12430
12431         This is mandated by the spec, last paragraph of the `constructor
12432         initializers' section. 
12433
12434 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
12435
12436         * cs-parser.jay, class.cs (Accessor): new class used to represent
12437         an accessor (get or set).  In the past we used `null' to represent
12438         a missing accessor.  But this is ambiguous because there was no
12439         way to tell in abstract indexers/properties if one of them was
12440         specified.
12441
12442         Now there is a way of addressing that.
12443
12444         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
12445         instead of FindMembers.
12446
12447         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
12448         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
12449
12450         * attribute.cs: Treat indexers and properties as the same in terms
12451         of applying attributes
12452
12453         * ecore.cs (FindMostEncompassedType): Use statically initialized
12454         EmptyExpressions()s like we do elsewhere to avoid creating useless
12455         objects (and we take this out of the tight loop).
12456
12457         (GetConversionOperators): Move the code to extract the actual
12458         operators to a separate routine to clean things up.
12459
12460 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
12461
12462         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
12463         events are always registered FieldBuilders.
12464
12465         * class.cs (FieldBase): New class shared by Fields 
12466
12467         * delegate.cs: If we are a toplevel delegate, use our full name.
12468         If we are a nested delegate, then only use our tail name.
12469
12470 2002-05-02  Ravi Pratap  <ravi@ximian.com>
12471
12472         * expression.cs (IsApplicable): Ensure that we add the "&" to
12473         ref/out types before comparing it with the type of the argument.
12474
12475         (IsParamsMethodApplicable): Ditto.
12476
12477         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
12478         silly me ;-)
12479
12480         * delegate.cs : Handle the case when we have more than one applicable
12481         method. Flag an error only when we finish checking all.
12482
12483 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
12484
12485         * expression.cs: Add support for boolean static initializers.
12486
12487 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
12488
12489         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
12490
12491         * parameter.cs (ComputeParameterTypes,
12492         ComputeAndDefineParameterTypes): Better error handling: now we
12493         clear the `types' cache if we fail during any of the type lookups.
12494         We also return the status code correctly to our caller
12495
12496         * delegate.cs: If we fail to define a delegate, abort the extra
12497         steps. 
12498
12499         * expression.cs (Binary.ResolveOperator): for
12500         operator==(object,object) and operator !=(object, object) we also
12501         have to verify that there is an implicit conversion from one to
12502         the other.
12503
12504         (ArrayAccess.DoResolve): Array Access can operate on
12505         non-variables. 
12506
12507 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
12508
12509         * assign.cs (CompoundAssign): A new class used as a "flag" that
12510         the assignment actually is happening as part of a compound
12511         assignment operator.
12512
12513         During compound assignment, a few new rules exist to enable things
12514         like:
12515
12516         byte b |= 1 + 2
12517
12518         From the spec:
12519
12520         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
12521         to the type of x) if y is implicitly convertible to the type of x,
12522         and the operator is a builtin operator and the return type of the
12523         operator is explicitly convertible to the type of x. 
12524
12525         * rootcontext.cs: Reset warning level to 2.  4 catches various
12526         "interesting" features in mcs, we must clean this up at some
12527         point, but currently am trying to kill other bugs ;-)
12528
12529         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
12530         in container classes as well.  
12531
12532         * expression.cs (Binary.ResolveOperator): Handle string case
12533         before anything else (as operator overloading does emit an error
12534         before doing anything else).
12535
12536         This code could go away when we move to a table driven model, but
12537         i could not come up with a good plan last night.
12538
12539 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
12540
12541         * typemanager.cs (CSharpName): reimplementation using regex.
12542         * class.cs: added null check for fields in Emit
12543         * rootcontext.cs: set warninglevel to 4
12544
12545 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
12546
12547         * typemanager.cs (CSharpName): reimplemented with Lupus
12548         suggestion.
12549
12550 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
12551
12552         * statement.cs (If): correclty implement Resolve, because we were
12553         not catching sem errors in there.  The same process is needed
12554         everywhere else. 
12555         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
12556
12557
12558         (Statement.Warning_DeadCodeFound): Factorize code.
12559         (While): Report dead code here too.
12560
12561         (Statement): Added Resolve virtual method to allow
12562         for resolution split from the emit code.
12563
12564 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
12565
12566         * statement.cs (EmitBoolExpression): No longer try to resolve the
12567         expression here.    
12568         (MakeBoolean): New utility function that resolve, implicitly
12569         converts to boolean and tags the expression. 
12570
12571
12572         (If, Do): Implement dead code elimination.
12573         (While): Implement loop inversion
12574
12575         (Do, While, For, If): Resolve the expression prior to calling our
12576         code generation.
12577
12578 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
12579
12580         * class.cs:
12581           - added method Report28 (warning: program has more than one entry point)
12582           - added method IsEntryPoint, implements paragraph 10.1 of the spec
12583           - modified method Method.Define, the part at the end of the method
12584
12585         * rootcontext.cs: added static public Location EntryPointLocation;
12586           
12587         * ../errors/cs0028.cs : Add test case for the above warning.              
12588
12589         * typemanager.cs:
12590           - modified method CSharpName to allow arrays of primitive type to
12591             be printed nicely (e.g. instead of System.Int32[][] it now prints
12592             int[][])
12593           - added method CSharpSignature: returns the signature of a method
12594             in string format to be used in reporting errors, warnings, etc.
12595
12596         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
12597         with String.Empty.
12598
12599 2002-04-26  Ravi Pratap  <ravi@ximian.com>
12600
12601         * delegate.cs (Define): Fix extremely silly bug where I was
12602         setting the type of the 'object' parameter of the BeginInvoke
12603         method to System.IAsyncResult instead of System.Object ;-)
12604
12605 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
12606
12607         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
12608         here. 
12609
12610         (Constructor.Emit): return if we fail to initialize the
12611         constructor.  Another door closed!  
12612
12613         * expression.cs (New.DoResolve): Improve error message (from -6 to
12614         1501).  Use DeclaredOnly lookup to find the exact constructor.
12615
12616         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
12617         loop.  This is useful.
12618
12619         * cs-parser.jay: Adjust the default parameters so that destructors
12620         have the proper signature.
12621
12622 2002-04-26  Martin Baulig  <martin@gnome.org>
12623
12624         * driver.cs (LoadAssembly): If `assembly' contains any characters
12625         which are only valid in path names and not in assembly names
12626         (currently slash, backslash and point), use Assembly.LoadFrom ()
12627         instead of Assembly.Load () on the `assembly' (before iteration
12628         over the link_paths).
12629
12630 2002-04-26  Martin Baulig  <martin@gnome.org>
12631
12632         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
12633
12634 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
12635
12636         * class.cs (Property): use the new typemanager.MemberLookup
12637
12638         (TypeContainer.MemberLookup): Implement using the
12639         TypeManager.MemberLookup now. 
12640
12641         * typemanager.cs: Make MemberLookup a function of the TypeManager,
12642         and return MemberInfos, so that these can be used without an
12643         EmitContext (what we had before).
12644
12645 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
12646
12647         * expression.cs: Fix the case where the argument to params if the
12648         type of the params.  I omitted handling this before.   Fixed
12649
12650 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
12651
12652         * driver.cs: Call BootCorlib_PopulateCoreType
12653
12654         * class.cs (Property.CheckBase): Check for properties only, not
12655         for all members. 
12656
12657         * interface.cs: Temporary hack: try/catch around the
12658         CustomAttributeBuilder, because I am getting an exception that I
12659         do not understand.
12660
12661         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
12662         types whose definitions are required to be there (attributes are
12663         defined before standard types).
12664
12665         Compute definitions as we boot the various types, as they are used
12666         immediately (value_type class will need object_type, but if we do
12667         not initialize object_type, we will pass a null, which will let
12668         the runtime pick the System.Object from the existing corlib, which
12669         is not what we want).
12670
12671 2002-04-22  Patrik Torstensson <totte@labs2.com>
12672
12673         * cs-tokenizer.cs: fixed a number of trim() issues.
12674
12675 2002-04-22  Ravi Pratap  <ravi@ximian.com>
12676
12677         * expression.cs (Argument.Type): Ensure that we return the correct
12678         type when we have out or ref parameters [in which case we 
12679         append a "&"].
12680
12681 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
12682
12683         * class.cs (Property, Indexer): Allow extern modifier in there. 
12684
12685         * typemanager.cs (InitBaseTypes): Initializes object_type and
12686         value_type, since those will be used early on during the bootstrap
12687         process to compile corlib.
12688
12689         (InitCoreTypes): Move code from here to InitBaseTypes.
12690
12691 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
12692
12693         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
12694         single-dimension arrays as using the ldlen opcode.  
12695
12696         Daniel Lewis discovered this optimization.  
12697
12698         * typemanager.cs: Add signature for System.Array::get_Length
12699
12700 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12701
12702         * statement.cs: report the error when the foreach does not apply to an
12703         array nor a collection.
12704
12705 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
12706
12707         * expression.cs: Add implicit conversions to the operator ~.
12708
12709         * constant.cs (DecimalConstant.Emit): Emit decimal value.
12710
12711         * typemanager.cs: Locate the decimal constructor.
12712
12713 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12714
12715         * attribute.cs: use the new property of TypeOf.
12716         * expression.cs: added 'get' property around typearg.
12717
12718         These changes fix a build breaker reported by NickD. Is this the
12719         correct way to fix?  If not, please, revert my changes and make it
12720         work :-).
12721
12722 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
12723
12724         * attribute.cs: Add support for typeof in attribute invocations.
12725         I am not sure that this is right though.
12726
12727 2002-04-14  Duncan Mak  <duncan@ximian.com>
12728
12729         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
12730         Binary.Operator.Division case.
12731
12732 2002-04-13  Ravi Pratap  <ravi@ximian.com>
12733
12734         * class.cs (DefineType): Ensure that we do a proper check on
12735         attribute types and also register it with the TypeManager.
12736
12737         (TypeContainer.Targets): The default for attribute types is
12738         AttributeTargets.All.
12739
12740         * attribute.cs (ApplyAttributes): Registering the attribute type
12741         is done elsewhere, not when we discover we have a Usage attribute.
12742
12743 2002-04-12  Ravi Pratap  <ravi@ximian.com>
12744
12745         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
12746         and get rid of is_delegate parameter.
12747
12748         * everywhere : update.
12749
12750 2002-04-12  Ravi Pratap  <ravi@ximian.com>
12751
12752         * cs-parser.jay (compilation_unit): Revamp completely to use
12753         some new ideas that I got from Rhys' grammar to solve the problems
12754         with assembly level attributes.
12755
12756         (outer_declaration): New grammar production.
12757
12758         (attribute_sections): Add.
12759
12760         (opt_attributes): Base on attribute_sections
12761
12762         (namespace_declaration): Allow opt_attributes to tackle the case
12763         when we have assembly level attributes - we are clever in this
12764         regard now ;-)
12765
12766         * attribute.cs (ApplyAttributes): Do not worry about assembly 
12767         attributes in the non-global context.
12768
12769         * rootcontext.cs (AddGlobalAttributes): Go back to using this
12770         instead of SetGlobalAttributes.
12771
12772         * class.cs, rootcontext.cs : Ensure we define and generate 
12773         attribute types before anything else.
12774
12775         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
12776         and flag the new error -20 for the case when the attribute type
12777         does not have valid targets specified. csc does not catch this.
12778
12779         * ../errors/errors.txt : update for error # -20
12780
12781 2002-04-11  Ravi Pratap  <ravi@ximian.com>
12782
12783         * support.cs (InternalParameters.ParameterModifier): Do some null
12784         checking and return sane values.
12785
12786         * class.cs (Method.Define): If we are a PInvoke method, ensure
12787         that we are static and extern. Report error # 601
12788
12789         * ../errors/cs0601.cs : Add test case for the above error.
12790
12791 2002-04-07  Ravi Pratap  <ravi@ximian.com>
12792
12793         * rootcontext.cs (attribute_types): We need to keep type of
12794         all attribute types separately and emit code for them first.
12795
12796         (RegisterAttribute) : Implement.
12797
12798         * class.cs (DefineType): Check if the current Type is a custom
12799         attribute type and register it accordingly.
12800
12801         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
12802         adding the first attribute twice and rename to
12803
12804         (SetGlobalAttributes): this.
12805
12806         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
12807         lookups.
12808
12809         * attribute.cs (ApplyAttributes): Take an additional argument telling us
12810         if we are processing global arguments. Hmm, I am unsure of this.
12811
12812 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12813
12814         * expression.cs: added static array of strings to avoid calling
12815         Enum.ToString () for Operator in Binary. Significant recover of
12816         performance.
12817
12818 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
12819
12820         * class.cs (FindMembers): Allow the Builders of the various
12821         members to be null.  If they are skip them.  This only happens
12822         during the PInvoke declaration.
12823
12824 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
12825
12826         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
12827         failure, so we do not keep going afterwards.
12828
12829         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
12830         wanted to pass `false' as the `is_delegate' argument.  If this is
12831         the case, why not use delegate_type == null to mean `is_delegate =
12832         false' and anything else as is_delegate = true.
12833
12834 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
12835
12836         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
12837         code for the section, not the beginning of the tests.
12838
12839 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
12840
12841         * cfold.cs: Handle operator + (Enum x, Underlying x) 
12842
12843         * expression.cs (Binary): same.  Warn about errors where we have
12844         Enum/Enum in operator + as well.
12845
12846 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
12847
12848         * statement.cs:
12849                 - added support for switch(bool)
12850                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
12851                 - add TableSwitchEmit() to handle table-based switch statements
12852
12853 2002-04-05  Ravi Pratap  <ravi@ximian.com>
12854
12855         * expression.cs (Invocation.OverloadResolve): Factor out code which
12856         does parameter compatibility checking with arguments so that we can 
12857         re-use the code even from Delegate.VerifyApplicability
12858
12859         (VerifyArgumentsCompat): Move above code here.
12860
12861         * delegate.cs (VerifyApplicability): Get rid of duplicate code
12862         and instead make a call to the above method.
12863
12864 2002-03-31  Ravi Pratap  <ravi@ximian.com>
12865
12866         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
12867         We use it to keep track of classes which are attribute types.
12868
12869 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
12870
12871         * delegate.cs (Delegate.Define): Correctly define the types in the
12872         presence of fixed and array parameters.
12873
12874         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
12875         doing FindMembers.
12876
12877         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
12878         include NonPublic after the first iteration.
12879
12880         * class.cs (Indexer.CheckBase): Only check if both parents are
12881         non-null. 
12882
12883         * cs-parser.jay (accessor_body): If empty, set to null.
12884
12885         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
12886         same code path here to resolve constants names that we did have in
12887         MemberAccess.DoResolve.  There is too much code duplicated here.
12888
12889 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
12890
12891         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
12892
12893         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
12894         to MakeUnionSet.
12895
12896         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
12897         tokens, numbers and strings.
12898
12899         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
12900         parenthesis.
12901
12902         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
12903         asyncronous parameters and the regular parameters.  
12904
12905         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
12906         specify the target directory.
12907
12908         * expression.cs: (This.DoResolve): Simplify
12909         (As.Emit): Optimize, do not generate IsInst if the expression is
12910         always of the given type.
12911
12912         (Is.DoResolve): Bug fix, we were reporting both always/never for
12913         the is expression.
12914
12915         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
12916         creating too many unnecessary arrays.
12917
12918 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
12919
12920         * class.cs (EmitFieldInitializer): Use Assign expression to assign
12921         fields instead of rolling our own initializer.   Takes care of all
12922         implicit conversions, and drops unnecessary static checks/argument.
12923
12924 2002-03-31  Dick Porter  <dick@ximian.com>
12925
12926         * driver.cs: use the GetDirectories() return values properly, and
12927         use "/" as path separator.
12928
12929 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
12930
12931         * expression.cs (Unary): Optimize - - expr into expr.
12932         (Binary): Optimize a + (-b) into a -b.
12933
12934         * codegen.cs (CodeGen): Made all methods static.
12935
12936 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
12937
12938         * rootcontext.cs: 
12939
12940         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
12941         TypeBuilder property.
12942
12943         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
12944         instead. 
12945
12946         * tree.cs: Removed the various RecordXXXX, and replaced with a
12947         single RecordDecl.  Removed all the accessor methods, and just
12948         left a single access point Type 
12949
12950         * enum.cs: Rename DefineEnum to DefineType.
12951
12952         * decl.cs: New abstract method `DefineType' used to unify the
12953         Defines for Enumerations, Interfaces, TypeContainers and
12954         Delegates.
12955
12956         (FindType): Moved LookupInterfaceOrClass here.  Moved the
12957         LookupBaseClasses method that used to live in class.cs and
12958         interface.cs here, and renamed to FindType.
12959
12960         * delegate.cs: Implement DefineType.  Take advantage of the
12961         refactored pattern for locating the parent builder without taking
12962         the parent_builder argument (which we know does not work if we are
12963         nested, and triggering a toplevel definition).
12964
12965 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
12966
12967         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
12968         accessibility of a member has changed during override and report
12969         an error if so.
12970
12971         * class.cs (Method.Define, Property.Define): Only complain on
12972         overrides if the method is private, any other accessibility is
12973         fine (and since we just checked the permission is the same, we are
12974         good to go).
12975
12976         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
12977         and elif are processed always.  The other pre-processing
12978         directives are only processed if we are "taking" the path
12979
12980 2002-03-29  Martin Baulig  <martin@gnome.org>
12981
12982         * class.cs (Method.Emit): Only emit symbolic debugging info if the
12983         current location is not Null.
12984
12985         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
12986         a separate method so we can profile it.
12987
12988         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
12989         `span.Seconds' are just seconds, but no minutes or hours.
12990         (MainDriver): Profile the CodeGen.SaveSymbols calls.
12991
12992 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
12993
12994         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
12995         Remove the gratuitous set of Final:
12996
12997                                 // If an interface implementation, then we can set Final.
12998                                 if (((flags & MethodAttributes.Abstract) == 0) &&
12999                                     implementing.DeclaringType.IsInterface)
13000                                         flags |= MethodAttributes.Final;
13001
13002         I do not know what I was smoking when I used that.
13003
13004
13005         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
13006         step into fixing the name resolution issues for delegates and
13007         unifying the toplevel name resolution.
13008
13009 2002-03-28  Martin Baulig  <martin@gnome.org>
13010
13011         * class.cs (Method.Emit): If we have a symbol writer, call its
13012         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
13013         tell it about the current method.
13014
13015         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
13016         writer that we're going to emit the first byte of IL code for a new
13017         statement (a new source line).
13018         (EmitContext.EmitTopBlock): If we have a symbol writer, call
13019         EmitContext.Mark() before emitting any code.
13020
13021         * location.cs (SymbolDocument): Return null when we're Null.
13022
13023         * statement.cs (Statement): Moved the `Location loc' variable here.
13024         (Statement.EmitBoolExpression): If we have a symbol writer, call
13025         ec.Mark() before emitting any code to tell it that we're at the
13026         beginning of a new statement.
13027         (StatementExpression): Added `Location' argument to the constructor.
13028         (Block): Added public readonly variable `StartLocation' and public
13029         variable `EndLocation'.  The latter is to be set using SetEndLocation().
13030         (Block): Added constructor which takes a start and end location.
13031         (Block.SetEndLocation): New method. This sets the end location.
13032         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
13033         local variables we create.
13034         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
13035         each statement and do also mark the begin and end of the block.
13036
13037         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
13038         tell it the current lexer.Location, use Location.Null for the end of the
13039         block.
13040         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
13041         current block, set its end location using SetEndLocation().
13042         (statement_expression): StatementExpression constructor now takes the
13043         lexer.Location as additional argument.
13044         (for_statement, declare_local_variables): Likewise.
13045         (declare_local_variables): When creating a new implicit block, use the
13046         new Block constructor and pass it the lexer.Location.
13047
13048 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
13049
13050         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
13051         members also on the parent interfaces recursively.
13052
13053 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
13054
13055         * report.cs: Use new formats, since Gonzalo finished the missing
13056         bits. 
13057
13058         * expression.cs (Binary.ResolveOperator): added missing operator|
13059         operator& and operator^ for bool/bool.
13060
13061         * cs-parser.jay: CheckDef now takes a Location argument that is
13062         used to report errors more precisly (instead of reporting the end
13063         of a definition, we try to track something which is a lot closer
13064         to the source of the problem).
13065
13066         * cs-tokenizer.cs: Track global token use, so we can properly flag
13067         the use of #define/#undef after the first token has been seen.
13068
13069         Also, rename the reportXXXX to Error_DescriptiveName
13070
13071         * decl.cs (DeclSpace.IsTopLevel): Move property here from
13072         TypeContainer, so that Enum and Interface can use this too.
13073
13074         * class.cs (TypeContainer.LookupInterfaceOrClass,
13075         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
13076         `builder' argument.  Typically this was used to pass the parent
13077         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
13078         the definition).  
13079
13080         The problem is that a nested class could trigger the definition of
13081         a toplevel class, and the builder would be obviously wrong in that
13082         case. 
13083
13084         So we drop this argument, and we compute dynamically the
13085         TypeBuilder/ModuleBuilder (the correct information was available
13086         to us anyways from DeclSpace.Parent)
13087
13088         * interface.cs (Interface.DefineInterface): Drop builder
13089         parameter cleanup like class.cs
13090
13091         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
13092         like class.cs
13093
13094         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
13095         values. 
13096
13097         (Try.Emit): Propagate the returns value from the statement.
13098
13099         (Return.Emit): Even if we are leavning 
13100
13101         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
13102
13103         * modifiers.cs: Fix the computation of MethodAttributes flags.
13104
13105 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
13106
13107         * driver.cs: allow compilation of files that start with '/'.
13108         Add a default case when checking the argument of --target.
13109
13110 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
13111
13112         * interface.cs: Implement the same search algorithm for types in
13113         the interface code.
13114
13115         * delegate.cs: Do not allow multiple definition.
13116
13117         * Recovered ChangeLog that got accidentally amputated
13118
13119         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
13120
13121         * rootcontext.cs: Load manually enum to allow core classes to
13122         contain enumerations.
13123
13124         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
13125         Update to new static methods in TypeManager.
13126
13127         * typemanager.cs (GetMethod, GetConstructor): Use our
13128         implementation of FindMembers to find the members, since during
13129         corlib compilation, the types are TypeBuilders and GetMethod and
13130         GetConstructor do not work.
13131
13132         Make all methods in TypeManager static.
13133
13134         (InitCodeHelpers): Split the functionality from
13135         the InitCodeTypes function.
13136
13137         * driver.cs: Call InitCodeHelpers after we have populated the
13138         types. 
13139
13140         * cs-parser.jay (delegate_declaration): we did not used to compute
13141         the delegate name correctly for void delegates.
13142
13143 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
13144
13145         * rootcontext.cs (RootContext): Init the interface_resolve_order
13146         and type_container_resolve_order always.
13147
13148         (ResolveCore, BootstrapCorlib_ResolveClass,
13149         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
13150         compiler when compiling with --nostdlib
13151
13152         * class.cs (TypeContainer.DefineType): Check that our parent is
13153         not null.  This test is most important when we are bootstraping
13154         the core types.
13155
13156         * codegen.cs: Split out the symbol writing code.
13157
13158 2002-03-25  Martin Baulig  <martin@gnome.org>
13159
13160         * driver.cs (-g): Made -g an alias for --debug.
13161
13162 2002-03-24  Martin Baulig  <martin@gnome.org>
13163
13164         * codegen.cs (SymbolWriter): New public variable. Returns the
13165         current symbol writer.
13166         (CodeGen): Added `bool want_debugging_support' argument to the
13167          constructor. If true, tell the ModuleBuild that we want debugging
13168         support and ask it for the ISymbolWriter.
13169         (Save): If we have a symbol writer, call it's Close() method after
13170         saving the assembly.
13171
13172         * driver.c (--debug): New command line argument to create a
13173         debugger information file.
13174
13175         * location.cs (SymbolDocument): New public property. Returns an
13176         ISymbolDocumentWriter object for the current source file or null
13177         if we don't have a symbol writer.
13178
13179 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
13180
13181         * driver.cs (LoadAssembly): Correctly return when all the paths
13182         have been tried and not before.
13183
13184         * statement.cs (Switch.Emit): return the actual coverage for this
13185         statement (returns/not-returns)
13186
13187         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
13188         switch of the statement if we are the last switch section.  That
13189         kills two problems: try/catch problems (we used to emit an empty
13190         nop at the end) and switch statements where all branches would
13191         return. 
13192
13193 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
13194
13195         * driver.cs: Add default assemblies (the equivalent to the
13196         Microsoft CSC.RSP file)
13197
13198         * cs-tokenizer.cs: When updating `cols and setting it to zero,
13199         also update tokens_seen and set it to false.
13200
13201         * driver.cs: Implement --recurse for Mike.
13202
13203         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
13204         correctly splitting out the paths.
13205
13206 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
13207
13208         * interface.cs (Interface.PopulateProperty): Instead of using
13209         `parent' as the declaration space for the set parameters, use
13210         `this' 
13211
13212         * support.cs (InternalParameters): InternalParameters constructor
13213         takes a DeclSpace instead of a TypeContainer.
13214
13215         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
13216         types are being initialized, load the address of it before calling
13217         the function.  
13218
13219         (New): Provide a mechanism to disable the generation of local
13220         value type temporaries when the caller will be providing us with
13221         an address to store it.
13222
13223         (ArrayCreation.EmitDynamicInitializers): Use it.
13224
13225 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
13226
13227         * expression.cs (Invocation.EmitArguments): Only probe for array
13228         property if there is more than one argument.  Sorry about that.
13229
13230         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
13231         empty param arrays.
13232
13233         * class.cs (Method.LabelParameters): Fix incorrect code path that
13234         prevented the `ParamArrayAttribute' from being applied to the
13235         params attribute.
13236
13237 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
13238
13239         * support.cs (ReflectionParameters): Correctly compute whether the
13240         last argument is a params array.  Fixes the problem with
13241         string.Split ('a')
13242
13243         * typemanager.cs: Make the assemblies array always be non-null
13244         (empty, but non-null)
13245
13246         * tree.cs (RecordDecl): New function that abstracts the recording
13247         of names.  This reports error 101, and provides a pointer to the
13248         previous declaration.  Fixes a crash in the compiler.
13249
13250         * cs-parser.jay (constructor_declaration): Update to new grammar,
13251         and provide a constructor_body that can be empty.
13252
13253 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
13254
13255         * driver.cs: Add support for --resources.
13256
13257         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
13258         Make all types for the various array helper methods be integer.
13259
13260         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
13261         CheckState to ConvCast.
13262
13263         (ConvCast): Now it takes a `checked' state argument, to avoid
13264         depending on the emit context for the conversion, and just using
13265         the resolve time setting.
13266
13267         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
13268         instead of Invocation.EmitArguments.  We do not emit the original
13269         arguments, instead we emit those which have been converted to
13270         unsigned int expressions.
13271
13272         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
13273
13274         * codegen.cs: ditto.
13275
13276         * expression.cs (LocalVariableReference): Drop the use of the
13277         Store function that depended on the variable index.
13278
13279         * statement.cs (VariableInfo): Drop the `Idx' property from this
13280         class, as this is not taking into account the indexes for
13281         temporaries tat we generate during the execution, getting the
13282         indexes wrong.
13283
13284         * class.cs: First emit class initializers, then call the parent
13285         constructor. 
13286
13287         * expression.cs (Binary): Fix opcode emision.
13288         (UnaryMutator.EmitCode): Support checked code generation
13289
13290         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
13291         matches for events for both the Static and Instance scans,
13292         pointing to the same element.   Fix that.
13293
13294 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
13295
13296         * rootcontext.cs (ResolveTree): Always set the
13297         interface_resolve_order, because nested interfaces will be calling
13298         into us.
13299
13300         * class.cs (GetInterfaceOrClass): Track the same resolution
13301         process used by TypeManager.LookupType.  This fixes the nested
13302         type lookups in class declarations (separate path from
13303         LookupType). 
13304
13305         (TypeContainer.DefineType): Also define nested interfaces.
13306         (TypeContainer.RegisterOrder): New public function used to
13307         register the order in which child interfaces need to be closed.
13308
13309         Nested interfaces need to be closed after their parents have been
13310         created. 
13311
13312         * interface.cs (InterfaceAttr): Put all the logic for computing
13313         the interface attribute here. 
13314
13315         (DefineInterface): Register our interface order with the
13316         RootContext or with the TypeContainer depending on the case.
13317
13318 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
13319
13320         * cs-parser.jay: rework foreach statement to work with the new
13321         changes to the policy on SimpleNames.
13322
13323         * report.cs: support Stacktrace on warnings as well.
13324
13325         * makefile: drop --unsafe and /unsafe from the compile.
13326
13327 2002-03-13  Ravi Pratap  <ravi@ximian.com>
13328
13329         * ecore.cs (StandardConversionExists): Modify to take an Expression
13330         as the first parameter. Ensure we do null -> reference type conversion
13331         checking.
13332
13333         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
13334         temporary Expression objects.
13335
13336 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
13337
13338         * interface.cs: workaround bug in method overloading resolution
13339         (there is already a bugzilla bug for it).
13340
13341 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
13342
13343         We could also solve this problem by having a separate path for
13344         performing type lookups, instead of DoResolve, we could have a
13345         ResolveType entry point, and only participating pieces of the
13346         production (simplename, deref, array) would implement this. 
13347
13348         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
13349         signal SimpleName to only resolve type names and not attempt to
13350         resolve anything else.
13351
13352         * expression.cs (Cast): Set the flag.
13353
13354         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
13355
13356         * class.cs: Only report 108 if there is no `new' modifier.
13357
13358         * cs-parser.jay: rework foreach statement to work with the new
13359         changes to the policy on SimpleNames.
13360
13361         * report.cs: support Stacktrace on warnings as well.
13362
13363         * makefile: drop --unsafe and /unsafe from the compile.
13364
13365 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
13366
13367         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
13368         lookups here, instead of doing that at parse time.  This means
13369         that our grammar will not introduce `LocalVariableReferences' as
13370         expressions at this point.  That solves the problem of code like
13371         this:
13372
13373         class X {
13374            static void Main ()
13375            { int X = 1;
13376             { X x = null }}}
13377
13378         This is only half the fix.  The full fix requires parameters to
13379         also be handled in this way.
13380
13381         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
13382         makes the use more obvious of the DeclSpace.  The
13383         ec.TypeContainer.TypeBuilder is now only used to pull the
13384         TypeBuilder for it.
13385
13386         My theory is that I can get rid of the TypeBuilder completely from
13387         the EmitContext, and have typecasts where it is used (from
13388         DeclSpace to where it matters).  
13389
13390         The only pending problem is that the code that implements Aliases
13391         is on TypeContainer, and probably should go in DeclSpace.
13392
13393         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
13394         lookups here, instead of doing that at parse time.  This means
13395         that our grammar will not introduce `LocalVariableReferences' as
13396         expressions at this point.  That solves the problem of code like
13397         this:
13398
13399         class X {
13400            static void Main ()
13401            { int X = 1;
13402             { X x = null }}}
13403
13404         This is only half the fix.  The full fix requires parameters to
13405         also be handled in this way.
13406
13407         * class.cs (Property.DefineMethod): When implementing an interface
13408         method, set newslot, when implementing an abstract method, do not
13409         set the flag (before we tried never setting it, or always setting
13410         it, which is the difference).
13411         (Indexer.DefineMethod): same.
13412         (Method.DefineMethod): same.
13413
13414         * ecore.cs: Only set the status used flag if we get back a Field.
13415
13416         * attribute.cs: Temporary hack, so Paolo can keep working.
13417
13418 2002-03-08  Ravi Pratap  <ravi@ximian.com>
13419
13420         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
13421         the unmanaged type in the case we have a MarshalAs attribute.
13422
13423         (Resolve): Handle the case when we are parsing the special MarshalAs
13424         attribute [we need to store the unmanaged type to use later]
13425
13426         * typemanager.cs (marshal_as_attr_type): Built in type for the 
13427         MarshalAs Attribute.
13428
13429         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
13430         on parameters and accordingly set the marshalling info.
13431
13432 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
13433
13434         * class.cs: Optimizing slightly by removing redundant code after
13435         we switched to the `NoTypes' return value.
13436         (Property.DefineMethod): use NoTypes here too.
13437
13438         This fixes the bug I introduced in my last batch of changes.
13439
13440 2002-03-05  Ravi Pratap  <ravi@ximian.com>
13441
13442         * tree.cs (RecordEnum): Add. We now keep track of enums too.
13443
13444         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
13445         Enums since those are types too. 
13446
13447         * cs-parser.jay (enum_declaration): Record enums as we parse them.
13448
13449         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
13450         thanks to a call during the lookup process.
13451
13452 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
13453
13454         * statement.cs (Foreach): Lots of work to accomodate a particular
13455         kind of foreach statement that I had not kept in mind.  It is
13456         possible to have foreachs on classes that provide a GetEnumerator
13457         method that return objects that implement the "pattern" for using
13458         a foreach, there is no need to support GetEnumerator
13459         specifically. 
13460
13461         This is needed to compile nant.
13462
13463         * decl.cs: Only report 114 if the member is not `Finalize' and if
13464         the warning level is at least 2.
13465
13466         * class.cs: Moved the compare function from Method to
13467         MethodSignature. 
13468
13469         (MethodSignature.InheritableMemberSignatureCompare): Add new
13470         filter function that is used to extract inheritable methods from a
13471         class. 
13472
13473         (Method.Define): Use the new `inheritable_method_signature_filter'
13474         delegate
13475
13476         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
13477         command. 
13478
13479 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
13480
13481         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
13482
13483         * cs-parser.jay: Add opt_semicolon to the interface declaration.
13484
13485         * expression.cs: Pass location information to
13486         ConvertImplicitStandard. 
13487
13488         * class.cs: Added debugging code to track return values from
13489         interfaces. 
13490
13491 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
13492
13493         * expression.cs (Is.DoResolve): If either side of the `is' is an
13494         interface, do not flag the warning.
13495
13496         * ecore.cs (ImplicitReferenceConversion): We need a separate test
13497         for interfaces
13498
13499         * report.cs: Allow for --fatal to be used with --probe.
13500
13501         * typemanager.cs (NoTypes): Move the definition for the empty Type
13502         array here. 
13503
13504         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
13505         properties. 
13506         (TypeContainer.DefineProxy): New function used to proxy to parent
13507         implementations when implementing interfaces.
13508         (TypeContainer.ParentImplements): used to lookup if our parent
13509         implements a public function that is required by an interface.
13510         (TypeContainer.VerifyPendingMethods): Hook this up.
13511
13512         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
13513         `modules' and `assemblies' arraylists into arrays.  We only grow
13514         these are the very early start up of the program, so this improves
13515         the speedof LookupType (nicely measured).
13516
13517         * expression.cs (MakeByteBlob): Replaced unsafe code with
13518         BitConverter, as suggested by Paolo.
13519
13520         * cfold.cs (ConstantFold.Binary): Special case: perform constant
13521         folding of string concatenation, but if either side is a string,
13522         and the other is not, then return null, and let the runtime use
13523         the concatenation on the string plus the object (using
13524         `Object.ToString'). 
13525
13526 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
13527
13528         Constant Folding has been implemented now.
13529
13530         * expression.cs (Unary.Reduce): Do not throw an exception, catch
13531         the error instead on types that are not supported in one's
13532         complement. 
13533
13534         * constant.cs (Constant and all children): New set of functions to
13535         perform implict and explicit conversions.
13536
13537         * ecore.cs (EnumConstant): Implement the new functions to perform
13538         conversion by proxying to the child expression.
13539
13540         * codegen.cs: (ConstantCheckState): Constant evaluation has its
13541         own separate setting that can not be turned off from the command
13542         line using --unchecked or --checked and is only controlled using
13543         the checked/unchecked statements and expressions.  This setting is
13544         used by the constant folder to flag errors.
13545
13546         * expression.cs (CheckedExpr, UncheckedExpr): Set the
13547         ConstantCheckState as well.   
13548
13549         During Resolve, they also have to flag the state, because the
13550         constant folder runs completely in the Resolve phase.
13551
13552         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
13553         well.
13554
13555 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
13556
13557         * cfold.cs: New file, this file contains the constant folder.
13558
13559         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
13560         argument to track whether we are using the resulting address to
13561         load or store a value and provide better error messages. 
13562
13563         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
13564         new AddressOf arguments.
13565
13566         * statement.cs (Foreach.EmitCollectionForeach): Update
13567
13568         * expression.cs (Argument.Emit): Call AddressOf with proper
13569         arguments to track usage.
13570
13571         (New.DoEmit): Call AddressOf with new arguments.
13572
13573         (Unary.Emit): Adjust AddressOf call.
13574
13575 2002-03-01  Ravi Pratap  <ravi@ximian.com>
13576
13577         * cs-parser.jay (member_access): Change the case for pre-defined types
13578         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
13579         this suggestion.
13580
13581         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
13582         a method body.
13583
13584         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
13585         essentially like methods and apply attributes like MethodImplOptions to them too.
13586
13587         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
13588         not being null.
13589
13590         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
13591         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
13592         is the DeclSpace.
13593
13594         * Update code everywhere accordingly.
13595
13596         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
13597
13598         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
13599
13600 2002-02-28  Ravi Pratap  <ravi@ximian.com>
13601
13602         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
13603         try performing lookups against those instead of jumping straight into using
13604         the 'using' clauses.
13605
13606         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
13607
13608         (LookupType): Perform lookups in implicit parents too.
13609
13610         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
13611         sequence as RootContext.LookupType. 
13612
13613         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
13614         the various cases of namespace lookups into this method.
13615
13616 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
13617
13618         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
13619         in positional arguments)
13620
13621         * class.cs (Operator): Update the AllowedModifiers to contain
13622         extern. 
13623
13624         * cs-parser.jay: Update operator declaration to allow for the
13625         operator body to be empty.
13626
13627         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
13628         values. 
13629
13630 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
13631
13632         * class.cs (Method.Emit): Label parameters.
13633
13634         * driver.cs: Return 1 or 0 as the program exit code.
13635
13636 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
13637
13638         * expression.cs: Special case the `null' object when trying to
13639         auto-compute the type, as anything can be explicitly converted to
13640         that. 
13641
13642         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
13643         spotting this Paolo.
13644
13645         (Expression.ImplicitNumericConversion): Perform comparissions of
13646         the type using the underlying type in the case of an enumeration
13647         rather than using the enumeration type for the compare.
13648
13649         Cope with the underlying == type case, which is not possible to
13650         catch before. 
13651
13652         (Expression.ConvertNumericExplicit): Perform comparissions of
13653         the type using the underlying type in the case of an enumeration
13654         rather than using the enumeration type for the compare.
13655
13656         * driver.cs: If the user does not supply an extension, assume .exe
13657
13658         * cs-parser.jay (if_statement): Rewrote so that we can track the
13659         location for the if statement.
13660
13661         * expression.cs (Binary.ConstantFold): Only concat strings when
13662         the operation is "+", not everything ;-)
13663
13664         * statement.cs (Statement.EmitBoolExpression): Take a location
13665         argument. 
13666         (If, While, Do): Track location.
13667
13668         * expression.cs (Binary.ResolveOperator): In the object + string
13669         case, I was missing a call to ConvertImplicit
13670
13671 2002-02-25  Ravi Pratap  <ravi@ximian.com>
13672
13673         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
13674         Location arguments. Ensure we use RootContext.LookupType to do our work
13675         and not try to do a direct Type.GetType and ModuleBuilder.GetType
13676
13677         * interface.cs (PopulateMethod): Handle the type of the parameter being
13678         null gracefully.
13679
13680         * expression.cs (Invocation.BetterFunction): Handle the case when we 
13681         have a params method with no fixed arguments and a call is made with no
13682         arguments.
13683
13684 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
13685
13686         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
13687         the verbatim-string-literal
13688
13689         * support.cs (InternalParameters.ParameterModifier): handle null
13690         fixed parameters.
13691         (InternalParameters.ParameterType): ditto.
13692
13693         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
13694         duplicating the name of the variable parameter.
13695         (GetParameterByName): Fix bug where we were not looking up array
13696         paramters if they were the only present (thanks Paolo!).
13697         (GetParameterInfo): We only have an empty set of types if both
13698         fixed and array are set to null.
13699         (GetParameterInfo-idx): Handle FixedParameter == null
13700
13701         * cs-parser.jay: Handle the case where there is no catch
13702         statements (missing null test).
13703
13704 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
13705
13706         * driver.cs (MainDriver): Be conservative on our command line
13707         handling.
13708
13709         Catch DirectoryNotFoundException when calling GetFiles.
13710
13711         (SplitPathAndPattern): Used to split the input specification into
13712         a path and a pattern that we can feed to Directory.GetFiles.
13713
13714 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
13715
13716         * statement.cs (Fixed): Implement the last case of the Fixed
13717         statement (string handling).
13718
13719         * expression.cs (StringPtr): New class used to return a char * to
13720         a string;  Used by the Fixed statement.
13721
13722         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
13723
13724         * expression.cs (Binary.ResolveOperator): Remove redundant
13725         MemberLookup pn parent type.
13726         Optimize union call, we do not need a union if the types are the same.
13727         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
13728         type.
13729
13730         Specialize the use of MemberLookup everywhere, instead of using
13731         the default settings. 
13732
13733         (StackAlloc): Implement stackalloc keyword.
13734
13735         * cs-parser.jay: Add rule to parse stackalloc.
13736
13737         * driver.cs: Handle /h, /help, /?
13738
13739         * expression.cs (MakeByteBlob): Removed the hacks we had in place
13740         before we supported unsafe code.
13741
13742         * makefile: add --unsafe to the self compilation of mcs.
13743
13744 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
13745
13746         * expression.cs (PointerArithmetic): New class that is used to
13747         perform pointer arithmetic.
13748         (Binary.Resolve): Handle pointer arithmetic
13749         Handle pointer comparission.
13750         (ArrayPtr): Utility expression class that is used to take the
13751         address of an array.
13752
13753         (ElementAccess): Implement array access for pointers
13754
13755         * statement.cs (Fixed): Implement fixed statement for arrays, we
13756         are missing one more case before we are done.
13757
13758         * expression.cs (Indirection): Implement EmitAssign and set the
13759         ExprClass to Variable.  This allows pointer dereferences to be
13760         treated as variables, and to have values assigned to them.
13761
13762         * ecore.cs (Expression.StoreFromPtr): New utility function to
13763         store values dereferencing.
13764
13765 2002-02-20  Ravi Pratap  <ravi@ximian.com>
13766
13767         * expression.cs (Binary.ResolveOperator): Ensure that we are
13768         not trying to operate on a void type - this fixes the reported
13769         bug.
13770
13771         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
13772         the parent implementation is sealed.
13773
13774         * ../errors/cs0239.cs : Add.
13775
13776         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
13777
13778         * typemanager.cs (unverifiable_code_type): Corresponds to 
13779         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
13780         which have unsafe code in them.
13781
13782         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
13783         unsafe context.
13784
13785 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
13786
13787         * cs-tokenizer.cs: Add support for @"litreal strings"
13788
13789         Make tokenizer accept pre-processor directives
13790         on any column (remove the old C-like limitation). 
13791
13792         * rootcontext.cs (EmitCode): Emit any global attributes.
13793         (AddGlobalAttributes): Used to keep track of assembly attributes. 
13794
13795         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
13796
13797         * cs-parser.jay: Add support for global attributes.  
13798
13799 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
13800
13801         * expression.cs (Indirection): New helper class.  Unary will
13802         create Indirection classes to be able to implement the
13803         IMemoryLocation interface on it.
13804
13805 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
13806
13807         * cs-parser.jay (fixed_statement): reference the right statement.
13808
13809         * statement.cs (Fixed.Emit): Finish implementing the fixed
13810         statement for the &x case.
13811
13812 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
13813
13814         * class.cs (Property.Define, Method.Define): Remove newslot when
13815         `implementing'.  
13816
13817         * modifiers.cs: My use of NewSlot when `Abstract' was set was
13818         wrong.  NewSlot should only be used if the `new' keyword is present.
13819
13820         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
13821         locating our system dir.  Sorry about this.
13822
13823 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
13824
13825         * driver.cs (GetSystemDir): Compute correctly the location of our
13826         system assemblies.  I was using the compiler directory instead of
13827         the library directory.
13828
13829 2002-02-13  Ravi Pratap  <ravi@ximian.com>
13830
13831         * expression.cs (BetterFunction): Put back in what Miguel commented out
13832         since it is the correct fix. The problem is elsewhere ;-)
13833
13834         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
13835         parameters of the parms method are themselves compatible or not !
13836
13837         (StandardConversionExists): Fix very dangerous bug where we were forgetting
13838         to check that a class implements an interface before saying that an implicit
13839         conversion was allowed. Use ImplementsInterface to do the checking.
13840
13841 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
13842
13843         * class.cs (Method.Define): Track whether we are an explicit
13844         implementation or not.  And only call DefineMethodOverride if we
13845         are an explicit implementation.
13846
13847         (Property.DefineMethod): Ditto.
13848
13849 2002-02-11  Ravi Pratap  <ravi@ximian.com>
13850
13851         * expression.cs (BetterFunction): Catch hideous bug which was
13852          preventing us from detecting ambiguous calls due to implicit casts i.e
13853         cs0121.
13854
13855 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
13856
13857         * support.cs (Pair): Remove un-needed method.  I figured why I was
13858         getting the error in cs-parser.jay, the variable in a foreach loop
13859         is readonly, and the compiler does not really treat this as a variable.
13860
13861         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
13862         instead of EQUALS in grammar.  
13863
13864         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
13865
13866         * expression.cs (Unary.DoResolve): Check whether the argument is
13867         managed or not.
13868
13869 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
13870
13871         * support.cs: Api for Pair to set a value.  Despite the fact that
13872         the variables are public the MS C# compiler refuses to compile
13873         code that accesses the field if the variable is part of a foreach
13874         statement. 
13875
13876         * statement.cs (Fixed): Begin implementation of the fixed
13877         statement.
13878
13879         (Block.AddVariable): Return the VariableInfo on success and null
13880         on failure instead of true/false. 
13881
13882         * cs-parser.jay (foreach): Catch errors on variables already
13883         defined (we were ignoring this value before) and properly unwind
13884         the block hierarchy
13885
13886         (fixed_statement): grammar for the fixed statement.
13887
13888 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
13889
13890         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
13891         pointer types to be incretemented.
13892
13893         (SizeOf): Implement.
13894
13895         * cs-parser.jay (pointer_member_access): Implement
13896         expr->IDENTIFIER production.
13897
13898         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
13899         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
13900         on safe contexts.
13901
13902         (Unary): Implement indirection.
13903
13904         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
13905         use in non-unsafe context).
13906
13907         (SimpleName.DoResolve): Check for pointers in field access on safe
13908         contexts. 
13909
13910         (Expression.LoadFromPtr): Factor the load-indirect code in this
13911         function.  This was duplicated in UnboxCast and ParameterReference
13912
13913 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
13914
13915         * expression.cs (ComposedCast): report an error if a pointer cast
13916         is used in a safe region.
13917
13918         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
13919         pointer type casts in unsafe context.
13920
13921         * codegen.cs (EmitContext): Set up IsUnsafe.
13922
13923         * cs-parser.jay (non_expression_type): Add productions for pointer
13924         casts. 
13925
13926         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
13927         code.  We should not use force into static mode if the method is
13928         not virtual.  Fixes bug in MIS
13929
13930         * statement.cs (Do.Emit, While.Emit, For.Emit,
13931         Statement.EmitBoolExpression): Add support to Do and While to
13932         propagate infinite loop as `I do return' semantics.
13933
13934         Improve the For case to also test for boolean constants.
13935
13936         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
13937         to the list of attributes we can add.
13938
13939         Remove `EmitContext' argument.
13940
13941         * class.cs (Method.Define): Apply parameter attributes.
13942         (Constructor.Define): Apply parameter attributes.
13943         (MethodCore.LabelParameters): Move here the core of labeling
13944         parameters. 
13945
13946         * support.cs (ReflectionParameters.ParameterModifier,
13947         InternalParameters.ParameterModifier): Use IsByRef on the type and
13948         only return the OUT bit for these parameters instead of in/out/ref
13949         flags.
13950
13951         This is because I miss-understood things.  The ParameterInfo.IsIn
13952         and IsOut represent whether the parameter has the [In] and [Out]
13953         attributes set.  
13954
13955 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
13956
13957         * ecore.cs (FieldExpr.Emit): Release temporaries.
13958
13959         * assign.cs (LocalTemporary.Release): new function.
13960
13961         * codegen.cs (EmitContext.GetTemporaryStorage,
13962         EmitContext.FreeTemporaryStorage): Rework the way we deal with
13963         temporary storage.  Now we can "put back" localbuilders when we
13964         are done with them
13965
13966 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
13967
13968         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
13969         need to make a copy of the variable to generate verifiable code.
13970
13971 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
13972
13973         * driver.cs: Compute dynamically the system directory.
13974
13975         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
13976         Slower, but more generally useful.  Used by the abstract
13977         registering implementation. 
13978
13979         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
13980         the rules for the special rule on Type/instances.  First check if
13981         we have the same name, and if so, try that special static path
13982         rather than the instance path.
13983
13984 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
13985
13986         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
13987         for, while and if.
13988
13989         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
13990         Enum, ValueType, Delegate or Array for non-corlib compiles.
13991
13992         * cs-tokenizer.cs: Catch long identifiers (645)
13993
13994         * typemanager.cs (IndexerPropetyName): Ravi never tested this
13995         piece of code.
13996
13997         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
13998         fix, we were returning too early, so we were not registering
13999         pending methods from abstract classes.
14000
14001         Do not register pending methods if the class is abstract.
14002
14003         * expression.cs (Conditional.DoResolve): Report circular implicit
14004         conversions when we neecd to compute it for conditional
14005         expressions. 
14006
14007         (Is.DoResolve): If the expression is always of the provided type,
14008         flag warning 183.  If the expression can not ever be of the
14009         provided type flag warning 184.
14010
14011         * class.cs: Catch 169 as well.
14012
14013         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
14014         read. 
14015
14016 2002-01-18  Nick Drochak  <ndrochak@gol.com>
14017
14018         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
14019
14020 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
14021
14022         * interface.cs: (PopulateMethod): Check for pointers being defined
14023         only if the unsafe context is active.
14024         (PopulateProperty): ditto.
14025         (PopulateIndexer): ditto.
14026
14027         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
14028         specified.  If pointers are present, make sure that they are
14029         present in an unsafe context.
14030         (Constructor, Constructor.Define): ditto.
14031         (Field, Field.Define): ditto.
14032         (Property, Property.Define): ditto.
14033         (Event, Event.Define): ditto.
14034
14035         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
14036         hashtable if there are classes or structs defined.
14037
14038         * expression.cs (LocalVariableReference.DoResolve): Simplify this
14039         code, as the constant resolution moved.
14040
14041         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
14042         the metadata, so we can flag error 133. 
14043
14044         * decl.cs (MemberCore.UnsafeOK): New function to test that a
14045         pointer is being declared in an unsafe context.
14046
14047 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
14048
14049         * modifiers.cs (Modifiers.Check): Require a Location argument.
14050         Report error 227 for Unsafe use.
14051
14052         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
14053
14054         * statement.cs (For.Emit): If the test is null, then report that
14055         we do `return', as we wont reach anything afterwards.
14056
14057         (Switch.SwitchGoverningType): Track the expression that matched
14058         the conversion.
14059
14060         * driver.cs: Allow negative numbers as an error code to flag.
14061
14062         * cs-parser.jay: Handle 1551.
14063
14064         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
14065
14066 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
14067
14068         * cs-parser.jay: Report 1518 (type declaration can only contain
14069         class, struct, interface, enum or delegate)
14070
14071         (switch_label): Report 1523 (keywords `case' or `default' must
14072         preced code)
14073
14074         (opt_switch_sections): Report 1522 (empty switch)
14075
14076         * driver.cs: Report 1515 (response file specified multiple times)
14077         Report 1516 (Source file specified multiple times).
14078
14079         * expression.cs (Argument.Resolve): Signal 1510
14080
14081         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
14082         access not allowed in static code)
14083
14084 2002-01-11  Ravi Pratap  <ravi@ximian.com>
14085
14086         * typemanager.cs (IsPointerType): Utility method which we are going
14087         to need a lot.
14088
14089         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
14090         the object type, so we take care of that.
14091
14092         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
14093
14094         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
14095         added to non-params parameters :-)
14096
14097         * typemanager.cs (CSharpName): Include 'void' type too. 
14098
14099         (void_ptr_type): Include in the set of core types.
14100
14101         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
14102         duplicating code.
14103
14104         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
14105         an unsafe context.
14106
14107         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
14108         completely forgotten about it.
14109
14110 2002-01-10  Ravi Pratap  <ravi@ximian.com>
14111
14112         * cs-parser.jay (pointer_type): Add. This begins our implementation
14113         of parsing rules for unsafe code.
14114
14115         (unsafe_statement): Implement.
14116
14117         (embedded_statement): Modify to include the above.
14118
14119         * statement.cs (Unsafe): Implement new class for unsafe blocks.
14120
14121         * codegen.cs (EmitContext.InUnsafe): Add. This determines
14122         if the current context is an unsafe one.
14123
14124         * cs-parser.jay (local_variable_pointer_type): Since local variable types
14125         are handled differently, we need separate rules for them.
14126
14127         (local_variable_declaration): Update to use local_variable_pointer_type
14128         to allow variable declarations of unmanaged pointer types.
14129
14130         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
14131         in unsafe contexts.
14132
14133         * ../errors/cs0214.cs : Add.
14134
14135 2002-01-16  Nick Drochak  <ndrochak@gol.com>
14136
14137         * makefile: remove 'response' file when cleaning.
14138
14139 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
14140
14141         * cs-parser.jay: Report 1524.
14142
14143 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
14144
14145         * typemanager.cs (RegisterMethod): drop checking if we have
14146         registered this from here
14147
14148 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
14149
14150         * class.cs (Method.EmitDestructor): Implement calling our base
14151         destructor. 
14152
14153         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
14154         value of InFinally.
14155
14156         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
14157         this routine and will wrap the call in a try/catch block.  Deal
14158         with the case.
14159
14160 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
14161
14162         * ecore.cs (Expression.MemberLookup): instead of taking a
14163         parameter `same_type' that was used to tell whether we could
14164         access private members we compute our containing type from the
14165         EmitContext.
14166
14167         (FieldExpr): Added partial support for volatile fields.  This does
14168         not work for volatile fields exposed from assemblies, as I can not
14169         figure out how to extract the modreq from it.
14170
14171         Updated all the source files to use this.
14172
14173         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
14174         because it is referenced by MemberLookup very often. 
14175
14176 2002-01-09  Ravi Pratap  <ravi@ximian.com>
14177
14178         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
14179         TypeBuilder.GetCustomAttributes to retrieve what we need.
14180
14181         Get rid of redundant default_member_attr_type as this is the same as
14182         default_member_type which already exists.
14183
14184         * interface.cs, attribute.cs : Update accordingly.
14185
14186 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
14187
14188         * typemanager.cs: Enable IndexerPropertyName again.  It does not
14189         work for TYpeBuilders though.  Ravi, can you please fix this?
14190
14191         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
14192
14193         * expression.cs (Argument.Emit): Handle the case of ref objects
14194         being passed to ref functions;  
14195
14196         (ParameterReference.EmitLoad): Loads the content of the pointer
14197         without dereferencing.
14198
14199 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
14200
14201         * cs-tokenizer.cs: Implemented the pre-processing expressions.
14202
14203 2002-01-08  Ravi Pratap  <ravi@ximian.com>
14204
14205         * class.cs (Indexer.DefineMethod): Incorporate the interface
14206         type in the name of the method if we are doing explicit interface
14207         implementation.
14208
14209         * expression.cs (ConversionExists): Remove as it is completely obsolete.
14210
14211         (BetterConversion): Fix extremely trivial bug where we were referring to
14212         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
14213         again !
14214
14215         * ../errors/bug16.cs : Add although we have fixed it.
14216
14217 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
14218
14219         * expression.cs (BaseIndexer): Begin implementation.
14220
14221         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
14222
14223         * cs-parser.jay (indexer_declarator): Use qualified_identifier
14224         production directly to remove a shift/reduce, and implement
14225         explicit interface implementation.
14226
14227         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
14228         after a floating point suffix.
14229
14230         * expression.cs (DoNumericPromotions): Improved the conversion for
14231         uint/uint.  If we have a constant, we avoid doing a typecast to a
14232         larger type.
14233
14234         * class.cs (Indexer): Implement explicit interface implementation
14235         for indexers.
14236
14237 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
14238
14239         * class.cs: make the default instance constructor public and hidebysig.
14240
14241 2001-01-03  Ravi Pratap  <ravi@ximian.com>
14242
14243         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
14244         so we can call it from elsewhere.
14245
14246         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
14247         we emit it internally if the class has a defined indexer; otherwise the user
14248         emits it by decorating the class definition with the DefaultMemberAttribute.
14249
14250         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
14251         attribute is not used on a type which defines an indexer.
14252
14253         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
14254         character when we skip whitespace.
14255
14256         * ../errors/cs0646.cs : Add.
14257
14258 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
14259
14260         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
14261         again. 
14262
14263         * makefile: Add practical target `mcs3.exe' which builds the third
14264         generation compiler. 
14265
14266         * expression.cs (New): Fix structures constructor calling.
14267
14268         * class.cs (Property, Method, Indexer): Emit Final flag on the
14269         method if we are an interface implementation and we are not
14270         abstract. 
14271
14272         * ecore.cs (PropertyExpr): New public field `IsBase', tells
14273         whether this property is referencing a `base' method.
14274
14275         * expression.cs (Invocation.EmitCall): take an extra argument:
14276         is_base, this is used to determine whether the `call' or
14277         `callvirt' opcode should be used.
14278
14279
14280         * delegate.cs: update EmitCall.
14281
14282         * class.cs (Method.Define): Set NewSlot for the cases where we are
14283         not implementing an interface method.
14284
14285         (Property.Define): ditto.
14286
14287 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
14288
14289         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
14290         'r'.  Allows mcs to parse itself fully.
14291
14292 2002-01-02  Ravi Pratap  <ravi@ximian.com>
14293
14294         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
14295         of the number of initializers that require the InitializeArray method.
14296
14297         (CheckIndices): Store the Expression in all cases - not the plain value. Also
14298         update the above field where necessary.
14299
14300         (MakeByteBlob): Update accordingly.
14301
14302         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
14303         greater than 2.
14304
14305         (EmitDynamicInitializers): Update in accordance with the new optimization.
14306
14307         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
14308         same OpCode applies.
14309
14310         * cs-parser.jay : Fix some glaring errors I introduced.
14311
14312 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
14313
14314         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
14315         so that we can check for name clashes there too.
14316
14317         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
14318         for interface indexers.
14319
14320         * interfaces.cs (Define): Emit the default member attribute.
14321
14322         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
14323         variable was being referred to while setting the value ;-)
14324
14325 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
14326
14327         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
14328         byte-by-byte information when we know the data is zero.
14329
14330         Make the block always a multiple of 4, because
14331         DefineInitializedData has a bug.
14332
14333         * assign.cs: Fix, we should assign from the temporary, not from
14334         the source. 
14335
14336         * expression.cs (MakeByteBlob): Fix my incorrect code.
14337
14338 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
14339
14340         * typemanager.cs (EnumToUnderlying): This function is used to get
14341         the underlying type from an enumeration, because it does not
14342         always work. 
14343
14344         * constant.cs: Use the I4_S form for values between -128 and 127.
14345
14346         * statement.cs (Block.LookupLabel): Looks up a label.
14347         (Block): Drop support for labeled blocks.
14348
14349         (LabeledStatement): New kind of statement that represents a label
14350         only.
14351
14352         (Goto): Finally implement this bad boy.
14353
14354         * cs-parser.jay: Update to reflect new mechanism to implement
14355         labels.
14356
14357 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
14358
14359         * codegen.cs (EmitContext.This): a codegen property that keeps the
14360         a single instance of this instead of creating many different this
14361         instances. 
14362
14363         * delegate.cs (Delegate.DoResolve): Update to use the property;
14364
14365         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
14366
14367         * expression.cs (BaseAccess.DoResolve): Ditto.
14368
14369 2001-12-29  Ravi Pratap  <ravi@ximian.com>
14370
14371         * typemanager.cs (methodimpl_attr_type): Add to hold the type
14372         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
14373
14374         (InitCoreTypes): Update accordingly.
14375
14376         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
14377         so we can quickly store the state.
14378
14379         (ApplyAttributes): Set the correct implementation flags
14380         for InternalCall methods.
14381
14382 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
14383
14384         * expression.cs (EmitCall): if a method is not virtual, then do
14385         not use callvirt on it.
14386
14387         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
14388         user defined stuff) requires the use of stobj, which takes an
14389         address on the stack instead of an array and an index.  So emit
14390         the Ldelema operation for it.
14391
14392         (EmitStoreOpcode): Use stobj for valuetypes.
14393
14394         (UnaryMutator.EmitCode): Use the right 1 value depending on
14395         whether we are dealing with int64/uint64, float or doubles.
14396
14397         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
14398         constructors that I implemented last night.
14399
14400         (Constructor.IsDefault): Fix to work properly for static
14401         constructors.
14402
14403         * cs-parser.jay (CheckDef): report method signature errors.
14404         Update error number 103 to be 132.
14405
14406         * decl.cs: New AdditionResult enumeration value: MethodExists.
14407         Although we do this check for methods later on in the semantic
14408         analysis, catching repeated default constructors is so easy that
14409         we catch these here. 
14410
14411         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
14412         promotions code.
14413
14414         (ParameterReference.EmitAssign, Emit): handle
14415         bools as bytes.
14416
14417         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
14418         (ArrayAccess.EmitStoreOpcode): ditto.
14419
14420         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
14421
14422         * expression.cs (MakeByteBlob): Complete all the missing types
14423         (uint, short, ushort, byte, sbyte)
14424
14425         * class.cs: Only init instance field initializers on instance
14426         constructors. 
14427
14428         Rename `constructors' to instance_constructors. 
14429
14430         (TypeContainer.AddConstructor): Only add constructors to the list
14431         if it is not static.
14432
14433         Make sure that we handle default_static_constructor independently
14434         everywhere where we handle instance_constructors
14435
14436 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
14437
14438         * class.cs: Do not lookup or create a base initializer for a
14439         static constructor.
14440
14441         (ConstructorInitializer.Resolve): use the proper type to lookup
14442         for constructors.
14443
14444         * cs-parser.jay: Report error 1585 (modifiers between type and name).
14445
14446         * enum.cs, interface.cs: Remove CloseType, this is taken care by
14447         in DeclSpace. 
14448
14449         * decl.cs: CloseType is now an virtual method, the default
14450         implementation just closes this type.
14451
14452 2001-12-28  Ravi Pratap  <ravi@ximian.com>
14453
14454         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
14455         to PreserveSig by default. Also emit HideBySig on such methods.
14456
14457         Basically, set the defaults to standard values.
14458
14459         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
14460         argument, if candidate is better, it can't be worse than the best !
14461
14462         (Invocation): Re-write bits to differentiate between methods being
14463         applicable in their expanded form and their normal form - for params
14464         methods of course.
14465
14466         Get rid of use_standard everywhere as only standard conversions are allowed
14467         in overload resolution. 
14468
14469         More spec conformance.
14470
14471 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
14472
14473         * driver.cs: Add --timestamp, to see where the compiler spends
14474         most of its time.
14475
14476         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
14477         `this' in static code.
14478
14479         (SimpleName.DoResolve): Implement in terms of a helper function
14480         that allows static-references to be passed upstream to
14481         MemberAccess.
14482
14483         (Expression.ResolveWithSimpleName): Resolve specially simple
14484         names when called by MemberAccess to implement the special
14485         semantics. 
14486
14487         (Expression.ImplicitReferenceConversion): Handle conversions from
14488         Null to reference types before others, as Null's type is
14489         System.Object. 
14490
14491         * expression.cs (Invocation.EmitCall): Handle the special case of
14492         calling methods declared on a reference type from a ValueType
14493         (Base classes System.Object and System.Enum)
14494
14495         (MemberAccess.Resolve): Only perform lookups on Enumerations if
14496         the left hand side is a TypeExpr, not on every enumeration. 
14497
14498         (Binary.Resolve): If types are reference types, then do a cast to
14499         object on operators != and == of both arguments.
14500
14501         * typemanager.cs (FindMembers): Extract instance and static
14502         members if requested.
14503
14504         * interface.cs (PopulateProperty): Use void_type instead of null
14505         as the return type for the setter method.
14506
14507         (PopulateIndexer): ditto.
14508
14509 2001-12-27  Ravi Pratap  <ravi@ximian.com>
14510
14511         * support.cs (ReflectionParameters): Fix minor bug where we
14512         were examining the wrong parameter for the ParamArray attribute.
14513
14514         Cope with requests for the type of the parameter at position
14515         greater than the params parameter's. We now return the element
14516         type of the params array as that makes more sense.
14517
14518         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
14519         accordingly as we no longer have to extract the element type
14520         ourselves.
14521
14522         (Invocation.OverloadResolve): Update.
14523
14524 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
14525
14526         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
14527         against IEnumerator, test whether the return value is a descendant
14528         of the IEnumerator interface.
14529
14530         * class.cs (Indexer.Define): Use an auxiliary method to implement
14531         the other bits of the method definition.  Begin support for
14532         explicit interface implementation.
14533
14534         (Property.DefineMethod): Use TypeManager.void_type instead of null
14535         for an empty return value.
14536
14537 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
14538
14539         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
14540         dealing with a FieldExpr which is composed of a FieldBuilder, in
14541         the code path we did extract the constant, but we should have
14542         obtained the underlying value to be able to cast it (otherwise we
14543         end up in an infinite loop, this is what Ravi was running into).
14544
14545         (ArrayCreation.UpdateIndices): Arrays might be empty.
14546
14547         (MemberAccess.ResolveMemberAccess): Add support for section
14548         14.5.4.1 that deals with the special case of E.I when E is a type
14549         and something else, that I can be a reference to a static member.
14550
14551         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
14552         handle a particular array type to create byte blobs, it is just
14553         something we dont generate byteblobs for.
14554
14555         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
14556         arguments. 
14557
14558         * location.cs (Push): remove the key from the hashtable that we
14559         are about to add.   This happens for empty files.
14560
14561         * driver.cs: Dispose files after we have parsed them.
14562
14563         (tokenize): new function that only runs the tokenizer on its
14564         input, for speed testing.
14565
14566 2001-12-26  Ravi Pratap  <ravi@ximian.com>
14567
14568         * class.cs (Event.Define): Define the private field only if there
14569         are no accessors defined.
14570
14571         * expression.cs (ResolveMemberAccess): If there is no associated
14572         field with the event, that means we have an event defined with its
14573         own accessors and we should flag error cs0070 since transforming
14574         ourselves into a field is not valid in that case.
14575
14576         * ecore.cs (SimpleName.DoResolve): Same as above.
14577
14578         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
14579         and charset to sane values.
14580
14581 2001-12-25  Ravi Pratap  <ravi@ximian.com>
14582
14583         * assign.cs (DoResolve): Perform check on events only if they 
14584         are being accessed outside the declaring type.
14585
14586         * cs-parser.jay (event_declarations): Update rules to correctly
14587         set the type of the implicit parameter etc.
14588
14589         (add_accessor, remove_accessor): Set current local parameters.
14590
14591         * expression.cs (Binary): For delegate addition and subtraction,
14592         cast the return value from the method into the appropriate delegate
14593         type.
14594
14595 2001-12-24  Ravi Pratap  <ravi@ximian.com>
14596
14597         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
14598         of these as the workaround is unnecessary.
14599
14600         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
14601         delegate data - none of that is needed at all.
14602
14603         Re-write bits to extract the instance expression and the delegate method
14604         correctly.
14605
14606         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
14607         on delegates too.
14608
14609         * attribute.cs (ApplyAttributes): New method to take care of common tasks
14610         of attaching attributes instead of duplicating code everywhere.
14611
14612         * everywhere : Update code to do attribute emission using the above method.
14613
14614 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
14615
14616         * expression.cs (IsParamsMethodApplicable): if there are not
14617         parameters, return immediately.
14618
14619         * ecore.cs: The 0 literal can be implicity converted to an enum
14620         type. 
14621
14622         (SimpleName.DoResolve): First lookup the type, then lookup the
14623         members. 
14624
14625         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
14626         want to get its address.  If the InstanceExpression is not
14627         addressable, store the result in a temporary variable, then get
14628         the address of it.
14629
14630         * codegen.cs: Only display 219 errors on warning level or above. 
14631
14632         * expression.cs (ArrayAccess): Make it implement the
14633         IMemoryLocation interface.
14634
14635         (Binary.DoResolve): handle the operator == (object a, object b)
14636         and operator != (object a, object b) without incurring into a
14637         BoxedCast (because 5 != o should never be performed).
14638
14639         Handle binary enumerator operators.
14640
14641         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
14642         value type, otherwise use Ldelem_ref.
14643
14644         Use precomputed names;
14645
14646         (AddressOf): Implement address of
14647
14648         * cs-parser.jay (labeled_statement): Fix recursive block
14649         addition by reworking the production.
14650
14651         * expression.cs (New.DoEmit): New has a special case:
14652                 
14653                  If we are dealing with a ValueType, we have a few
14654                  situations to deal with:
14655                 
14656                     * The target of New is a ValueType variable, that is
14657                       easy, we just pass this as the variable reference
14658                 
14659                     * The target of New is being passed as an argument,
14660                       to a boxing operation or a function that takes a
14661                       ValueType.
14662                 
14663                       In this case, we need to create a temporary variable
14664                       that is the argument of New.
14665
14666
14667 2001-12-23  Ravi Pratap  <ravi@ximian.com>
14668
14669         * rootcontext.cs (LookupType): Check that current_type is not null before
14670         going about looking at nested types.
14671
14672         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
14673         not implement the IAssignMethod interface any more.
14674
14675         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
14676         where we tranform them into FieldExprs if they are being resolved from within
14677         the declaring type.
14678
14679         * ecore.cs (SimpleName.DoResolve): Do the same here.
14680
14681         * assign.cs (DoResolve, Emit): Clean up code considerably. 
14682
14683         * ../errors/bug10.cs : Add.
14684
14685         * ../errors/cs0070.cs : Add.
14686
14687         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
14688
14689         * assign.cs : Get rid of EventIsLocal everywhere.
14690
14691 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
14692
14693         * ecore.cs (ConvertIntLiteral): finished the implementation.
14694
14695         * statement.cs (SwitchLabel): Convert the value we are using as a
14696         key before looking up the table.
14697
14698 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
14699
14700         * codegen.cs (EmitTopBlock): Require a Location argument now.
14701
14702         * cs-parser.jay (constructor_declarator): We need to setup
14703         current_local_parameters before we parse the
14704         opt_constructor_initializer, to allow the variables to be bound
14705         to the constructor arguments.
14706
14707         * rootcontext.cs (LookupType): First lookup nested classes in our
14708         class and our parents before we go looking outside our class.
14709
14710         * expression.cs (ConstantFold): Extract/debox the values at the
14711         beginnning. 
14712
14713         * rootcontext.cs (EmitCode): Resolve the constants first before we
14714         resolve the types.  This is not really needed, but it helps debugging.
14715
14716         * statement.cs: report location.
14717
14718         * cs-parser.jay: pass location to throw statement.
14719
14720         * driver.cs: Small bug fix.
14721
14722         * report.cs: Updated format to be 4-zero filled digits.
14723
14724 2001-12-22  Ravi Pratap  <ravi@ximian.com>
14725
14726         * expression.cs (CheckIndices): Fix minor bug where the wrong
14727         variable was being referred to ;-)
14728
14729         (DoEmit): Do not call EmitStaticInitializers when the 
14730         underlying type is System.Object.
14731
14732 2001-12-21  Ravi Pratap  <ravi@ximian.com>
14733
14734         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
14735         and do the usual workaround for SRE.
14736
14737         * class.cs (MyEventBuilder.EventType): New member to get at the type
14738         of the event, quickly.
14739
14740         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
14741
14742         * assign.cs (Assign.DoResolve): Handle the case when the target
14743         is an EventExpr and perform the necessary checks.
14744
14745         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
14746         interface.
14747
14748         (SimpleName.MemberStaticCheck): Include check for EventExpr.
14749
14750         (EventExpr): Set the type in the constructor itself since we 
14751         are meant to be born fully resolved.
14752
14753         (EventExpr.Define): Revert code I wrote earlier.
14754                 
14755         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
14756         instance expression is null. The instance expression is a This in that case
14757         or a null, depending on whether it is a static method or not.
14758
14759         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
14760         refers to more than one method.
14761
14762         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
14763         and accordingly flag errors.
14764
14765 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
14766
14767         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
14768
14769 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
14770
14771         * location.cs (ToString): Provide useful rutine.
14772
14773 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
14774
14775         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
14776         objects, return the actual integral boxed.
14777
14778         * statement.cs (SwitchLabel): define an ILLabel for each
14779         SwitchLabel. 
14780
14781         (Switch.CheckSwitch): If the value is a Literal, extract
14782         the underlying literal.
14783
14784         Also in the unused hashtable we had, add the SwitchLabel so we can
14785         quickly look this value up.
14786
14787         * constant.cs: Implement a bunch of new constants.  Rewrite
14788         Literal based on this.  Made changes everywhere to adapt to this.
14789
14790         * expression.cs (Expression.MakeByteBlob): Optimize routine by
14791         dereferencing array only once, and also copes with enumrations.
14792
14793         bytes are two bytes wide, not one.
14794
14795         (Cast): Perform constant conversions.
14796
14797         * ecore.cs (TryImplicitIntConversion): Return literals instead of
14798         wrappers to the literals here.
14799
14800         * expression.cs (DoNumericPromotions): long literals can converted
14801         to ulong implicity (this is taken care of elsewhere, but I was
14802         missing this spot).
14803
14804         * ecore.cs (Expression.Literalize): Make the return type Literal,
14805         to improve type checking.
14806
14807         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
14808
14809 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
14810
14811         * literal.cs: Revert code from ravi that checked the bounds.  The
14812         bounds are sane by the definition of the type itself. 
14813
14814         * typemanager.cs: Fix implementation of ImplementsInterface.  We
14815         need to actually look up in our parent hierarchy for interfaces
14816         implemented. 
14817
14818         * const.cs: Use the underlying type for enumerations
14819
14820         * delegate.cs: Compute the basename for the delegate creation,
14821         that should fix the delegate test case, and restore the correct
14822         Type Lookup semantics in rootcontext
14823
14824         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
14825         referencing a nested type with the Reflection API is using the "+"
14826         sign. 
14827
14828         * cs-parser.jay: Do not require EOF token at the end.
14829
14830 2001-12-20  Ravi Pratap  <ravi@ximian.com>
14831
14832         * rootcontext.cs (LookupType): Concatenate type names with
14833         a '.' instead of a '+' The test suite passes again.
14834
14835         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
14836         field of the enumeration.
14837
14838         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
14839         the case when the member is an EventExpr.
14840
14841         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
14842         static has an associated instance expression.
14843
14844         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
14845
14846         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
14847
14848         * class.cs (Event.Define): Register event and perform appropriate checks
14849         for error #111.
14850
14851         We define the Add and Remove methods even if the use provides none because
14852         in that case, we provide default implementations ourselves.
14853
14854         Define a private field of the type of the event. This is done by the CSC compiler
14855         and we should be doing it too ;-)
14856
14857         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
14858         More methods we use in code we generate.
14859
14860         (multicast_delegate_type, delegate_type): Two separate types since the distinction
14861         is important.
14862
14863         (InitCoreTypes): Update accordingly for the above.
14864
14865         * class.cs (Event.Emit): Generate code for default accessors that we provide
14866
14867         (EmitDefaultMethod): Do the job in the above.
14868
14869         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
14870         appropriate place.
14871
14872 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
14873
14874         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
14875         builders even if we were missing one.
14876
14877         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
14878         pass the Basename as our class name instead of the Name.  The
14879         basename will be correctly composed for us.
14880
14881         * parameter.cs (Paramters): Now takes a Location argument.
14882
14883         * decl.cs (DeclSpace.LookupType): Removed convenience function and
14884         make all the code call directly LookupType in RootContext and take
14885         this chance to pass the Location information everywhere.
14886
14887         * Everywhere: pass Location information.
14888
14889 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
14890
14891         * class.cs (Constructor.Define): Updated way of detecting the
14892         length of the parameters.
14893
14894         (TypeContainer.DefineType): Use basename as the type name for
14895         nested types.
14896
14897         (TypeContainer.Define): Do not recursively define types here, as
14898         definition is taken care in order by the RootContext.
14899
14900         * tree.cs: Keep track of namespaces in a per-file basis.
14901
14902         * parameter.cs (Parameter.ComputeSignature): Update to use
14903         DeclSpace. 
14904
14905         (Parameters.GetSignature): ditto.
14906
14907         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
14908         instead of a TypeContainer.
14909
14910         (Interface.SemanticAnalysis): Use `this' instead of our parent to
14911         resolve names.  Because we need to be resolve in our context, not
14912         our parents.
14913
14914         * driver.cs: Implement response files.
14915
14916         * class.cs (TypeContainer.DefineType): If we are defined, do not
14917         redefine ourselves.
14918
14919         (Event.Emit): Emit the code for add/remove handlers.
14920         (Event.Define): Save the MethodBuilders for add/remove.
14921
14922         * typemanager.cs: Use pair here too.
14923
14924         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
14925         DictionaryEntry requires the first argument to be non-null.  
14926
14927         (enum_declaration): Compute full name for registering the
14928         enumeration.
14929
14930         (delegate_declaration): Instead of using
14931         formal_parameter_list, use opt_formal_parameter_list as the list
14932         can be empty.
14933
14934         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
14935         (EventParsing): New property that controls whether `add' and
14936         `remove' are returned as tokens or identifiers (for events);
14937
14938 2001-12-19  Ravi Pratap  <ravi@ximian.com>
14939
14940         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
14941         use MyEventBuilder only and let it wrap the real builder for us.
14942
14943         (MyEventBuilder): Revamp constructor etc.
14944
14945         Implement all operations that we perform on EventBuilder in precisely the same
14946         way here too.
14947
14948         (FindMembers): Update to use the EventBuilder member.
14949
14950         (Event.Emit): Update accordingly.
14951
14952 2001-12-18  Ravi Pratap  <ravi@ximian.com>
14953
14954         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
14955         by calling the appropriate methods.
14956
14957         (GetCustomAttributes): Make stubs as they cannot possibly do anything
14958         useful.
14959
14960         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
14961
14962 2001-12-17  Ravi Pratap  <ravi@ximian.com>
14963
14964         * delegate.cs (Delegate.Populate): Check that the return type
14965         and various parameters types are indeed accessible.
14966
14967         * class.cs (Constructor.Define): Same here.
14968
14969         (Field.Define): Ditto.
14970
14971         (Event.Define): Ditto.
14972
14973         (Operator.Define): Check that the underlying Method defined itself
14974         correctly - so it's MethodBuilder should not be null.
14975
14976         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
14977         expression happens to be null.
14978
14979         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
14980         members but as of now we don't seem to be able to do anything really useful with it.
14981
14982         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
14983         not the EventBuilder.
14984
14985 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
14986
14987         * cs-tokenizer.cs: Add support for defines.
14988         Add support for #if, #elif, #else, #endif
14989
14990         (eval_var): evaluates a variable.
14991         (eval): stubbed for evaluating functions.
14992
14993         * cs-parser.jay: Pass the defines information
14994
14995         * driver.cs: Add --define command line option.
14996
14997         * decl.cs: Move MemberCore here.
14998
14999         Make it the base class for DeclSpace.  This allows us to catch and
15000         report 108 and 109 for everything now.
15001
15002         * class.cs (TypeContainer.Define): Extract all the members
15003         before populating and emit the warning 108 (new keyword required
15004         to override) instead of having each member implement this.
15005
15006         (MemberCore.Define): New abstract method, we will be using this in
15007         the warning reporting engine in Populate.
15008
15009         (Operator.Define): Adjust to new MemberCore protocol. 
15010
15011         * const.cs (Const): This does not derive from Expression, it is a
15012         temporary object we use to create fields, it is a MemberCore. 
15013
15014         * class.cs (Method.Define): Allow the entry point to be in a
15015         specific class.
15016
15017         * driver.cs: Rewrite the argument handler to clean it up a bit.
15018
15019         * rootcontext.cs: Made it just an auxiliary namespace feature by
15020         making everything static.
15021
15022         * driver.cs: Adapt code to use RootContext type name instead of
15023         instance variable.
15024
15025         * delegate.cs: Remove RootContext argument.
15026
15027         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
15028         argument. 
15029
15030         * class.cs (Event.Define): The lookup can fail.
15031
15032         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
15033
15034         * expression.cs: Resolve the this instance before invoking the code.
15035
15036 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
15037
15038         * cs-parser.jay: Add a production in element_access that allows
15039         the thing to become a "type" reference.  This way we can parse
15040         things like "(string [])" as a type.
15041
15042         Note that this still does not handle the more complex rules of
15043         casts. 
15044
15045
15046         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
15047
15048         * ecore.cs: (CopyNewMethods): new utility function used to
15049         assemble the list of methods from running FindMembers.
15050
15051         (MemberLookup): Rework FindMembers so that 
15052
15053 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
15054
15055         * class.cs (TypeContainer): Remove Delegates who fail to be
15056         defined.
15057
15058         * delegate.cs (Populate): Verify that we dont get null return
15059         values.   TODO: Check for AsAccessible.
15060
15061         * cs-parser.jay: Use basename to emit error 574 (destructor should
15062         have the same name as container class), not the full name.
15063
15064         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
15065         possible representation.  
15066
15067         Also implements integer type suffixes U and L.
15068
15069 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
15070
15071         * expression.cs (ArrayCreation.DoResolve): We need to do the
15072         argument resolution *always*.
15073
15074         * decl.cs: Make this hold the namespace.  Hold the root context as
15075         well.
15076         (LookupType): Move here.
15077
15078         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
15079
15080         * location.cs (Row, Name): Fixed the code, it was always returning
15081         references to the first file.
15082
15083         * interface.cs: Register properties defined through interfaces.
15084
15085         * driver.cs: Add support for globbing on the command line
15086
15087         * class.cs (Field): Make it derive from MemberCore as well.
15088         (Event): ditto.
15089
15090 2001-12-15  Ravi Pratap  <ravi@ximian.com>
15091
15092         * class.cs (Event::Define): Check that the type of the event is a delegate
15093         type else flag error #66.
15094
15095         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
15096         same.
15097
15098         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
15099         values of EntryPoint, CharSet etc etc.
15100
15101         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
15102
15103         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
15104         be null and we should ignore this. I am not sure if this is really clean. Apparently,
15105         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
15106         which needs this to do its work.
15107
15108         * ../errors/cs0066.cs : Add.
15109
15110 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
15111
15112         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
15113         helper functions.
15114
15115         * class.cs: (MethodSignature.MethodSignature): Removed hack that
15116         clears out the parameters field.
15117         (MemberSignatureCompare): Cleanup
15118
15119         (MemberCore): New base class used to share code between MethodCore
15120         and Property.
15121
15122         (RegisterRequiredImplementations) BindingFlags.Public requires
15123         either BindingFlags.Instace or Static.  Use instance here.
15124
15125         (Property): Refactored code to cope better with the full spec.
15126
15127         * parameter.cs (GetParameterInfo): Return an empty array instead
15128         of null on error.
15129
15130         * class.cs (Property): Abstract or extern properties have no bodies.
15131
15132         * parameter.cs (GetParameterInfo): return a zero-sized array.
15133
15134         * class.cs (TypeContainer.MethodModifiersValid): Move all the
15135         method modifier validation to the typecontainer so we can reuse
15136         this on properties.
15137
15138         (MethodCore.ParameterTypes): return an empty sized array of types.
15139
15140         (Property.Define): Test property modifier validity.
15141
15142         Add tests for sealed/override too.
15143
15144         (Method.Emit): abstract or extern methods have no bodies.
15145
15146 2001-12-14  Ravi Pratap  <ravi@ximian.com>
15147
15148         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
15149         thing.
15150
15151         (Method::Define, ::Emit): Modify accordingly.
15152
15153         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
15154
15155         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
15156
15157         * makefile: Pass in /unsafe.
15158
15159 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
15160
15161         * class.cs (MakeKey): Kill routine.
15162
15163         * class.cs (TypeContainer.Define): Correctly define explicit
15164         method implementations (they require the full interface name plus
15165         the method name).
15166
15167         * typemanager.cs: Deply the PtrHashtable here and stop using the
15168         lame keys.  Things work so much better.
15169
15170         This of course broke everyone who depended on `RegisterMethod' to
15171         do the `test for existance' test.  This has to be done elsewhere.
15172
15173         * support.cs (PtrHashtable): A hashtable that avoid comparing with
15174         the object stupid Equals method (because, that like fails all over
15175         the place).  We still do not use it.
15176
15177         * class.cs (TypeContainer.SetRequiredInterface,
15178         TypeContainer.RequireMethods): Killed these two routines and moved
15179         all the functionality to RegisterRequiredImplementations.
15180
15181         (TypeContainer.RegisterRequiredImplementations): This routine now
15182         registers all the implementations required in an array for the
15183         interfaces and abstract methods.  We use an array of structures
15184         which can be computed ahead of time to reduce memory usage and we
15185         also assume that lookups are cheap as most classes will not
15186         implement too many interfaces.
15187
15188         We also avoid creating too many MethodSignatures.
15189
15190         (TypeContainer.IsInterfaceMethod): Update and optionally does not
15191         clear the "pending" bit if we find that there are problems with
15192         the declaration.
15193
15194         (TypeContainer.VerifyPendingMethods): Update to report errors of
15195         methods that look like implementations but are not.
15196
15197         (TypeContainer.Define): Add support for explicit interface method
15198         implementation. 
15199
15200 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
15201
15202         * typemanager.cs: Keep track of the parameters here instead of
15203         being a feature of the TypeContainer.
15204
15205         * class.cs: Drop the registration of parameters here, as
15206         InterfaceMethods are also interface declarations.
15207
15208         * delegate.cs: Register methods with the TypeManager not only with
15209         the TypeContainer.  This code was buggy.
15210
15211         * interface.cs: Full registation here.
15212
15213 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
15214
15215         * expression.cs: Remove reducer for binary expressions, it can not
15216         be done this way.
15217
15218         * const.cs: Put here the code that used to go into constant.cs
15219
15220         * constant.cs: Put here the code for constants, this is a new base
15221         class for Literals.
15222
15223         * literal.cs: Make Literal derive from Constant.
15224
15225 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
15226
15227         * statement.cs (Return.Emit): Report error 157 if the user
15228         attempts to return from a finally block.
15229
15230         (Return.Emit): Instead of emitting a return, jump to the end of
15231         the function.
15232
15233         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
15234         LocalBuilder to store the result of the function.  ReturnLabel is
15235         the target where we jump.
15236
15237
15238 2001-12-09  Radek Doulik  <rodo@ximian.com>
15239
15240         * cs-parser.jay: remember alias in current namespace
15241
15242         * ecore.cs (SimpleName::DoResolve): use aliases for types or
15243         namespaces
15244
15245         * class.cs (LookupAlias): lookup alias in my_namespace
15246
15247         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
15248         aliases hashtable
15249         (LookupAlias): lookup alias in this and if needed in parent
15250         namespaces
15251
15252 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
15253
15254         * support.cs: 
15255
15256         * rootcontext.cs: (ModuleBuilder) Made static, first step into
15257         making things static.  I need this to avoid passing the
15258         TypeContainer when calling ParameterType.
15259
15260         * support.cs (InternalParameters.ParameterType): Remove ugly hack
15261         that did string manipulation to compute the type and then call
15262         GetType.  Use Parameter.ParameterType instead.
15263
15264         * cs-tokenizer.cs: Consume the suffix for floating values.
15265
15266         * expression.cs (ParameterReference): figure out whether this is a
15267         reference parameter or not.  Kill an extra variable by computing
15268         the arg_idx during emission.
15269
15270         * parameter.cs (Parameters.GetParameterInfo): New overloaded
15271         function that returns whether a parameter is an out/ref value or not.
15272
15273         (Parameter.ParameterType): The type of the parameter (base,
15274         without ref/out applied).
15275
15276         (Parameter.Resolve): Perform resolution here.
15277         (Parameter.ExternalType): The full type (with ref/out applied).
15278
15279         * statement.cs (Using.Emit, Using.EmitExpression): Implement
15280         support for expressions on the using statement.
15281
15282 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
15283
15284         * statement.cs (Using.EmitLocalVariableDecls): Split the
15285         localvariable handling of the using statement.
15286
15287         (Block.EmitMeta): Keep track of variable count across blocks.  We
15288         were reusing slots on separate branches of blocks.
15289
15290         (Try.Emit): Emit the general code block, we were not emitting it. 
15291
15292         Check the type of the declaration to be an IDisposable or
15293         something that can be implicity converted to it. 
15294
15295         Emit conversions if required.
15296
15297         * ecore.cs (EmptyExpression): New utility class.
15298         (Expression.ImplicitConversionExists): New utility function.
15299
15300 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
15301
15302         * statement.cs (Using): Implement.
15303
15304         * expression.cs (LocalVariableReference): Support read only variables.
15305
15306         * statement.cs: Remove the explicit emit for the Leave opcode.
15307         (VariableInfo): Add a readonly field.
15308
15309 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
15310
15311         * ecore.cs (ConvCast): new class used to encapsulate the various
15312         explicit integer conversions that works in both checked and
15313         unchecked contexts.
15314
15315         (Expression.ConvertNumericExplicit): Use new ConvCast class to
15316         properly generate the overflow opcodes.
15317
15318 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
15319
15320         * statement.cs: The correct type for the EmptyExpression is the
15321         element_type, not the variable type.  Ravi pointed this out.
15322
15323 2001-12-04  Ravi Pratap  <ravi@ximian.com>
15324
15325         * class.cs (Method::Define): Handle PInvoke methods specially
15326         by using DefinePInvokeMethod instead of the usual one.
15327
15328         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
15329         above to do the task of extracting information and defining the method.
15330
15331 2001-12-04  Ravi Pratap  <ravi@ximian.com>
15332
15333         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
15334         of the condition for string type.
15335
15336         (Emit): Move that here. 
15337
15338         (ArrayCreation::CheckIndices): Keep string literals in their expression
15339         form.
15340
15341         (EmitDynamicInitializers): Handle strings appropriately.
15342
15343 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
15344
15345         * codegen.cs (EmitContext): Replace multiple variables with a
15346         single pointer to the current Switch statement.
15347
15348         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
15349         EmitContext.
15350
15351 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
15352
15353         * statement.cs 
15354
15355         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
15356         default'.
15357
15358         (Foreach.Emit): Foreach on arrays was not setting
15359         up the loop variables (for break/continue).
15360
15361         (GotoCase): Semi-implented.
15362
15363 2001-12-03  Ravi Pratap  <ravi@ximian.com>
15364
15365         * attribute.cs (CheckAttribute): Handle system attributes by using
15366         Attribute.GetAttributes to examine information we need.
15367
15368         (GetValidPlaces): Same here.
15369
15370         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
15371
15372         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
15373
15374         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
15375
15376         (Method::Define): Set appropriate flags if we have a DllImport attribute.
15377
15378         (Method::Emit): Handle the case when we are a PInvoke method.
15379
15380 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
15381
15382         * expression.cs: Use ResolveWithSimpleName on compound names.
15383
15384 2001-12-02  Ravi Pratap  <ravi@ximian.com>
15385
15386         * constant.cs (EmitConstant): Make sure we resolve the associated expression
15387         before trying to reduce it.
15388
15389         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
15390
15391         * constant.cs (LookupConstantValue): Implement.
15392
15393         (EmitConstant): Use the above in emitting the constant.
15394
15395         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
15396         that are user-defined by doing a LookupConstantValue on them.
15397
15398         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
15399         too, like above.
15400
15401 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
15402
15403         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
15404
15405         (BaseAccess.DoResolve): Implement.
15406
15407         (MemberAccess.DoResolve): Split this routine into a
15408         ResolveMemberAccess routine that can be used independently
15409
15410 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
15411
15412         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
15413         As that share bits of the implementation.  Is returns a boolean,
15414         while As returns the Type that is being probed.
15415
15416 2001-12-01  Ravi Pratap  <ravi@ximian.com>
15417
15418         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
15419         instead of a Literal - much easier.
15420
15421         (EnumInTransit): Remove - utterly useless :-)
15422
15423         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
15424
15425         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
15426
15427         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
15428         chain when we have no associated expression.
15429
15430 2001-11-30  Ravi Pratap  <ravi@ximian.com>
15431
15432         * constant.cs (Define): Use Location while reporting the errror.
15433
15434         Also emit a warning when 'new' is used and there is no inherited
15435         member to hide.
15436
15437         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
15438         populated.
15439
15440         (LookupEnumValue): Implement to lookup an enum member's value and define it
15441         if necessary.
15442
15443         (Populate): Re-write accordingly to use the above routine.
15444
15445 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
15446
15447         * expression.cs (This): Fix prototype for DoResolveLValue to
15448         override the base class DoResolveLValue.
15449
15450         * cs-parser.cs: Report errors cs574 and cs575 (destructor
15451         declarations) 
15452
15453         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
15454         (we need to load the address of the field here).  This fixes
15455         test-22. 
15456
15457         (FieldExpr.DoResolveLValue): Call the DoResolve
15458         function to initialize the Instance expression.
15459
15460         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
15461         correctly the GetEnumerator operation on a value type.
15462
15463         * cs-parser.jay: Add more simple parsing error catches.
15464
15465         * statement.cs (Switch): Add support for string switches.
15466         Handle null specially.
15467
15468         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
15469
15470 2001-11-28  Ravi Pratap  <ravi@ximian.com>
15471
15472         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
15473
15474         (declare_local_constant): New helper function.
15475
15476         * statement.cs (AddConstant): Keep a separate record of constants
15477
15478         (IsConstant): Implement to determine if a variable is a constant.
15479
15480         (GetConstantExpression): Implement.
15481
15482         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
15483
15484         * statement.cs (IsVariableDefined): Re-write.
15485
15486 2001-11-27  Ravi Pratap  <ravi@ximian.com>
15487
15488         * class.cs (TypeContainer::FindMembers): Look for constants
15489         in the case when we are looking for MemberTypes.Field
15490
15491         * expression.cs (MemberAccess::DoResolve): Check that in the
15492         case we are a FieldExpr and a Literal, we are not being accessed
15493         by an instance reference.
15494
15495         * cs-parser.jay (local_constant_declaration): Implement.
15496
15497         (declaration_statement): Implement for constant declarations.
15498
15499 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
15500
15501         * statement.cs (Switch): Catch double defaults.
15502
15503         (Switch): More work on the switch() statement
15504         implementation.  It works for integral values now, need to finish
15505         string support.
15506
15507
15508 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
15509
15510         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
15511         integer literals into other integer literals.  To be used by
15512         switch. 
15513
15514 2001-11-24  Ravi Pratap  <ravi@ximian.com>
15515
15516         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
15517         some memory.
15518
15519         (EmitDynamicInitializers): Cope with the above since we extract data
15520         directly from ArrayData now.
15521
15522         (ExpectInitializers): Keep track of whether initializers are mandatory
15523         or not.
15524
15525         (Bounds): Make it a hashtable to prevent the same dimension being 
15526         recorded for every element in that dimension.
15527
15528         (EmitDynamicInitializers): Fix bug which prevented the Set array method
15529         from being found.
15530
15531         Also fix bug which was causing the indices to be emitted in the reverse
15532         order.
15533
15534 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
15535
15536         * expression.cs (ArrayCreation): Implement the bits that Ravi left
15537         unfinished.  They do not work, because the underlying code is
15538         sloppy.
15539
15540 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
15541
15542         * cs-parser.jay: Remove bogus fixme.
15543
15544         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
15545         on Switch statement.
15546
15547 2001-11-23  Ravi Pratap  <ravi@ximian.com>
15548
15549         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
15550         the same. 
15551
15552         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
15553         parameter. Apparently, any expression is allowed. 
15554
15555         (ValidateInitializers): Update accordingly.
15556
15557         (CheckIndices): Fix some tricky bugs thanks to recursion.
15558
15559         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
15560         I was being completely brain-dead.
15561
15562         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
15563         and re-write acordingly.
15564
15565         (DelegateInvocation): Re-write accordingly.
15566
15567         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
15568
15569         (MakeByteBlob): Handle types more correctly.
15570
15571         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
15572         initialization from expressions but it is incomplete because I am a complete
15573         Dodo :-|
15574
15575 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
15576
15577         * statement.cs (If.Emit): Fix a bug that generated incorrect code
15578         on If.  Basically, we have to return `true' (ie, we do return to
15579         our caller) only if both branches of the if return.
15580
15581         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
15582         short-circuit operators, handle them as short circuit operators. 
15583
15584         (Cast.DoResolve): Resolve type.
15585         (Cast.Cast): Take an expression as the target type.
15586
15587         * cs-parser.jay (cast_expression): Remove old hack that only
15588         allowed a limited set of types to be handled.  Now we take a
15589         unary_expression and we resolve to a type during semantic
15590         analysis.
15591
15592         Use the grammar productions from Rhys to handle casts (this is
15593         not complete like Rhys syntax yet, we fail to handle that corner
15594         case that C# has regarding (-x), but we will get there.
15595
15596 2001-11-22  Ravi Pratap  <ravi@ximian.com>
15597
15598         * class.cs (EmitFieldInitializer): Take care of the case when we have a
15599         field which is an array type.
15600
15601         * cs-parser.jay (declare_local_variables): Support array initialization too.
15602
15603         * typemanager.cs (MakeKey): Implement.
15604
15605         (everywhere): Use the above appropriately.
15606
15607         * cs-parser.jay (for_statement): Update for array initialization while
15608         declaring variables.
15609
15610         * ecore.cs : The error message was correct, it's the variable's names that
15611         were misleading ;-) Make the code more readable.
15612
15613         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
15614         the correct type etc.
15615
15616         (ConvertExplicit): Handle Enum types by examining the underlying type.
15617
15618 2001-11-21  Ravi Pratap  <ravi@ximian.com>
15619
15620         * parameter.cs (GetCallingConvention): Always return
15621         CallingConventions.Standard for now.
15622
15623 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
15624
15625         * expression.cs (Binary.ResolveOperator): Update the values of `l'
15626         and `r' after calling DoNumericPromotions.
15627
15628         * ecore.cs: Fix error message (the types were in the wrong order).
15629
15630         * statement.cs (Foreach.ProbeCollectionType): Need to pass
15631         BindingFlags.Instance as well 
15632
15633         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
15634         implicit int literal conversion in an empty cast so that we
15635         propagate the right type upstream.
15636
15637         (UnboxCast): new class used to unbox value types.
15638         (Expression.ConvertExplicit): Add explicit type conversions done
15639         by unboxing.
15640
15641         (Expression.ImplicitNumericConversion): Oops, forgot to test for
15642         the target type before applying the implicit LongLiterals to ULong
15643         literal cast.
15644
15645 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
15646
15647         * cs-parser.jay (for_statement): Reworked the way For works: now
15648         we declare manually any variables that are introduced in
15649         for_initializer to solve the problem of having out-of-band code
15650         emition (that is what got for broken).
15651
15652         (declaration_statement): Perform the actual variable declaration
15653         that used to be done in local_variable_declaration here.
15654
15655         (local_variable_declaration): Do not declare anything, just pass
15656         the information on a DictionaryEntry
15657
15658 2001-11-20  Ravi Pratap  <ravi@ximian.com>
15659
15660         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
15661         re-write of the logic to now make it recursive.
15662
15663         (UpdateIndices): Re-write accordingly.
15664
15665         Store element data in a separate ArrayData list in the above methods.
15666
15667         (MakeByteBlob): Implement to dump the array data into a byte array.
15668
15669 2001-11-19  Ravi Pratap  <ravi@ximian.com>
15670
15671         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
15672         into CheckIndices.
15673
15674         * constant.cs (Define): Implement.
15675
15676         (EmitConstant): Re-write fully.
15677
15678         Pass in location info.
15679
15680         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
15681         respectively.
15682
15683         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
15684         DictionaryEntry since we need location info too.
15685
15686         (constant_declaration): Update accordingly.
15687
15688         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
15689         code into another method : UpdateIndices.
15690
15691 2001-11-18  Ravi Pratap  <ravi@ximian.com>
15692
15693         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
15694         some type checking etc.
15695
15696 2001-11-17  Ravi Pratap  <ravi@ximian.com>
15697
15698         * expression.cs (ArrayCreation::ValidateInitializers): Implement
15699         bits to provide dimension info if the user skips doing that.
15700
15701         Update second constructor to store the rank correctly.
15702
15703 2001-11-16  Ravi Pratap  <ravi@ximian.com>
15704
15705         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
15706         and try to implement.
15707
15708         * ../errors/cs0150.cs : Add.
15709
15710         * ../errors/cs0178.cs : Add.
15711
15712 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
15713
15714         * statement.cs: Implement foreach on multi-dimensional arrays. 
15715
15716         * parameter.cs (Parameters.GetParameterByName): Also lookup the
15717         name of the params argument.
15718
15719         * expression.cs: Use EmitStoreOpcode to get the right opcode while
15720         initializing the array.
15721
15722         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
15723         we can use this elsewhere.
15724
15725         * statement.cs: Finish implementation of foreach for single
15726         dimension arrays.
15727
15728         * cs-parser.jay: Use an out-of-band stack to pass information
15729         around, I wonder why I need this.
15730
15731         foreach_block: Make the new foreach_block the current_block.
15732
15733         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
15734         function used to return a static Parameters structure.  Used for
15735         empty parameters, as those are created very frequently.
15736
15737         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
15738
15739 2001-11-15  Ravi Pratap  <ravi@ximian.com>
15740
15741         * interface.cs : Default modifier is private, not public. The
15742         make verify test passes again.
15743
15744 2001-11-15  Ravi Pratap  <ravi@ximian.com>
15745
15746         * support.cs (ReflectionParameters): Fix logic to determine
15747         whether the last parameter is a params one. Test 9 passes again.
15748
15749         * delegate.cs (Populate): Register the builders we define with
15750         RegisterParameterForBuilder. Test 19 passes again.
15751
15752         * cs-parser.jay (property_declaration): Reference $6 instead
15753         of $$ to get at the location.
15754
15755         (indexer_declaration): Similar stuff.
15756
15757         (attribute): Ditto.
15758
15759         * class.cs (Property): Register parameters for the Get and Set methods
15760         if they exist. Test 23 passes again.
15761
15762         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
15763         call to EmitArguments as we are sure there aren't any params arguments. 
15764         Test 32 passes again.
15765
15766         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
15767         IndexOutOfRangeException. 
15768
15769         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
15770         Test 33 now passes again.
15771
15772 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
15773
15774         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
15775         broke a bunch of things.  Will have to come up with a better way
15776         of tracking locations.
15777
15778         * statement.cs: Implemented foreach for single dimension arrays.
15779
15780 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
15781
15782         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
15783         an error.  This removes the lookup from the critical path.
15784
15785         * cs-parser.jay: Removed use of temporary_loc, which is completely
15786         broken. 
15787
15788 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
15789
15790         * support.cs (ReflectionParameters.ParameterModifier): Report
15791         whether the argument is a PARAMS argument or not.
15792
15793         * class.cs: Set the attribute `ParamArrayAttribute' on the
15794         parameter argument.
15795
15796         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
15797         and cons_param_array_attribute (ConstructorInfo for
15798         ParamArrayAttribute)., 
15799
15800         * codegen.cs: Emit the return using the `Return' statement, that
15801         way we can report the error correctly for missing return values. 
15802
15803         * class.cs (Method.Emit): Clean up.
15804
15805         * expression.cs (Argument.Resolve): Take another argument: the
15806         location where this argument is used.  Notice that this is not
15807         part of the "Argument" class as to reduce the size of the
15808         structure (we know the approximate location anyways).
15809
15810         Test if the argument is a variable-reference, if not, then
15811         complain with a 206.
15812
15813         (Argument.Emit): Emit addresses of variables.
15814
15815         (Argument.FullDesc): Simplify.
15816
15817         (Invocation.DoResolve): Update for Argument.Resolve.
15818
15819         (ElementAccess.DoResolve): ditto.
15820
15821         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
15822         method should be virtual, as this method is always virtual.
15823
15824         (NewDelegate.DoResolve): Update for Argument.Resolve.
15825
15826         * class.cs (ConstructorInitializer.DoResolve): ditto.
15827
15828         * attribute.cs (Attribute.Resolve): ditto.
15829
15830 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
15831
15832         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
15833
15834         * expression.cs (ParameterReference): Drop IStackStorage and implement
15835         IAssignMethod instead. 
15836
15837         (LocalVariableReference): ditto.
15838
15839         * ecore.cs (FieldExpr): Drop IStackStorage and implement
15840         IAssignMethod instead. 
15841
15842 2001-11-13  Miguel de Icaza <miguel@ximian.com>
15843
15844         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
15845         enumerations that are used in heavily used structures derive from
15846         byte in a laughable and pathetic attempt to reduce memory usage.
15847         This is the kind of pre-optimzations that you should not do at
15848         home without adult supervision.
15849
15850         * expression.cs (UnaryMutator): New class, used to handle ++ and
15851         -- separatedly from the other unary operators.  Cleans up the
15852         code, and kills the ExpressionStatement dependency in Unary.
15853
15854         (Unary): Removed `method' and `Arguments' from this class, making
15855         it smaller, and moving it all to SimpleCall, so I can reuse this
15856         code in other locations and avoid creating a lot of transient data
15857         strucutres when not required.
15858
15859         * cs-parser.jay: Adjust for new changes.
15860
15861 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
15862
15863         * enum.cs (Enum.Populate): If there is a failure during
15864         definition, return
15865
15866         * cs-parser.jay (opt_enum_base): we used to catch type errors
15867         here, but this is really incorrect.  The type error should be
15868         catched during semantic analysis.
15869
15870 2001-12-11  Ravi Pratap  <ravi@ximian.com>
15871
15872         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
15873         current_local_parameters as expected since I, in my stupidity, had forgotten
15874         to do this :-)
15875
15876         * attribute.cs (GetValidPlaces): Fix stupid bug.
15877
15878         * class.cs (Method::Emit): Perform check on applicability of attributes.
15879
15880         (Constructor::Emit): Ditto.
15881
15882         (Field::Emit): Ditto.
15883
15884         (Field.Location): Store location information.
15885
15886         (Property, Event, Indexer, Operator): Ditto.
15887
15888         * cs-parser.jay (field_declaration): Pass in location for each field.
15889
15890         * ../errors/cs0592.cs : Add.
15891
15892 2001-11-12  Ravi Pratap  <ravi@ximian.com>
15893
15894         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
15895
15896         (InitCoreTypes): Update accordingly.
15897
15898         (RegisterAttrType, LookupAttr): Implement.
15899
15900         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
15901         info about the same.
15902
15903         (Resolve): Update to populate the above as necessary.
15904
15905         (Error592): Helper.
15906
15907         (GetValidPlaces): Helper to the above.
15908
15909         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
15910
15911         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
15912
15913 2001-11-12  Ravi Pratap  <ravi@ximian.com>
15914
15915         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
15916
15917         * ../errors/cs0617.cs : Add.
15918
15919 2001-11-11  Ravi Pratap  <ravi@ximian.com>
15920
15921         * enum.cs (Emit): Rename to Populate to be more consistent with what
15922         we expect it to do and when exactly it is called.
15923
15924         * class.cs, rootcontext.cs : Update accordingly.
15925
15926         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
15927         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
15928
15929         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
15930
15931         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
15932         of a fieldinfo using the above, when dealing with a FieldBuilder.
15933
15934 2001-11-10  Ravi Pratap  <ravi@ximian.com>
15935
15936         * ../errors/cs0031.cs : Add.
15937
15938         * ../errors/cs1008.cs : Add.
15939
15940         * ../errrors/cs0543.cs : Add.
15941
15942         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
15943         enum type.
15944
15945         (FindMembers): Implement.
15946
15947         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
15948         enums and delegates too.
15949
15950         (enum_types): Rename to builder_to_enum.
15951
15952         (delegate_types): Rename to builder_to_delegate.
15953
15954         * delegate.cs (FindMembers): Implement.
15955
15956 2001-11-09  Ravi Pratap  <ravi@ximian.com>
15957
15958         * typemanager.cs (IsEnumType): Implement.
15959
15960         * enum.cs (Emit): Re-write parts to account for the underlying type
15961         better and perform checking etc.
15962
15963         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
15964         of the underlying type.
15965
15966         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
15967         value
15968
15969         * enum.cs (error31): Helper to report error #31.
15970
15971         * cs-parser.jay (enum_declaration): Store location of each member too.
15972
15973         * enum.cs (member_to_location): New hashtable. 
15974
15975         (AddEnumMember): Update location hashtable.
15976
15977         (Emit): Use the location of each member while reporting errors.
15978
15979 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
15980
15981         * cs-parser.jay: A for_initializer if is a
15982         local_variable_declaration really ammount to have an implicit
15983         block with the variable declaration and no initializer for for.
15984
15985         * statement.cs (For.Emit): Cope with null initializers.
15986
15987         This fixes the infinite loop on for initializers.
15988
15989 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
15990
15991         * enum.cs: More cleanup.
15992
15993         * ecore.cs: Remove dead code.
15994
15995         * class.cs (Property.Emit): More simplification.
15996         (Event.Emit): ditto.
15997
15998         Reworked to have less levels of indentation.
15999
16000 2001-11-08  Ravi Pratap  <ravi@ximian.com>
16001
16002         * class.cs (Property): Emit attributes.
16003
16004         (Field): Ditto.
16005
16006         (Event): Ditto.
16007
16008         (Indexer): Ditto.
16009
16010         (Operator): Ditto.
16011
16012         * enum.cs (Emit): Ditto.
16013
16014         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
16015         Enums too.
16016
16017         * class.cs (Field, Event, etc.): Move attribute generation into the
16018         Emit method everywhere.
16019
16020         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
16021         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
16022         as we had no way of defining nested enums !
16023
16024         * rootcontext.cs : Adjust code accordingly.
16025
16026         * typemanager.cs (AddEnumType): To keep track of enum types separately.
16027
16028 2001-11-07  Ravi Pratap  <ravi@ximian.com>
16029
16030         * expression.cs (EvalConstantExpression): Move into ecore.cs
16031
16032         * enum.cs (Enum): Rename some members and make them public and readonly
16033         according to our convention.
16034
16035         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
16036         nothing else.
16037
16038         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
16039
16040         (Enum::Emit): Write a simple version for now which doesn't try to compute
16041         expressions. I shall modify this to be more robust in just a while.
16042
16043         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
16044
16045         (TypeContainer::CloseType): Create the Enum types too.
16046
16047         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
16048
16049         * expression.cs (EvalConstantExpression): Get rid of completely.
16050
16051         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
16052         user-defined values and other cases.
16053
16054         (IsValidEnumLiteral): Helper function.
16055
16056         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
16057         out there in the case we had a literal FieldExpr.
16058
16059         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
16060
16061         (Literalize): Revamp a bit to take two arguments.
16062
16063         (EnumLiteral): New class which derives from Literal to wrap enum literals.
16064
16065 2001-11-06  Ravi Pratap  <ravi@ximian.com>
16066
16067         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
16068
16069         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
16070
16071         (Resolve): Use the above to ensure we have proper initializers.
16072
16073 2001-11-05  Ravi Pratap  <ravi@ximian.com>
16074
16075         * expression.cs (Expression::EvalConstantExpression): New method to 
16076         evaluate constant expressions.
16077
16078         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
16079
16080 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
16081
16082         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
16083         in an array.
16084
16085         (Binary.ResolveOperator): Handle operator != (object a, object b)
16086         and operator == (object a, object b);
16087
16088         (Binary.DoNumericPromotions): Indicate whether the numeric
16089         promotion was possible.
16090
16091         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
16092         Implement.  
16093
16094         Made the ArrayAccess implement interface IAssignMethod instead of
16095         IStackStore as the order in which arguments are passed reflects
16096         this.
16097
16098         * assign.cs: Instead of using expr.ExprClass to select the way of
16099         assinging, probe for the IStackStore/IAssignMethod interfaces.
16100
16101         * typemanager.cs: Load InitializeArray definition.
16102
16103         * rootcontext.cs (RootContext.MakeStaticData): Used to define
16104         static data that can be used to initialize arrays. 
16105
16106 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
16107
16108         * expression.cs: Handle operator== and operator!= for booleans.
16109
16110         (Conditioal.Reduce): Implement reducer for the ?: operator.
16111
16112         (Conditional.Resolve): Implement dead code elimination.
16113
16114         (Binary.Resolve): Catch string literals and return a new
16115         concatenated string.
16116
16117         (Unary.Reduce): Implement reduction of unary expressions.
16118
16119         * ecore.cs: Split out the expression core handling here.
16120
16121         (Expression.Reduce): New method used to perform constant folding
16122         and CSE.  This is needed to support constant-expressions. 
16123
16124         * statement.cs (Statement.EmitBoolExpression): Pass true and false
16125         targets, and optimize for !x.
16126
16127 2001-11-04  Ravi Pratap  <ravi@ximian.com>
16128
16129         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
16130         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
16131         set custom atttributes.
16132
16133         * literal.cs (Literal::GetValue): New abstract method to return the actual
16134         value of the literal, cast as an object.
16135
16136         (*Literal): Implement GetValue method.
16137
16138         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
16139         expressions to the arraylist but objects of type Argument.
16140
16141         * class.cs (TypeContainer::Emit): Emit our attributes too.
16142
16143         (Method::Emit, Constructor::Emit): Ditto.
16144
16145         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
16146         to be ignoring earlier.
16147
16148 2001-11-03  Ravi Pratap  <ravi@ximian.com>
16149
16150         * attribute.cs (AttributeSection::Define): Implement to do the business
16151         of constructing a CustomAttributeBuilder.
16152
16153         (Attribute): New trivial class. Increases readability of code.  
16154
16155         * cs-parser.jay : Update accordingly.
16156
16157         (positional_argument_list, named_argument_list, named_argument): New rules
16158
16159         (attribute_arguments): Use the above so that we are more correct.
16160
16161 2001-11-02  Ravi Pratap  <ravi@ximian.com>
16162
16163         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
16164         to perform all checks for a method with a params parameter.
16165
16166         (Invocation::OverloadResolve): Update to use the above method and therefore
16167         cope correctly with params method invocations.
16168
16169         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
16170         params too.
16171
16172         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
16173         constructors in our parent too because we can't afford to miss out on 
16174         protected ones ;-)
16175
16176         * attribute.cs (AttributeSection): New name for the class Attribute
16177
16178         Other trivial changes to improve readability.
16179
16180         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
16181         use the new class names.
16182
16183 2001-11-01  Ravi Pratap  <ravi@ximian.com>
16184
16185         * class.cs (Method::Define): Complete definition for params types too
16186
16187         (Indexer::Define): Ditto.
16188
16189         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
16190         Cope everywhere with a request for info about the array parameter.
16191
16192 2001-11-01  Ravi Pratap  <ravi@ximian.com>
16193
16194         * tree.cs (RecordNamespace): Fix up to check for the correct key.
16195
16196         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
16197         local_variable_type to extract the string corresponding to the type.
16198
16199         (local_variable_type): Fixup the action to use the new helper method.
16200
16201         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
16202         go.
16203
16204         * expression.cs : Clean out code which uses the above.
16205
16206 2001-10-31  Ravi Pratap  <ravi@ximian.com>
16207
16208         * typemanager.cs (RegisterMethod): Check if we already have an existing key
16209         and bale out if necessary by returning a false.
16210
16211         (RegisterProperty): Ditto.
16212
16213         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
16214         and print out appropriate error messages.
16215
16216         * interface.cs (everywhere): Ditto.
16217
16218         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
16219         location to constructor.
16220
16221         * class.cs (Property, Event, Indexer): Update accordingly.
16222
16223         * ../errors/cs111.cs : Added.
16224
16225         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
16226         of a method, as laid down by the spec.
16227
16228         (Invocation::OverloadResolve): Use the above method.
16229
16230 2001-10-31  Ravi Pratap  <ravi@ximian.com>
16231
16232         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
16233         now take a TypeContainer and a Parameters object.
16234
16235         (ParameterData): Modify return type of ParameterModifier method to be 
16236         Parameter.Modifier and not a string.
16237
16238         (ReflectionParameters, InternalParameters): Update accordingly.
16239
16240         * expression.cs (Argument::GetParameterModifier): Same here.
16241
16242         * support.cs (InternalParameters::ParameterType): Find a better way of determining
16243         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
16244         symbol in it at all so maybe this is only for now.
16245
16246 2001-10-30  Ravi Pratap  <ravi@ximian.com>
16247
16248         * support.cs (InternalParameters): Constructor now takes an extra argument 
16249         which is the actual Parameters class.
16250
16251         (ParameterDesc): Update to provide info on ref/out modifiers.
16252
16253         * class.cs (everywhere): Update call to InternalParameters to pass in
16254         the second argument too.
16255
16256         * support.cs (ParameterData): Add ParameterModifier, which is a method 
16257         to return the modifier info [ref/out etc]
16258
16259         (InternalParameters, ReflectionParameters): Implement the above.
16260
16261         * expression.cs (Argument::ParameterModifier): Similar function to return
16262         info about the argument's modifiers.
16263
16264         (Invocation::OverloadResolve): Update to take into account matching modifiers 
16265         too.
16266
16267         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
16268         a new SetFormalParameters object which we pass to InternalParameters.
16269
16270 2001-10-30  Ravi Pratap  <ravi@ximian.com>
16271
16272         * expression.cs (NewArray): Merge into the ArrayCreation class.
16273
16274 2001-10-29  Ravi Pratap  <ravi@ximian.com>
16275
16276         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
16277         NewUserdefinedArray into one as there wasn't much of a use in having
16278         two separate ones.
16279
16280         * expression.cs (Argument): Change field's name to ArgType from Type.
16281
16282         (Type): New readonly property which returns the proper type, taking into 
16283         account ref/out modifiers.
16284
16285         (everywhere): Adjust code accordingly for the above.
16286
16287         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
16288         whether we are emitting for a ref or out parameter.
16289
16290         * expression.cs (Argument::Emit): Use the above field to set the state.
16291
16292         (LocalVariableReference::Emit): Update to honour the flag and emit the
16293         right stuff.
16294
16295         * parameter.cs (Attributes): Set the correct flags for ref parameters.
16296
16297         * expression.cs (Argument::FullDesc): New function to provide a full desc.
16298
16299         * support.cs (ParameterData): Add method ParameterDesc to the interface.
16300
16301         (ReflectionParameters, InternalParameters): Implement the above method.
16302
16303         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
16304         reporting errors.
16305
16306         (Invocation::FullMethodDesc): Ditto. 
16307
16308 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
16309
16310         * cs-parser.jay: Add extra production for the second form of array
16311         creation. 
16312
16313         * expression.cs (ArrayCreation): Update to reflect the above
16314         change. 
16315
16316         * Small changes to prepare for Array initialization.
16317
16318 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
16319
16320         * typemanager.cs (ImplementsInterface): interface might be null;
16321         Deal with this problem;
16322
16323         Also, we do store negative hits on the cache (null values), so use
16324         this instead of calling t.GetInterfaces on the type everytime.
16325
16326 2001-10-28  Ravi Pratap  <ravi@ximian.com>
16327
16328         * typemanager.cs (IsBuiltinType): New method to help determine the same.
16329
16330         * expression.cs (New::DoResolve): Get rid of array creation code and instead
16331         split functionality out into different classes.
16332
16333         (New::FormArrayType): Move into NewBuiltinArray.
16334
16335         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
16336         quite useless.
16337
16338         (NewBuiltinArray): New class to handle creation of built-in arrays.
16339
16340         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
16341         account creation of one-dimensional arrays.
16342
16343         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
16344
16345         (NewUserdefinedArray::DoResolve): Implement.
16346
16347         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
16348
16349         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
16350         we maintain inside the TypeManager. This is necessary to perform lookups on the
16351         module builder.
16352
16353         (LookupType): Update to perform GetType on the module builders too.     
16354
16355         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
16356
16357         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
16358
16359 2001-10-23  Ravi Pratap  <ravi@ximian.com>
16360
16361         * expression.cs (New::DoResolve): Implement guts of array creation.
16362
16363         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
16364
16365 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
16366
16367         * expression.cs: Fix bug I introduced lsat night that broke
16368         Delegates. 
16369
16370         (Expression.Resolve): Report a 246 error (can not resolve name)
16371         if we find a SimpleName in the stream.
16372
16373         (Expression.ResolveLValue): Ditto.
16374
16375         (Expression.ResolveWithSimpleName): This function is a variant of
16376         ResolveName, this one allows SimpleNames to be returned without a
16377         warning.  The only consumer of SimpleNames is MemberAccess
16378
16379 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
16380
16381         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
16382         might arrive here.  I have my doubts that this is correct.
16383
16384         * statement.cs (Lock): Implement lock statement.
16385
16386         * cs-parser.jay: Small fixes to support `lock' and `using'
16387
16388         * cs-tokenizer.cs: Remove extra space
16389
16390         * driver.cs: New flag --checked, allows to turn on integer math
16391         checking. 
16392
16393         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
16394         Threading.Monitor.Exit 
16395
16396 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
16397
16398         * expression.cs (IndexerAccess::DoResolveLValue): Set the
16399         Expression Class to be IndexerAccess.
16400
16401         Notice that Indexer::DoResolve sets the eclass to Value.
16402
16403 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
16404
16405         * class.cs (TypeContainer::Emit): Emit code for indexers.
16406
16407         * assign.cs (IAssignMethod): New interface implemented by Indexers
16408         and Properties for handling assignment.
16409
16410         (Assign::Emit): Simplify and reuse code. 
16411
16412         * expression.cs (IndexerAccess, PropertyExpr): Implement
16413         IAssignMethod, clean up old code. 
16414
16415 2001-10-22  Ravi Pratap  <ravi@ximian.com>
16416
16417         * typemanager.cs (ImplementsInterface): New method to determine if a type
16418         implements a given interface. Provides a nice cache too.
16419
16420         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
16421         method.
16422
16423         (ConvertReferenceExplicit): Ditto.
16424
16425         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
16426         various methods, with correct names etc.
16427
16428         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
16429         Operator.UnaryNegation.
16430
16431         * cs-parser.jay (operator_declarator): Be a little clever in the case where
16432         we have a unary plus or minus operator.
16433
16434         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
16435         UnaryMinus.
16436
16437         * everywhere : update accordingly.
16438
16439         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
16440         respectively.
16441
16442         * class.cs (Method::Define): For the case where we are implementing a method
16443         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
16444         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
16445
16446 2001-10-21  Ravi Pratap  <ravi@ximian.com>
16447
16448         * interface.cs (FindMembers): Implement to work around S.R.E
16449         lameness.
16450
16451         * typemanager.cs (IsInterfaceType): Implement.
16452
16453         (FindMembers): Update to handle interface types too.
16454
16455         * expression.cs (ImplicitReferenceConversion): Re-write bits which
16456         use IsAssignableFrom as that is not correct - it doesn't work.
16457
16458         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
16459         and accordingly override EmitStatement.
16460
16461         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
16462         using the correct logic :-)
16463
16464 2001-10-19  Ravi Pratap  <ravi@ximian.com>
16465
16466         * ../errors/cs-11.cs : Add to demonstrate error -11 
16467
16468 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
16469
16470         * assign.cs (Assign::Resolve): Resolve right hand side first, and
16471         then pass this as a hint to ResolveLValue.
16472
16473         * expression.cs (FieldExpr): Add Location information
16474
16475         (FieldExpr::LValueResolve): Report assignment to readonly
16476         variable. 
16477
16478         (Expression::ExprClassFromMemberInfo): Pass location information.
16479
16480         (Expression::ResolveLValue): Add new method that resolves an
16481         LValue. 
16482
16483         (Expression::DoResolveLValue): Default invocation calls
16484         DoResolve. 
16485
16486         (Indexers): New class used to keep track of indexers in a given
16487         Type. 
16488
16489         (IStackStore): Renamed from LValue, as it did not really describe
16490         what this did.  Also ResolveLValue is gone from this interface and
16491         now is part of Expression.
16492
16493         (ElementAccess): Depending on the element access type
16494
16495         * typemanager.cs: Add `indexer_name_type' as a Core type
16496         (System.Runtime.CompilerServices.IndexerNameAttribute)
16497
16498         * statement.cs (Goto): Take a location.
16499
16500 2001-10-18  Ravi Pratap  <ravi@ximian.com>
16501
16502         * delegate.cs (Delegate::VerifyDelegate): New method to verify
16503         if two delegates are compatible.
16504
16505         (NewDelegate::DoResolve): Update to take care of the case when
16506         we instantiate a delegate from another delegate.
16507
16508         * typemanager.cs (FindMembers): Don't even try to look up members
16509         of Delegate types for now.
16510
16511 2001-10-18  Ravi Pratap  <ravi@ximian.com>
16512
16513         * delegate.cs (NewDelegate): New class to take care of delegate
16514         instantiation.
16515
16516         * expression.cs (New): Split the delegate related code out into 
16517         the NewDelegate class.
16518
16519         * delegate.cs (DelegateInvocation): New class to handle delegate 
16520         invocation.
16521
16522         * expression.cs (Invocation): Split out delegate related code into
16523         the DelegateInvocation class.
16524
16525 2001-10-17  Ravi Pratap  <ravi@ximian.com>
16526
16527         * expression.cs (New::DoResolve): Implement delegate creation fully
16528         and according to the spec.
16529
16530         (New::DoEmit): Update to handle delegates differently.
16531
16532         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
16533         because of which we were printing out arguments in reverse order !
16534
16535         * delegate.cs (VerifyMethod): Implement to check if the given method
16536         matches the delegate.
16537
16538         (FullDelegateDesc): Implement.
16539
16540         (VerifyApplicability): Implement.
16541
16542         * expression.cs (Invocation::DoResolve): Update to accordingly handle
16543         delegate invocations too.
16544
16545         (Invocation::Emit): Ditto.
16546
16547         * ../errors/cs1593.cs : Added.
16548
16549         * ../errors/cs1594.cs : Added.
16550
16551         * delegate.cs (InstanceExpression, TargetMethod): New properties.
16552
16553 2001-10-16  Ravi Pratap  <ravi@ximian.com>
16554
16555         * typemanager.cs (intptr_type): Core type for System.IntPtr
16556
16557         (InitCoreTypes): Update for the same.
16558
16559         (iasyncresult_type, asynccallback_type): Ditto.
16560
16561         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
16562         correct.
16563
16564         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
16565         too.
16566
16567         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
16568         the builders for the 4 members of a delegate type :-)
16569
16570         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
16571         type.
16572
16573         * expression.cs (New::DoResolve): Implement guts for delegate creation.
16574
16575         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
16576
16577 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
16578
16579         * statement.cs (Break::Emit): Implement.   
16580         (Continue::Emit): Implement.
16581
16582         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
16583         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
16584         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
16585         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
16586         end loop
16587
16588         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
16589         properties that track the label for the current loop (begin of the
16590         loop and end of the loop).
16591
16592 2001-10-15  Ravi Pratap  <ravi@ximian.com>
16593
16594         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
16595         use of emitting anything at all.
16596
16597         * class.cs, rootcontext.cs : Get rid of calls to the same.
16598
16599         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
16600
16601         (Populate): Define the constructor correctly and set the implementation
16602         attributes.
16603
16604         * typemanager.cs (delegate_types): New hashtable to hold delegates that
16605         have been defined.
16606
16607         (AddDelegateType): Implement.
16608
16609         (IsDelegateType): Implement helper method.
16610
16611         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
16612
16613         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
16614         and accordingly handle it.
16615
16616         * delegate.cs (Populate): Take TypeContainer argument.
16617         Implement bits to define the Invoke method. However, I still haven't figured out
16618         how to take care of the native int bit :-(
16619
16620         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
16621         Qualify the name of the delegate, not its return type !
16622
16623         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
16624         conversion.
16625
16626         (StandardConversionExists): Checking for array types turns out to be recursive.
16627
16628         (ConvertReferenceExplicit): Implement array conversion.
16629
16630         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
16631
16632 2001-10-12  Ravi Pratap  <ravi@ximian.com>
16633
16634         * cs-parser.jay (delegate_declaration): Store the fully qualified
16635         name as it is a type declaration.
16636
16637         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
16638         readonly.
16639
16640         (DefineDelegate): Renamed from Define. Does the same thing essentially,
16641         as TypeContainer::DefineType.
16642
16643         (Populate): Method in which all the definition of the various methods (Invoke)
16644         etc is done.
16645
16646         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
16647         see.
16648
16649         (CloseDelegate): Finally creates the delegate.
16650
16651         * class.cs (TypeContainer::DefineType): Update to define delegates.
16652         (Populate, Emit and CloseType): Do the same thing here too.
16653
16654         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
16655         delegates in all these operations.
16656
16657 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
16658
16659         * expression.cs: LocalTemporary: a new expression used to
16660         reference a temporary that has been created.
16661
16662         * assign.cs: Handle PropertyAccess back here, so that we can
16663         provide the proper semantic access to properties.
16664
16665         * expression.cs (Expression::ConvertReferenceExplicit): Implement
16666         a few more explicit conversions. 
16667
16668         * modifiers.cs: `NEW' modifier maps to HideBySig.
16669
16670         * expression.cs (PropertyExpr): Make this into an
16671         ExpressionStatement, and support the EmitStatement code path. 
16672
16673         Perform get/set error checking, clean up the interface.
16674
16675         * assign.cs: recognize PropertyExprs as targets, and if so, turn
16676         them into toplevel access objects.
16677
16678 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
16679
16680         * expression.cs: PropertyExpr::PropertyExpr: use work around the
16681         SRE.
16682
16683         * typemanager.cs: Keep track here of our PropertyBuilders again to
16684         work around lameness in SRE.
16685
16686 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
16687
16688         * expression.cs (LValue::LValueResolve): New method in the
16689         interface, used to perform a second resolution pass for LValues. 
16690
16691         (This::DoResolve): Catch the use of this in static methods.
16692
16693         (This::LValueResolve): Implement.
16694
16695         (This::Store): Remove warning, assigning to `this' in structures
16696         is 
16697
16698         (Invocation::Emit): Deal with invocation of
16699         methods on value types.  We need to pass the address to structure
16700         methods rather than the object itself.  (The equivalent code to
16701         emit "this" for structures leaves the entire structure on the
16702         stack instead of a pointer to it). 
16703
16704         (ParameterReference::DoResolve): Compute the real index for the
16705         argument based on whether the method takes or not a `this' pointer
16706         (ie, the method is static).
16707
16708         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
16709         value types returned from functions when we need to invoke a
16710         method on the sturcture.
16711
16712
16713 2001-10-11  Ravi Pratap  <ravi@ximian.com>
16714
16715         * class.cs (TypeContainer::DefineType): Method to actually do the business of
16716         defining the type in the Modulebuilder or Typebuilder. This is to take
16717         care of nested types which need to be defined on the TypeBuilder using
16718         DefineNestedMethod.
16719
16720         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
16721         methods in RootContext, only ported to be part of TypeContainer.
16722
16723         (TypeContainer::GetInterfaceOrClass): Ditto.
16724
16725         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
16726
16727         * interface.cs (Interface::DefineInterface): New method. Does exactly
16728         what RootContext.CreateInterface did earlier, only it takes care of nested types 
16729         too.
16730
16731         (Interface::GetInterfaces): Move from RootContext here and port.
16732
16733         (Interface::GetInterfaceByName): Same here.
16734
16735         * rootcontext.cs (ResolveTree): Re-write.
16736
16737         (PopulateTypes): Re-write.
16738
16739         * class.cs (TypeContainer::Populate): Populate nested types too.
16740         (TypeContainer::Emit): Emit nested members too.
16741
16742         * typemanager.cs (AddUserType): Do not make use of the FullName property,
16743         instead just use the name argument passed in as it is already fully
16744         qualified.
16745
16746         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
16747         to TypeContainer mapping to see if a type is user-defined.
16748
16749         * class.cs (TypeContainer::CloseType): Implement. 
16750
16751         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
16752         the default constructor.
16753
16754         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
16755         twice.
16756
16757         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
16758
16759         * interface.cs (CloseType): Create the type here.
16760
16761         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
16762         the hierarchy.
16763
16764         Remove all the methods which are now in TypeContainer.
16765
16766 2001-10-10  Ravi Pratap  <ravi@ximian.com>
16767
16768         * delegate.cs (Define): Re-write bits to define the delegate
16769         correctly.
16770
16771 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
16772
16773         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
16774
16775         * expression.cs (ImplicitReferenceConversion): handle null as well
16776         as a source to convert to any reference type.
16777
16778         * statement.cs (Return): Perform any implicit conversions to
16779         expected return type.  
16780
16781         Validate use of return statement.  
16782
16783         * codegen.cs (EmitContext): Pass the expected return type here.
16784
16785         * class.cs (Method, Constructor, Property): Pass expected return
16786         type to EmitContext.
16787
16788 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
16789
16790         * expression.cs: Make DoResolve take an EmitContext instead of a
16791         TypeContainer.
16792
16793         Replaced `l' and `location' for `loc', for consistency.
16794
16795         (Error, Warning): Remove unneeded Tc argument.
16796
16797         * assign.cs, literal.cs, constant.cs: Update to new calling
16798         convention. 
16799
16800         * codegen.cs: EmitContext now contains a flag indicating whether
16801         code is being generated in a static method or not.
16802
16803         * cs-parser.jay: DecomposeQI, new function that replaces the old
16804         QualifiedIdentifier.  Now we always decompose the assembled
16805         strings from qualified_identifier productions into a group of
16806         memberaccesses.
16807
16808 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
16809
16810         * rootcontext.cs: Deal with field-less struct types correctly now
16811         by passing the size option to Define Type.
16812
16813         * class.cs: Removed hack that created one static field. 
16814
16815 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
16816
16817         * statement.cs: Moved most of the code generation here. 
16818
16819 2001-10-09  Ravi Pratap  <ravi@ximian.com>
16820
16821         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
16822         seem very right.
16823
16824         (ElementAccess): Remove useless bits for now - keep checks as the spec
16825         says.
16826
16827 2001-10-08  Ravi Pratap  <ravi@ximian.com>
16828
16829         * expression.cs (ElementAccess::DoResolve): Remove my crap code
16830         and start performing checks according to the spec.
16831
16832 2001-10-07  Ravi Pratap  <ravi@ximian.com>
16833
16834         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
16835         rank_specifiers instead.
16836
16837         (rank_specifiers): Change the order in which the rank specifiers are stored
16838
16839         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
16840
16841         * expression.cs (ElementAccess): Implement the LValue interface too.
16842
16843 2001-10-06  Ravi Pratap  <ravi@ximian.com>
16844
16845         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
16846         except that user defined conversions are not included.
16847
16848         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
16849         perform the conversion of the return type, if necessary.
16850
16851         (New::DoResolve): Check whether we are creating an array or an object
16852         and accordingly do the needful.
16853
16854         (New::Emit): Same here.
16855
16856         (New::DoResolve): Implement guts of array creation.
16857
16858         (New::FormLookupType): Helper function.
16859
16860 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
16861
16862         * codegen.cs: Removed most of the code generation here, and move the
16863         corresponding code generation bits to the statement classes. 
16864
16865         Added support for try/catch/finalize and throw.
16866
16867         * cs-parser.jay: Added support for try/catch/finalize.
16868
16869         * class.cs: Catch static methods having the flags override,
16870         virtual or abstract.
16871
16872         * expression.cs (UserCast): This user cast was not really doing
16873         what it was supposed to do.  Which is to be born in fully resolved
16874         state.  Parts of the resolution were being performed at Emit time! 
16875
16876         Fixed this code.
16877
16878 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
16879
16880         * expression.cs: Implicity convert the result from UserCast.
16881
16882 2001-10-05  Ravi Pratap  <ravi@ximian.com>
16883
16884         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
16885         prevented it from working correctly. 
16886
16887         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
16888         merely ConvertImplicit.
16889
16890 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
16891
16892         * typemanager.cs: Make the LookupTypeContainer function static,
16893         and not per-instance.  
16894
16895         * class.cs: Make static FindMembers (the one that takes a Type
16896         argument). 
16897
16898         * codegen.cs: Add EmitForeach here.
16899
16900         * cs-parser.jay: Make foreach a toplevel object instead of the
16901         inline expansion, as we need to perform semantic analysis on it. 
16902
16903 2001-10-05  Ravi Pratap  <ravi@ximian.com>
16904
16905         * expression.cs (Expression::ImplicitUserConversion): Rename to
16906         UserDefinedConversion.
16907
16908         (Expression::UserDefinedConversion): Take an extra argument specifying 
16909         whether we look for explicit user conversions too.
16910
16911         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
16912
16913         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
16914
16915         (ExplicitUserConversion): Make it a call to UserDefinedConversion
16916         with the appropriate arguments.
16917
16918         * cs-parser.jay (cast_expression): Record location too.
16919
16920         * expression.cs (Cast): Record location info.
16921
16922         (Expression::ConvertExplicit): Take location argument.
16923
16924         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
16925         to determine if we are doing explicit conversions.
16926
16927         (UserCast::Emit): Update accordingly.
16928
16929         (Expression::ConvertExplicit): Report an error if everything fails.
16930
16931         * ../errors/cs0030.cs : Add.
16932
16933 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
16934
16935         * modifiers.cs: If the ABSTRACT keyword is present, also set the
16936         virtual and newslot bits. 
16937
16938         * class.cs (TypeContainer::RegisterRequiredImplementations):
16939         Record methods we need.
16940
16941         (TypeContainer::MakeKey): Helper function to make keys for
16942         MethodBases, since the Methodbase key is useless.
16943
16944         (TypeContainer::Populate): Call RegisterRequiredImplementations
16945         before defining the methods.   
16946
16947         Create a mapping for method_builders_to_methods ahead of time
16948         instead of inside a tight loop.
16949
16950         (::RequireMethods):  Accept an object as the data to set into the
16951         hashtable so we can report interface vs abstract method mismatch.
16952
16953 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
16954
16955         * report.cs: Make all of it static.
16956
16957         * rootcontext.cs: Drop object_type and value_type computations, as
16958         we have those in the TypeManager anyways.
16959
16960         Drop report instance variable too, now it is a global.
16961
16962         * driver.cs: Use try/catch on command line handling.
16963
16964         Add --probe option to debug the error reporting system with a test
16965         suite. 
16966
16967         * report.cs: Add support for exiting program when a probe
16968         condition is reached.
16969
16970 2001-10-03  Ravi Pratap  <ravi@ximian.com>
16971
16972         * expression.cs (Binary::DoNumericPromotions): Fix the case when
16973         we do a forcible conversion regardless of type, to check if 
16974         ForceConversion returns a null.
16975
16976         (Binary::error19): Use location to report error.
16977
16978         (Unary::error23): Use location here too.
16979
16980         * ../errors/cs0019.cs : Check in.
16981
16982         * ../errors/cs0023.cs : Check in.
16983
16984         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
16985         case of a non-null MethodInfo object with a length of 0 !
16986
16987         (Binary::ResolveOperator): Flag error if overload resolution fails to find
16988         an applicable member - according to the spec :-)
16989         Also fix logic to find members in base types.
16990
16991         (Unary::ResolveOperator): Same here.
16992
16993         (Unary::report23): Change name to error23 and make first argument a TypeContainer
16994         as I was getting thoroughly confused between this and error19 :-)
16995
16996         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
16997         (::FindMostEncompassedType): Implement.
16998         (::FindMostEncompassingType): Implement.
16999         (::StandardConversionExists): Implement.
17000
17001         (UserImplicitCast): Re-vamp. We now need info about most specific
17002         source and target types so that we can do the necessary conversions.
17003
17004         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
17005         mathematical union with no duplicates.
17006
17007 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
17008
17009         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
17010         in order from base classes to child classes, so that we can in
17011         child classes look up in our parent for method names and
17012         attributes (required for handling abstract, virtual, new, override
17013         constructs: we need to instrospect our base class, and if we dont
17014         populate the classes in order, the introspection might be
17015         incorrect.  For example, a method could query its parent before
17016         the parent has any methods and would determine that the parent has
17017         no abstract methods (while it could have had them)).
17018
17019         (RootContext::CreateType): Record the order in which we define the
17020         classes.
17021
17022 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
17023
17024         * class.cs (TypeContainer::Populate): Also method definitions can
17025         fail now, keep track of this.
17026
17027         (TypeContainer::FindMembers): Implement support for
17028         DeclaredOnly/noDeclaredOnly flag.
17029
17030         (Constructor::Emit) Return the ConstructorBuilder.
17031
17032         (Method::Emit) Return the MethodBuilder. 
17033         Check for abstract or virtual methods to be public.
17034
17035         * rootcontext.cs (RootContext::CreateType): Register all the
17036         abstract methods required for the class to be complete and the
17037         interface methods that must be implemented. 
17038
17039         * cs-parser.jay: Report error 501 (method requires body if it is
17040         not marked abstract or extern).
17041
17042         * expression.cs (TypeOf::Emit): Implement.
17043
17044         * typemanager.cs: runtime_handle_type, new global type.
17045
17046         * class.cs (Property::Emit): Generate code for properties.
17047
17048 2001-10-02  Ravi Pratap  <ravi@ximian.com>
17049
17050         * expression.cs (Unary::ResolveOperator): Find operators on base type
17051         too - we now conform exactly to the spec.
17052
17053         (Binary::ResolveOperator): Same here.
17054
17055         * class.cs (Operator::Define): Fix minor quirk in the tests.
17056
17057         * ../errors/cs0215.cs : Added.
17058
17059         * ../errors/cs0556.cs : Added.
17060
17061         * ../errors/cs0555.cs : Added.
17062
17063 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
17064
17065         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
17066         single integer which is really efficient
17067
17068 2001-10-01  Ravi Pratap  <ravi@ximian.com>
17069
17070         *  expression.cs (Expression::ImplicitUserConversion): Use location
17071         even in the case when we are examining True operators.
17072  
17073         * class.cs (Operator::Define): Perform extensive checks to conform
17074         with the rules for operator overloading in the spec.
17075
17076         * expression.cs (Expression::ImplicitReferenceConversion): Implement
17077         some of the other conversions mentioned in the spec.
17078
17079         * typemanager.cs (array_type): New static member for the System.Array built-in
17080         type.
17081
17082         (cloneable_interface): For System.ICloneable interface.
17083
17084         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
17085         we start resolving the tree and populating types.
17086
17087         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
17088  
17089 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
17090
17091         * expression.cs (Expression::ExprClassFromMemberInfo,
17092         Expression::Literalize): Create literal expressions from
17093         FieldInfos which are literals.
17094
17095         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
17096         type casts, because they were wrong.  The test suite in tests
17097         caught these ones.
17098
17099         (ImplicitNumericConversion): ushort to ulong requires a widening
17100         cast. 
17101
17102         Int32 constant to long requires widening cast as well.
17103
17104         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
17105         for integers because the type on the stack is not i4.
17106
17107 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
17108
17109         * expression.cs (report118): require location argument. 
17110
17111         * parameter.cs: Do not dereference potential null value.
17112
17113         * class.cs: Catch methods that lack the `new' keyword when
17114         overriding a name.  Report warnings when `new' is used without
17115         anything being there to override.
17116
17117         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
17118
17119         * class.cs: Only add constructor to hashtable if it is non-null
17120         (as now constructors can fail on define).
17121
17122         (TypeManager, Class, Struct): Take location arguments.
17123
17124         Catch field instance initialization in structs as errors.
17125
17126         accepting_filter: a new filter for FindMembers that is static so
17127         that we dont create an instance per invocation.
17128
17129         (Constructor::Define): Catch errors where a struct constructor is
17130         parameterless 
17131
17132         * cs-parser.jay: Pass location information for various new
17133         constructs. 
17134
17135         * delegate.cs (Delegate): take a location argument.
17136
17137         * driver.cs: Do not call EmitCode if there were problesm in the
17138         Definition of the types, as many Builders wont be there. 
17139
17140         * decl.cs (Decl::Decl): Require a location argument.
17141
17142         * cs-tokenizer.cs: Handle properly hex constants that can not fit
17143         into integers, and find the most appropiate integer for it.
17144
17145         * literal.cs: Implement ULongLiteral.
17146
17147         * rootcontext.cs: Provide better information about the location of
17148         failure when CreateType fails.
17149
17150 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
17151
17152         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
17153         as well.
17154
17155         * expression.cs (Binary::CheckShiftArguments): Add missing type
17156         computation.
17157         (Binary::ResolveOperator): Add type to the logical and and logical
17158         or, Bitwise And/Or and Exclusive Or code paths, it was missing
17159         before.
17160
17161         (Binary::DoNumericPromotions): In the case where either argument
17162         is ulong (and most signed types combined with ulong cause an
17163         error) perform implicit integer constant conversions as well.
17164
17165 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
17166
17167         * expression.cs (UserImplicitCast): Method should always be
17168         non-null. 
17169         (Invocation::BetterConversion): Simplified test for IntLiteral.
17170
17171         (Expression::ImplicitNumericConversion): Split this routine out.
17172         Put the code that performs implicit constant integer conversions
17173         here. 
17174
17175         (Expression::Resolve): Become a wrapper around DoResolve so we can
17176         check eclass and type being set after resolve.
17177
17178         (Invocation::Badness): Remove this dead function
17179
17180         (Binary::ResolveOperator): Do not compute the expensive argumnets
17181         unless we have a union for it.
17182
17183         (Probe::Emit): Is needs to do an isinst and then
17184         compare against null.
17185
17186         (::CanConvert): Added Location argument.  If the Location argument
17187         is null (Location.Null), then we do not report errors.  This is
17188         used by the `probe' mechanism of the Explicit conversion.  We do
17189         not want to generate an error for something that the user
17190         explicitly requested to be casted.  But the pipeline for an
17191         explicit cast first tests for potential implicit casts.
17192
17193         So for now, if the Location is null, it means `Probe only' to
17194         avoid adding another argument.   Might have to revise this
17195         strategy later.
17196
17197         (ClassCast): New class used to type cast objects into arbitrary
17198         classes (used in Explicit Reference Conversions).
17199
17200         Implement `as' as well.
17201
17202         Reverted all the patches from Ravi below: they were broken:
17203
17204                 * The use of `level' as a mechanism to stop recursive
17205                   invocations is wrong.  That was there just to catch the
17206                   bug with a strack trace but not as a way of addressing
17207                   the problem.
17208
17209                   To fix the problem we have to *understand* what is going
17210                   on and the interactions and come up with a plan, not
17211                   just get things going.
17212
17213                 * The use of the type conversion cache that I proposed
17214                   last night had an open topic: How does this work across
17215                   protection domains.  A user defined conversion might not
17216                   be public in the location where we are applying the
17217                   conversion, a different conversion might be selected
17218                   (ie, private A->B (better) but public B->A (worse),
17219                   inside A, A->B applies, but outside it, B->A will
17220                   apply).
17221
17222                 * On top of that (ie, even if the above is solved),
17223                   conversions in a cache need to be abstract.  Ie, `To
17224                   convert from an Int to a Short use an OpcodeCast', not
17225                   `To convert from an Int to a Short use the OpcodeCast on
17226                   the variable 5' (which is what this patch was doing).
17227
17228 2001-09-28  Ravi Pratap  <ravi@ximian.com>
17229
17230         * expression.cs (Invocation::ConversionExists): Re-write to use
17231         the conversion cache
17232
17233         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
17234         cache all conversions done, not just user-defined ones.
17235
17236         (Invocation::BetterConversion): The real culprit. Use ConversionExists
17237         to determine if a conversion exists instead of acutually trying to 
17238         perform the conversion. It's faster too.
17239
17240         (Expression::ConvertExplicit): Modify to use ConversionExists to check
17241         and only then attempt the implicit conversion.
17242
17243 2001-09-28  Ravi Pratap  <ravi@ximian.com>
17244
17245         * expression.cs (ConvertImplicit): Use a cache for conversions
17246         already found. Check level of recursion and bail out if necessary.
17247
17248 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
17249
17250         * typemanager.cs (string_concat_string_string, string_concat_object_object):
17251         Export standard methods that we expect for string operations.
17252
17253         * statement.cs (Block::UsageWarning): Track usage of variables and
17254         report the errors for not used variables.
17255
17256         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
17257         operator. 
17258
17259 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
17260
17261         * codegen.cs: remove unnneded code 
17262
17263         * expression.cs: Removed BuiltinTypeAccess class
17264
17265         Fix the order in which implicit conversions are
17266         done.  
17267
17268         The previous fixed dropped support for boxed conversions (adding a
17269         test to the test suite now)
17270
17271         (UserImplicitCast::CanConvert): Remove test for source being null,
17272         that code is broken.  We should not feed a null to begin with, if
17273         we do, then we should track the bug where the problem originates
17274         and not try to cover it up here.
17275
17276         Return a resolved expression of type UserImplicitCast on success
17277         rather than true/false.  Ravi: this is what I was talking about,
17278         the pattern is to use a static method as a "constructor" for
17279         objects. 
17280
17281         Also, do not create arguments until the very last minute,
17282         otherwise we always create the arguments even for lookups that
17283         will never be performed. 
17284
17285         (UserImplicitCast::Resolve): Eliminate, objects of type
17286         UserImplicitCast are born in a fully resolved state. 
17287
17288         * typemanager.cs (InitCoreTypes): Init also value_type
17289         (System.ValueType). 
17290
17291         * expression.cs (Cast::Resolve): First resolve the child expression.
17292
17293         (LValue): Add new method AddressOf to be used by
17294         the `&' operator.  
17295
17296         Change the argument of Store to take an EmitContext instead of an
17297         ILGenerator, because things like FieldExpr need to be able to call
17298         their children expression to generate the instance code. 
17299
17300         (Expression::Error, Expression::Warning): Sugar functions for
17301         reporting errors.
17302
17303         (Expression::MemberLookup): Accept a TypeContainer instead of a
17304         Report as the first argument.
17305
17306         (Expression::ResolvePrimary): Killed.  I still want to improve
17307         this as currently the code is just not right.
17308
17309         (Expression::ResolveMemberAccess): Simplify, but it is still
17310         wrong. 
17311
17312         (Unary::Resolve): Catch errors in AddressOf operators.
17313
17314         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
17315         index to a byte for the short-version, or the compiler will choose
17316         the wrong Emit call, which generates the wrong data.
17317
17318         (ParameterReference::Emit, ::Store): same.
17319
17320         (FieldExpr::AddressOf): Implement.
17321
17322         * typemanager.cs: TypeManager: made public variable instead of
17323         property.
17324
17325         * driver.cs: document --fatal.
17326
17327         * report.cs (ErrorMessage, WarningMessage): new names for the old
17328         Error and Warning classes.
17329
17330         * cs-parser.jay (member_access): Turn built-in access to types
17331         into a normal simplename
17332
17333 2001-09-27  Ravi Pratap  <ravi@ximian.com>
17334
17335         * expression.cs (Invocation::BetterConversion): Fix to cope
17336         with q being null, since this was introducing a bug.
17337
17338         * expression.cs (ConvertImplicit): Do built-in conversions first.
17339
17340 2001-09-27  Ravi Pratap  <ravi@ximian.com>
17341
17342         * expression.cs (UserImplicitCast::Resolve): Fix bug.
17343
17344 2001-09-27  Ravi Pratap  <ravi@ximian.com>
17345
17346         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
17347         I had introduced long ago (what's new ?).
17348
17349         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
17350         the work of all the checking. 
17351         (ConvertImplicit): Call CanConvert and only then create object if necessary.
17352         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
17353
17354         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
17355         that is the right way. 
17356
17357         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
17358         overloading resolution. Use everywhere instead of cutting and pasting code.
17359
17360         (Binary::ResolveOperator): Use MakeUnionSet.
17361
17362         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
17363         we have to convert to bool types. Not complete yet.
17364
17365 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
17366
17367         * typemanager.cs (TypeManager::CSharpName): support ushort.
17368
17369         * expression.cs (Expression::TryImplicitIntConversion): Attempts
17370         to provide an expression that performsn an implicit constant int
17371         conversion (section 6.1.6).
17372         (Expression::ConvertImplicitRequired): Reworked to include
17373         implicit constant expression conversions.
17374
17375         (Expression::ConvertNumericExplicit): Finished.
17376
17377         (Invocation::Emit): If InstanceExpression is null, then it means
17378         that we perform a call on this.
17379
17380 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
17381
17382         * expression.cs (Unary::Emit): Remove some dead code.
17383         (Probe): Implement Resolve and Emit for `is'.
17384         (Expression::ConvertImplicitRequired): Attempt to do constant
17385         expression conversions here.  Maybe should be moved to
17386         ConvertImplicit, but I am not sure.
17387         (Expression::ImplicitLongConstantConversionPossible,
17388         Expression::ImplicitIntConstantConversionPossible): New functions
17389         that tell whether is it possible to apply an implicit constant
17390         expression conversion.
17391
17392         (ConvertNumericExplicit): Started work on explicit numeric
17393         conversions.
17394
17395         * cs-parser.jay: Update operator constants.
17396
17397         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
17398         (Parameters::GetSignature): Hook up VerifyArgs here.
17399         (Parameters::VerifyArgs): Verifies that no two arguments have the
17400         same name. 
17401
17402         * class.cs (Operator): Update the operator names to reflect the
17403         ones that the spec expects (as we are just stringizing the
17404         operator names).
17405
17406         * expression.cs (Unary::ResolveOperator): Fix bug: Use
17407         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
17408         previous usage did only work for our methods.
17409         (Expression::ConvertImplicit): Handle decimal implicit numeric
17410         conversions as well.
17411         (Expression::InternalTypeConstructor): Used to invoke constructors
17412         on internal types for default promotions.
17413
17414         (Unary::Emit): Implement special handling for the pre/post
17415         increment/decrement for overloaded operators, as they need to have
17416         the same semantics as the other operators.
17417
17418         (Binary::ResolveOperator): ditto.
17419         (Invocation::ConversionExists): ditto.
17420         (UserImplicitCast::Resolve): ditto.
17421
17422 2001-09-26  Ravi Pratap  <ravi@ximian.com>
17423
17424         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
17425         operator, return after emitting body. Regression tests pass again !
17426
17427         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
17428         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
17429         (Invocation::OverloadResolve): Ditto.
17430         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
17431
17432         * everywhere : update calls to the above methods accordingly.
17433
17434 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
17435
17436         * assign.cs (Assign): Make it inherit from ExpressionStatement.
17437
17438         * expression.cs (ExpressionStatement): New base class used for
17439         expressions that can appear in statements, so that we can provide
17440         an alternate path to generate expression that do not leave a value
17441         on the stack.
17442
17443         (Expression::Emit, and all the derivatives): We no longer return
17444         whether a value is left on the stack or not.  Every expression
17445         after being emitted leaves a single value on the stack.
17446
17447         * codegen.cs (EmitContext::EmitStatementExpression): Use the
17448         facilties of ExpressionStatement if possible.
17449
17450         * cs-parser.jay: Update statement_expression.
17451
17452 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
17453
17454         * driver.cs: Change the wording of message
17455
17456 2001-09-25  Ravi Pratap  <ravi@ximian.com>
17457
17458         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
17459         the type of the expression to the return type of the method if
17460         we have an overloaded operator match ! The regression tests pass again !
17461         (Unary::ResolveOperator): Ditto.
17462
17463         * expression.cs (Invocation::ConversionExists): Correct the member lookup
17464         to find "op_Implicit", not "implicit" ;-)
17465         (UserImplicitCast): New class to take care of user-defined implicit conversions.
17466         (ConvertImplicit, ForceConversion): Take TypeContainer argument
17467
17468         * everywhere : Correct calls to the above accordingly.
17469
17470         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
17471         (ConvertImplicit): Do user-defined conversion if it exists.
17472
17473 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
17474
17475         * assign.cs: track location.
17476         (Resolve): Use implicit conversions on assignment.
17477
17478         * literal.cs: Oops.  Not good, Emit of short access values should
17479         pass (Bytes) or the wrong argument will be selected.
17480
17481         * expression.cs (Unary::Emit): Emit code for -expr.
17482
17483         (Unary::ResolveOperator): Handle `Substract' for non-constants
17484         (substract from zero from the non-constants).
17485         Deal with Doubles as well. 
17486
17487         (Expression::ConvertImplicitRequired): New routine that reports an
17488         error if no implicit conversion exists. 
17489
17490         (Invocation::OverloadResolve): Store the converted implicit
17491         expressions if we make them
17492
17493 2001-09-24  Ravi Pratap  <ravi@ximian.com>
17494
17495         * class.cs (ConstructorInitializer): Take a Location argument.
17496         (ConstructorBaseInitializer): Same here.
17497         (ConstructorThisInitializer): Same here.
17498
17499         * cs-parser.jay : Update all calls accordingly.
17500
17501         * expression.cs (Unary, Binary, New): Take location argument.
17502         Update accordingly everywhere.
17503
17504         * cs-parser.jay : Update all calls to the above to take a location
17505         argument.
17506
17507         * class.cs : Ditto.
17508
17509 2001-09-24  Ravi Pratap  <ravi@ximian.com>
17510
17511         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
17512         (Invocation::BetterConversion): Same here
17513         (Invocation::ConversionExists): Ditto.
17514
17515         (Invocation::ConversionExists): Implement.
17516
17517 2001-09-22  Ravi Pratap  <ravi@ximian.com>
17518
17519         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
17520         Also take an additional TypeContainer argument.
17521
17522         * All over : Pass in TypeContainer as argument to OverloadResolve.
17523
17524         * typemanager.cs (CSharpName): Update to check for the string type and return
17525         that too.
17526
17527         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
17528         a given method.
17529
17530 2001-09-21  Ravi Pratap  <ravi@ximian.com>
17531
17532         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
17533         (Invocation::BetterFunction): Implement.
17534         (Invocation::BetterConversion): Implement.
17535         (Invocation::ConversionExists): Skeleton, no implementation yet.
17536
17537         Okay, things work fine !
17538
17539 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
17540
17541         * typemanager.cs: declare and load enum_type, delegate_type and
17542         void_type. 
17543
17544         * expression.cs (Expression::Emit): Now emit returns a value that
17545         tells whether a value is left on the stack or not.  This strategy
17546         might be reveted tomorrow with a mechanism that would address
17547         multiple assignments.
17548         (Expression::report118): Utility routine to report mismatches on
17549         the ExprClass.
17550
17551         (Unary::Report23): Report impossible type/operator combination
17552         utility function.
17553
17554         (Unary::IsIncrementableNumber): Whether the type can be
17555         incremented or decremented with add.
17556         (Unary::ResolveOperator): Also allow enumerations to be bitwise
17557         complemented. 
17558         (Unary::ResolveOperator): Implement ++, !, ~,
17559
17560         (Invocation::Emit): Deal with new Emit convetion.
17561
17562         * All Expression derivatives: Updated their Emit method to return
17563         whether they leave values on the stack or not.
17564
17565         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
17566         stack for expressions that are statements. 
17567
17568 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
17569
17570         * expression.cs (LValue): New interface.  Must be implemented by
17571         LValue objects.
17572         (LocalVariableReference, ParameterReference, FieldExpr): Implement
17573         LValue interface.
17574
17575         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
17576         interface for generating code, simplifies the code.
17577
17578 2001-09-20  Ravi Pratap  <ravi@ximian.com>
17579
17580         * expression.cs (everywhere): Comment out return statements in ::Resolve
17581         methods to avoid the warnings.
17582
17583 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
17584
17585         * driver.cs (parse): Report error 2001 if we can not open the
17586         source file.
17587
17588         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
17589         not resolve it.
17590
17591         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
17592         object. 
17593
17594         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
17595         otherwise nested blocks end up with the same index.
17596
17597         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
17598
17599         * expression.cs:  Instead of having FIXMEs in the Resolve
17600         functions, throw exceptions so it is obvious that we are facing a
17601         bug. 
17602
17603         * cs-parser.jay (invocation_expression): Pass Location information.
17604
17605         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
17606         Use a basename for those routines because .NET does not like paths
17607         on them. 
17608
17609         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
17610         already defined.
17611
17612 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
17613
17614         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
17615         are loading the correct data types (throws an exception if not).
17616         (TypeManager::InitCoreTypes): Use CoreLookupType
17617
17618         * expression.cs (Unary::ResolveOperator): return the child
17619         expression for expressions which are just +expr.
17620         (Unary::ResolveOperator): Return negative literals for -LITERAL
17621         expressions (otherwise they are Unary {Literal}).
17622         (Invocation::Badness): Take into account `Implicit constant
17623         expression conversions'.
17624
17625         * literal.cs (LongLiteral): Implement long literal class.
17626         (IntLiteral): export the `Value' of the intliteral. 
17627
17628 2001-09-19  Ravi Pratap  <ravi@ximian.com>
17629
17630         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
17631
17632         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
17633         instead of 'Operator'
17634
17635         * expression.cs (Binary::ResolveOperator): Update accordingly.
17636         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
17637         and 'Minus'
17638
17639         * cs-parser.jay (unary_expression): Update to use the new names.
17640
17641         * gen-treedump.cs (GetUnary): Same here.
17642
17643         * expression.cs (Unary::Resolve): Implement.
17644         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
17645         operators are found instead of making noise ;-)
17646         (Unary::ResolveOperator): New method to do precisely the same thing which
17647         Binary::ResolveOperator does for Binary expressions.
17648         (Unary.method, .Arguments): Add.
17649         (Unary::OperName): Implement.   
17650         (Unary::ForceConversion): Copy and Paste !
17651
17652         * class.cs (Operator::Define): Fix a small bug for the case when we have 
17653         a unary operator.
17654
17655         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
17656         for the inbuilt operators. Only overloading works for now ;-)
17657
17658 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
17659
17660         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
17661         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
17662
17663         * expression.cs (This::Emit): Implement. 
17664         (This::Resolve): Implement.
17665         (TypeOf:Resolve): Implement.
17666         (Expression::ResolveSimpleName): Add an implicit this to instance
17667         field references. 
17668         (MemberAccess::Resolve): Deal with Parameters and Fields. 
17669         Bind instance variable to Field expressions.
17670         (FieldExpr::Instance): New field used to track the expression that
17671         represents the object instance.
17672         (FieldExpr::Resolve): Track potential errors from MemberLookup not
17673         binding 
17674         (FieldExpr::Emit): Implement.
17675
17676         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
17677         the last instruction contains a return opcode to avoid generating
17678         the last `ret' instruction (this generates correct code, and it is
17679         nice to pass the peverify output).
17680
17681         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
17682         initializer for static and instance variables.
17683         (Constructor::Emit): Allow initializer to be null in the case of
17684         static constructors.  Only emit initializer for instance
17685         constructors. 
17686
17687         (TypeContainer::FindMembers): Return a null array if there are no
17688         matches.
17689
17690         Also fix the code for the MemberTypes.Method branch, as it was not
17691         scanning that for operators (or tried to access null variables before).
17692
17693         * assign.cs (Assign::Emit): Handle instance and static fields. 
17694
17695         * TODO: Updated.
17696
17697         * driver.cs: Stop compilation if there are parse errors.
17698
17699         * cs-parser.jay (constructor_declaration): Provide default base
17700         initializer for non-static constructors.
17701         (constructor_declarator): Do not provide a default base
17702         initializers if none was specified.
17703         Catch the fact that constructors should not have parameters.
17704
17705         * class.cs: Do not emit parent class initializers for static
17706         constructors, that should be flagged as an error.
17707
17708 2001-09-18  Ravi Pratap  <ravi@ximian.com>
17709
17710         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
17711         Move back code into TypeContainer::Populate.
17712
17713 2001-09-18  Ravi Pratap  <ravi@ximian.com>
17714
17715         * class.cs (TypeContainer::AddConstructor): Fix the check to
17716         compare against Name, not Basename. 
17717         (Operator::OpType): Change Plus and Minus to Add and Subtract.
17718
17719         * cs-parser.jay : Update accordingly.
17720
17721         * class.cs (TypeContainer::FindMembers): For the case where we are searching
17722         for methods, don't forget to look into the operators too.
17723         (RegisterMethodBuilder): Helper method to take care of this for
17724         methods, constructors and operators.
17725         (Operator::Define): Completely revamp.
17726         (Operator.OperatorMethod, MethodName): New fields.
17727         (TypeContainer::Populate): Move the registering of builders into
17728         RegisterMethodBuilder.
17729         (Operator::Emit): Re-write.
17730
17731         * expression.cs (Binary::Emit): Comment out code path to emit method
17732         invocation stuff for the case when we have a user defined operator. I am
17733         just not able to get it right !
17734
17735 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
17736
17737         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
17738         argument. 
17739
17740         (Expression::MemberLookup): Provide a version that allows to
17741         specify the MemberTypes and BindingFlags. 
17742
17743         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
17744         so it was not fetching variable information from outer blocks.
17745
17746         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
17747         Beforefieldinit as it was buggy.
17748
17749         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
17750         that Ravi put here.  
17751
17752         * class.cs (Constructor::Emit): Only emit if block is not null.
17753         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
17754         deal with this by semantically definining it as if the user had
17755         done it.
17756
17757         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
17758         constructors as we now "emit" them at a higher level.
17759
17760         (TypeContainer::DefineDefaultConstructor): Used to define the
17761         default constructors if none was provided.
17762
17763         (ConstructorInitializer): Add methods Resolve and Emit. 
17764
17765         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
17766
17767 2001-09-17  Ravi Pratap  <ravi@ximian.com>
17768
17769         * class.cs (TypeContainer::EmitDefaultConstructor): Register
17770         the default constructor builder with our hashtable for methodbuilders
17771         to methodcores.
17772
17773         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
17774         and argument_count is 0 in which case we have a match.
17775         (Binary::ResolveOperator): More null checking and miscellaneous coding
17776         style cleanup.
17777
17778 2001-09-17  Ravi Pratap  <ravi@ximian.com>
17779
17780         * rootcontext.cs (IsNameSpace): Compare against null.
17781
17782         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
17783
17784         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
17785         and Unary::Operator.
17786
17787         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
17788         accordingly.
17789
17790         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
17791         we have overloaded operators.
17792         (Binary::ResolveOperator): Implement the part which does the operator overload
17793         resolution.
17794
17795         * class.cs (Operator::Emit): Implement.
17796         (TypeContainer::Emit): Emit the operators we have too.
17797
17798         * expression.cs (Binary::Emit): Update to emit the appropriate code for
17799         the case when we have a user-defined operator.
17800
17801 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
17802
17803         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
17804
17805 2001-09-16  Ravi Pratap  <ravi@ximian.com>
17806
17807         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
17808         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
17809         (Constructor::Emit): Implement.
17810         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
17811         if we have no work to do. 
17812         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
17813         Emit method.
17814
17815         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
17816         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
17817
17818         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
17819         of parent.parent.
17820
17821 2001-09-15  Ravi Pratap  <ravi@ximian.com>
17822
17823         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
17824         in the source.
17825         (Tree::RecordNamespace): Method to do what the name says ;-)
17826         (Tree::Namespaces): Property to get at the namespaces hashtable.
17827
17828         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
17829         keep track.
17830
17831         * rootcontext.cs (IsNamespace): Fixed it :-)
17832
17833 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
17834
17835         * class.cs (TypeContainer::FindMembers): Add support for
17836         constructors. 
17837         (MethodCore): New class that encapsulates both the shared aspects
17838         of a Constructor and a Method.  
17839         (Method, Constructor): Factored pieces into MethodCore.
17840
17841         * driver.cs: Added --fatal which makes errors throw exceptions.
17842         Load System assembly as well as part of the standard library.
17843
17844         * report.cs: Allow throwing exceptions on errors for debugging.
17845
17846         * modifiers.cs: Do not use `parent', instead use the real type
17847         container to evaluate permission settings.
17848
17849         * class.cs: Put Ravi's patch back in.  He is right, and we will
17850         have to cope with the
17851
17852 2001-09-14  Ravi Pratap  <ravi@ximian.com>
17853
17854         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
17855         FamORAssem, not FamANDAssem.
17856
17857 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
17858
17859         * driver.cs: Added --parse option that only parses its input files
17860         and terminates.
17861
17862         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
17863         incorrect.  IsTopLevel is not used to tell whether an object is
17864         root_types or not (that can be achieved by testing this ==
17865         root_types).  But to see if this is a top-level *class* (not
17866         necessarly our "toplevel" container). 
17867
17868 2001-09-14  Ravi Pratap  <ravi@ximian.com>
17869
17870         * enum.cs (Enum::Define): Modify to call the Lookup method on the
17871         parent instead of a direct call to GetType.
17872
17873 2001-09-14  Ravi Pratap  <ravi@ximian.com>
17874
17875         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
17876         Modifiers.TypeAttr. This should just be a call to that method.
17877
17878         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
17879         object so that we can determine if we are top-level or not.
17880
17881         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
17882         TypeContainer too.
17883
17884         * enum.cs (Enum::Define): Ditto.
17885
17886         * modifiers.cs (FieldAttr): Re-write.
17887
17888         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
17889         (TypeContainer::HaveStaticConstructor): New property to provide access
17890         to precisely that info.
17891
17892         * modifiers.cs (MethodAttr): Re-write.
17893         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
17894
17895         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
17896         of top-level types as claimed.
17897
17898 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
17899
17900         * expression.cs (MemberLookup): Fruitless attempt to lookup
17901         constructors.  Maybe I need to emit default constructors?  That
17902         might be it (currently .NET emits this for me automatically).
17903         (Invocation::OverloadResolve): Cope with Arguments == null.
17904         (Invocation::EmitArguments): new function, shared by the new
17905         constructor and us.
17906         (Invocation::Emit): Handle static and instance methods.  Emit
17907         proper call instruction for virtual or non-virtual invocations.
17908         (New::Emit): Implement.
17909         (New::Resolve): Implement.
17910         (MemberAccess:Resolve): Implement.
17911         (MethodGroupExpr::InstanceExpression): used conforming to the spec
17912         to track instances.
17913         (FieldExpr::Resolve): Set type.
17914
17915         * support.cs: Handle empty arguments.
17916                 
17917         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
17918         SimpleLookup): Auxiliary routines to help parse a qualifier
17919         identifier.  
17920
17921         Update qualifier_identifier rule.
17922
17923         * codegen.cs: Removed debugging messages.
17924
17925         * class.cs: Make this a global thing, this acts just as a "key" to
17926         objects that we might have around.
17927
17928         (Populate): Only initialize method_builders_to_methods once.
17929
17930         * expression.cs (PropertyExpr): Initialize type from the
17931         PropertyType. 
17932
17933         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
17934         Resolve pattern.  Attempt to implicitly convert value to boolean.
17935         Emit code.
17936
17937         * expression.cs: Set the type for the int32/int32 argument case.
17938         (Binary::ResolveOperator): Set the return type to boolean for
17939         comparission operators
17940
17941         * typemanager.cs: Remove debugging print code.
17942
17943         (Invocation::Resolve): resolve type.
17944
17945         * class.cs: Allocate a MemberInfo of the correct size, as the code
17946         elsewhere depends on the test to reflect the correct contents.
17947
17948         (Method::) Keep track of parameters, due to System.Reflection holes
17949
17950         (TypeContainer::Populate): Keep track of MethodBuilders to Method
17951         mapping here.
17952
17953         (TypeContainer::FindMembers): Use ArrayList and then copy an array
17954         of the exact size and return that.
17955
17956         (Class::LookupMethodByBuilder): New function that maps
17957         MethodBuilders to its methods.  Required to locate the information
17958         on methods because System.Reflection bit us again.
17959
17960         * support.cs: New file, contains an interface ParameterData and
17961         two implementations: ReflectionParameters and InternalParameters
17962         used to access Parameter information.  We will need to grow this
17963         as required.
17964
17965         * expression.cs (Invocation::GetParameterData): implement a cache
17966         and a wrapper around the ParameterData creation for methods. 
17967         (Invocation::OverloadResolve): Use new code.
17968
17969 2001-09-13  Ravi Pratap  <ravi@ximian.com>
17970
17971         * class.cs (TypeContainer::EmitField): Remove and move into 
17972         (Field::Define): here and modify accordingly.
17973         (Field.FieldBuilder): New member.
17974         (TypeContainer::Populate): Update accordingly.
17975         (TypeContainer::FindMembers): Implement.
17976
17977 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
17978
17979         * statement.cs: (VariableInfo::VariableType): New field to be
17980         initialized with the full type once it is resolved. 
17981
17982 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
17983
17984         * parameter.cs (GetParameterInfo): Use a type cache to compute
17985         things only once, and to reuse this information
17986
17987         * expression.cs (LocalVariableReference::Emit): Implement.
17988         (OpcodeCast::Emit): fix.
17989
17990         (ParameterReference::Resolve): Implement.
17991         (ParameterReference::Emit): Implement.
17992
17993         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
17994         that are expressions need to stay as Expressions.
17995
17996         * typemanager.cs (CSharpName): Returns the C# name of a type if
17997         possible. 
17998
17999         * expression.cs (Expression::ConvertImplicit): New function that
18000         implements implicit type conversions.
18001
18002         (Expression::ImplicitReferenceConversion): Implements implicit
18003         reference conversions.
18004
18005         (EmptyCast): New type for transparent casts.
18006
18007         (OpcodeCast): New type for casts of types that are performed with
18008         a sequence of bytecodes.
18009
18010         (BoxedCast): New type used for casting value types into reference
18011         types.  Emits a box opcode.
18012
18013         (Binary::DoNumericPromotions): Implements numeric promotions of
18014         and computation of the Binary::Type.
18015
18016         (Binary::EmitBranchable): Optimization.
18017
18018         (Binary::Emit): Implement code emission for expressions.
18019
18020         * typemanager.cs (TypeManager): Added two new core types: sbyte
18021         and byte.
18022
18023 2001-09-12  Ravi Pratap  <ravi@ximian.com>
18024
18025         * class.cs (TypeContainer::FindMembers): Method which does exactly
18026         what Type.FindMembers does, only we don't have to use reflection. No
18027         implementation yet.
18028
18029         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
18030         typecontainer objects as we need to get at them.
18031         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
18032
18033         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
18034         typecontainer object.
18035
18036         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
18037         of just a Report object.
18038
18039 2001-09-11  Ravi Pratap  <ravi@ximian.com>
18040
18041         * class.cs (Event::Define): Go back to using the prefixes "add_" and
18042         "remove_"
18043         (TypeContainer::Populate): Now define the delegates of the type too.
18044         (TypeContainer.Delegates): Property to access the list of delegates defined
18045         in the type.
18046
18047         * delegates.cs (Delegate::Define): Implement partially.
18048
18049         * modifiers.cs (TypeAttr): Handle more flags.
18050
18051 2001-09-11  Ravi Pratap  <ravi@ximian.com>
18052
18053         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
18054         and not <=
18055         (Operator::Define): Re-write logic to get types by using the LookupType method
18056         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
18057         (Indexer::Define): Ditto.
18058         (Event::Define): Ditto.
18059         (Property::Define): Ditto.
18060
18061 2001-09-10  Ravi Pratap  <ravi@ximian.com>
18062
18063         * class.cs (TypeContainer::Populate): Now define operators too. 
18064         (TypeContainer.Operators): New property to access the list of operators
18065         in a type.
18066         (Operator.OperatorMethodBuilder): New member to hold the method builder
18067         for the operator we are defining.
18068         (Operator::Define): Implement.
18069
18070 2001-09-10  Ravi Pratap  <ravi@ximian.com>
18071
18072         * class.cs (Event::Define): Make the prefixes of the accessor methods
18073         addOn_ and removeOn_ 
18074
18075         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
18076         of the location being passed in too. Ideally, this should go later since all
18077         error reporting should be done through the Report object.
18078
18079         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
18080         (Populate): Iterate thru the indexers we have and define them too.
18081         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
18082         for the get and set accessors.
18083         (Indexer::Define): Implement.
18084
18085 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
18086
18087         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
18088         my previous implementation, did not work.
18089
18090         * typemanager.cs: Add a couple of missing types (the longs).
18091
18092         * literal.cs: Use TypeManager.bool_type instead of getting it.
18093
18094         * expression.cs (EventExpr): New kind of expressions.
18095         (Expressio::ExprClassFromMemberInfo): finish
18096
18097 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
18098
18099         * assign.cs: Emit stores to static fields differently.
18100
18101 2001-09-08  Ravi Pratap  <ravi@ximian.com>
18102
18103         * Merge in changes and adjust code to tackle conflicts. Backed out my
18104         code in Assign::Resolve ;-) 
18105
18106 2001-09-08  Ravi Pratap  <ravi@ximian.com>
18107
18108         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
18109         instead Report.Error and also pass in the location.
18110         (CSharpParser::Lexer): New readonly property to return the reference
18111         to the Tokenizer object.
18112         (declare_local_variables): Use Report.Error with location instead of plain 
18113         old error.
18114         (CheckDef): Ditto.
18115
18116         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
18117         (Operator.CheckBinaryOperator): Ditto.
18118
18119         * cs-parser.jay (operator_declarator): Update accordingly.
18120
18121         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
18122         (CheckBinaryOperator): Same here.
18123
18124         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
18125         on the name without any prefixes of namespace names etc. This is because we
18126         already might have something already fully qualified like 
18127         'System.Console.WriteLine'
18128
18129         * assign.cs (Resolve): Begin implementation. Stuck ;-)
18130
18131 2001-09-07  Ravi Pratap  <ravi@ximian.com>
18132
18133         * cs-tokenizer.cs (location): Return a string which also contains
18134         the file name.
18135
18136         * expression.cs (ElementAccess): New class for expressions of the
18137         type 'element access.'
18138         (BaseAccess): New class for expressions of the type 'base access.'
18139         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
18140         respectively.
18141
18142         * cs-parser.jay (element_access): Implement action.
18143         (base_access): Implement actions.
18144         (checked_expression, unchecked_expression): Implement.
18145
18146         * cs-parser.jay (local_variable_type): Correct and implement.
18147         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
18148
18149         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
18150
18151         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
18152         name and the specifiers.
18153
18154         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
18155
18156         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
18157         making them all public ;-)
18158
18159         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
18160         class anyways.
18161
18162 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
18163
18164         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
18165         PropertyExprs.
18166         (FieldExpr, PropertyExprs): New resolved expressions.
18167         (SimpleName::MemberStaticCheck): Perform static checks for access
18168         to non-static fields on static methods. Maybe this should be
18169         generalized for MemberAccesses. 
18170         (SimpleName::ResolveSimpleName): More work on simple name
18171         resolution. 
18172
18173         * cs-parser.jay (primary_expression/qualified_identifier): track
18174         the parameter index.
18175
18176         * codegen.cs (CodeGen::Save): Catch save exception, report error.
18177         (EmitContext::EmitBoolExpression): Chain to expression generation
18178         instead of temporary hack.
18179         (::EmitStatementExpression): Put generic expression code generation.
18180
18181         * assign.cs (Assign::Emit): Implement variable assignments to
18182         local variables, parameters and fields.
18183
18184 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
18185
18186         * statement.cs (Block::GetVariableInfo): New method, returns the
18187         VariableInfo for a variable name in a block.
18188         (Block::GetVariableType): Implement in terms of GetVariableInfo
18189
18190         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
18191         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
18192
18193 2001-09-06  Ravi Pratap  <ravi@ximian.com>
18194
18195         * cs-parser.jay (operator_declaration): Continue on my quest : update
18196         to take attributes argument.
18197         (event_declaration): Ditto.
18198         (enum_declaration): Ditto.
18199         (indexer_declaration): Ditto.
18200
18201         * class.cs (Operator::Operator): Update constructor accordingly.
18202         (Event::Event): Ditto.
18203
18204         * delegate.cs (Delegate::Delegate): Same here.
18205
18206         * enum.cs (Enum::Enum): Same here.
18207
18208 2001-09-05  Ravi Pratap  <ravi@ximian.com>
18209
18210         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
18211
18212         * ../tests/cs0658.cs : New file to demonstrate error 0658.
18213
18214         * attribute.cs (Attributes): New class to encapsulate all attributes which were
18215         being passed around as an arraylist.
18216         (Attributes::AddAttribute): Method to add attribute sections.
18217
18218         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
18219         (struct_declaration): Update accordingly.
18220         (constant_declaration): Update.
18221         (field_declaration): Update.
18222         (method_header): Update.
18223         (fixed_parameter): Update.
18224         (parameter_array): Ditto.
18225         (property_declaration): Ditto.
18226         (destructor_declaration): Ditto.
18227
18228         * class.cs (Struct::Struct): Update constructors accordingly.
18229         (Class::Class): Ditto.
18230         (Field::Field): Ditto.
18231         (Method::Method): Ditto.
18232         (Property::Property): Ditto.
18233         (TypeContainer::OptAttribute): update property's return type.
18234
18235         * interface.cs (Interface.opt_attributes): New member.
18236         (Interface::Interface): Update to take the extra Attributes argument.
18237
18238         * parameter.cs (Parameter::Parameter): Ditto.
18239
18240         * constant.cs (Constant::Constant): Ditto.
18241
18242         * interface.cs (InterfaceMemberBase): New OptAttributes field.
18243         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
18244         the attributes as a parameter.
18245         (InterfaceProperty): Update constructor call.
18246         (InterfaceEvent): Ditto.
18247         (InterfaceMethod): Ditto.
18248         (InterfaceIndexer): Ditto.
18249
18250         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
18251         pass the attributes too.
18252         (interface_event_declaration): Ditto.
18253         (interface_property_declaration): Ditto.
18254         (interface_method_declaration): Ditto.
18255         (interface_declaration): Ditto.
18256
18257 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
18258
18259         * class.cs (Method::Define): Track the "static Main" definition to
18260         create an entry point. 
18261
18262         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
18263         EntryPoint if we find it. 
18264
18265         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
18266         (EmitContext::ig): Make this variable public.
18267
18268         * driver.cs: Make the default output file be the first file name
18269         with the .exe extension.  
18270
18271         Detect empty compilations
18272
18273         Handle various kinds of output targets.  Handle --target and
18274         rename -t to --dumper.
18275
18276         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
18277         methods inherited from Expression return now an Expression.  This
18278         will is used during the tree rewriting as we resolve them during
18279         semantic analysis.
18280
18281         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
18282         the spec.  Missing entirely is the information about
18283         accessability of elements of it.
18284
18285         (Expression::ExprClassFromMemberInfo): New constructor for
18286         Expressions that creates a fully initialized Expression based on
18287         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
18288         a Type.
18289
18290         (Invocation::Resolve): Begin implementing resolution of invocations.
18291
18292         * literal.cs (StringLiteral):  Implement Emit.
18293
18294 2001-09-05  Ravi Pratap  <ravi@ximian.com>
18295
18296         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
18297         member.
18298
18299 2001-09-04  Ravi Pratap  <ravi@ximian.com>
18300
18301         * cs-parser.jay (attribute_arguments): Implement actions.
18302         (attribute): Fix bug in production. Implement action.
18303         (attribute_list): Implement.
18304         (attribute_target): Implement.
18305         (attribute_target_specifier, opt_target_specifier): Implement
18306         (CheckAttributeTarget): New method to check if the attribute target
18307         is valid.
18308         (attribute_section): Implement.
18309         (opt_attributes): Implement.
18310
18311         * attribute.cs : New file to handle attributes.
18312         (Attribute): Class to hold attribute info.
18313
18314         * cs-parser.jay (opt_attribute_target_specifier): Remove production
18315         (attribute_section): Modify production to use 2 different rules to 
18316         achieve the same thing. 1 s/r conflict down !
18317         Clean out commented, useless, non-reducing dimension_separator rules.
18318
18319         * class.cs (TypeContainer.attributes): New member to hold list
18320         of attributes for a type.
18321         (Struct::Struct): Modify to take one more argument, the attribute list.
18322         (Class::Class): Ditto.
18323         (Field::Field): Ditto.
18324         (Method::Method): Ditto.
18325         (Property::Property): Ditto.
18326
18327         * cs-parser.jay (struct_declaration): Update constructor call to
18328         pass in the attributes too.
18329         (class_declaration): Ditto.
18330         (constant_declaration): Ditto.
18331         (field_declaration): Ditto.
18332         (method_header): Ditto.
18333         (fixed_parameter): Ditto.
18334         (parameter_array): Ditto.
18335         (property_declaration): Ditto.
18336
18337         * constant.cs (Constant::Constant): Update constructor similarly.
18338         Use System.Collections.
18339
18340         * parameter.cs (Parameter::Parameter): Update as above.
18341
18342 2001-09-02  Ravi Pratap  <ravi@ximian.com>
18343
18344         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
18345         (TypeContainer.delegates): New member to hold list of delegates.
18346
18347         * cs-parser.jay (delegate_declaration): Implement the action correctly 
18348         this time as I seem to be on crack ;-)
18349
18350 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
18351
18352         * rootcontext.cs (RootContext::IsNamespace): new function, used to
18353         tell whether an identifier represents a namespace.
18354
18355         * expression.cs (NamespaceExpr): A namespace expression, used only
18356         temporarly during expression resolution.
18357         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
18358         utility functions to resolve names on expressions.
18359
18360 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
18361
18362         * codegen.cs: Add hook for StatementExpressions. 
18363
18364         * class.cs: Fix inverted test for static flag in methods.
18365
18366 2001-09-02  Ravi Pratap  <ravi@ximian.com>
18367
18368         * class.cs (Operator::CheckUnaryOperator): Correct error number used
18369         to make it coincide with MS' number.
18370         (Operator::CheckBinaryOperator): Ditto.
18371
18372         * ../errors/errors.txt : Remove error numbers added earlier.
18373
18374         * ../errors/cs1019.cs : Test case for error # 1019
18375
18376         * ../errros/cs1020.cs : Test case for error # 1020
18377
18378         * cs-parser.jay : Clean out commented cruft.
18379         (dimension_separators, dimension_separator): Comment out. Ostensibly not
18380         used anywhere - non-reducing rule.
18381         (namespace_declarations): Non-reducing rule - comment out.
18382
18383         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
18384         with TypeContainer::AddEnum.
18385
18386         * delegate.cs : New file for delegate handling classes.
18387         (Delegate): Class for declaring delegates.
18388
18389         * makefile : Update.
18390
18391         * cs-parser.jay (delegate_declaration): Implement.
18392
18393 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
18394
18395         * class.cs (Event::Define): Implement.
18396         (Event.EventBuilder): New member.
18397
18398         * class.cs (TypeContainer::Populate): Update to define all enums and events
18399         we have.
18400         (Events): New property for the events arraylist we hold. Shouldn't we move to using
18401         readonly fields for all these cases ?
18402
18403 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
18404
18405         * class.cs (Property): Revamp to use the convention of making fields readonly.
18406         Accordingly modify code elsewhere.
18407
18408         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
18409         the Define method of the Property class.
18410
18411         * class.cs : Clean up applied patch and update references to variables etc. Fix 
18412         trivial bug.
18413         (TypeContainer::Populate): Update to define all the properties we have. Also
18414         define all enumerations.
18415
18416         * enum.cs (Define): Implement.
18417
18418 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
18419
18420         * cs-parser.jay (overloadable_operator): The semantic value is an
18421         enum of the Operator class.
18422         (operator_declarator): Implement actions.
18423         (operator_declaration): Implement.
18424
18425         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
18426         validity of definitions.
18427         (Operator::CheckBinaryOperator): Static method to check for binary operators
18428         (TypeContainer::AddOperator): New method to add an operator to a type.
18429
18430         * cs-parser.jay (indexer_declaration): Added line to actually call the
18431         AddIndexer method so it gets added ;-)
18432
18433         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
18434         already taken care of by the MS compiler ?  
18435
18436 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
18437
18438         * class.cs (Operator): New class for operator declarations.
18439         (Operator::OpType): Enum for the various operators.
18440
18441 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
18442
18443         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
18444         ostensibly handle this in semantic analysis.
18445
18446         * cs-parser.jay (general_catch_clause): Comment out
18447         (specific_catch_clauses, specific_catch_clause): Ditto.
18448         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
18449         (catch_args, opt_catch_args): New productions.
18450         (catch_clause): Rewrite to use the new productions above
18451         (catch_clauses): Modify accordingly.
18452         (opt_catch_clauses): New production to use in try_statement
18453         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
18454         and re-write the code in the actions to extract the specific and
18455         general catch clauses by being a little smart ;-)
18456
18457         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
18458         Hooray, try and catch statements parse fine !
18459
18460 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
18461
18462         * statement.cs (Block::GetVariableType): Fix logic to extract the type
18463         string from the hashtable of variables.
18464
18465         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
18466         I end up making that mistake ;-)
18467         (catch_clauses): Fixed gross error which made Key and Value of the 
18468         DictionaryEntry the same : $1 !!
18469
18470 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
18471
18472         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
18473
18474         * cs-parser.jay (event_declaration): Correct to remove the semicolon
18475         when the add and remove accessors are specified. 
18476
18477 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
18478
18479         * cs-parser.jay (IndexerDeclaration): New helper class to hold
18480         information about indexer_declarator.
18481         (indexer_declarator): Implement actions.
18482         (parsing_indexer): New local boolean used to keep track of whether
18483         we are parsing indexers or properties. This is necessary because 
18484         implicit_parameters come into picture even for the get accessor in the 
18485         case of an indexer.
18486         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
18487
18488         * class.cs (Indexer): New class for indexer declarations.
18489         (TypeContainer::AddIndexer): New method to add an indexer to a type.
18490         (TypeContainer::indexers): New member to hold list of indexers for the
18491         type.
18492
18493 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
18494
18495         * cs-parser.jay (add_accessor_declaration): Implement action.
18496         (remove_accessor_declaration): Implement action.
18497         (event_accessors_declaration): Implement
18498         (variable_declarators): swap statements for first rule - trivial.
18499
18500         * class.cs (Event): New class to hold information about event
18501         declarations.
18502         (TypeContainer::AddEvent): New method to add an event to a type
18503         (TypeContainer::events): New member to hold list of events.
18504
18505         * cs-parser.jay (event_declaration): Implement actions.
18506
18507 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
18508
18509         * cs-parser.jay (dim_separators): Implement. Make it a string
18510         concatenating all the commas together, just as they appear.
18511         (opt_dim_separators): Modify accordingly
18512         (rank_specifiers): Update accordingly. Basically do the same
18513         thing - instead, collect the brackets here.
18514         (opt_rank_sepcifiers): Modify accordingly.
18515         (array_type): Modify to actually return the complete type string
18516         instead of ignoring the rank_specifiers.
18517         (expression_list): Implement to collect the expressions
18518         (variable_initializer): Implement. We make it a list of expressions
18519         essentially so that we can handle the array_initializer case neatly too.
18520         (variable_initializer_list): Implement.
18521         (array_initializer): Make it a list of variable_initializers
18522         (opt_array_initializer): Modify accordingly.
18523
18524         * expression.cs (New::NType): Add enumeration to help us
18525         keep track of whether we have an object/delegate creation
18526         or an array creation.
18527         (New:NewType, New::Rank, New::Indices, New::Initializers): New
18528         members to hold data about array creation.
18529         (New:New): Modify to update NewType
18530         (New:New): New Overloaded contructor for the array creation
18531         case.
18532
18533         * cs-parser.jay (array_creation_expression): Implement to call
18534         the overloaded New constructor.
18535
18536 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
18537
18538         * class.cs (TypeContainer::Constructors): Return member
18539         constructors instead of returning null.
18540
18541 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
18542
18543         * typemanager.cs (InitCoreTypes): Initialize the various core
18544         types after we have populated the type manager with the user
18545         defined types (this distinction will be important later while
18546         compiling corlib.dll)
18547
18548         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
18549         on Expression Classification.  Now all expressions have a method
18550         `Resolve' and a method `Emit'.
18551
18552         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
18553         generation from working.     Also add some temporary debugging
18554         code. 
18555
18556 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
18557
18558         * codegen.cs: Lots of code generation pieces.  This is only the
18559         beginning, will continue tomorrow with more touches of polish.  We
18560         handle the fundamentals of if, while, do, for, return.  Others are
18561         trickier and I need to start working on invocations soon.
18562
18563         * gen-treedump.cs: Bug fix, use s.Increment here instead of
18564         s.InitStatement. 
18565
18566         * codegen.cs (EmitContext): New struct, used during code
18567         emission to keep a context.   Most of the code generation will be
18568         here. 
18569
18570         * cs-parser.jay: Add embedded blocks to the list of statements of
18571         this block.  So code generation proceeds in a top down fashion.
18572
18573 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
18574
18575         * statement.cs: Add support for multiple child blocks.
18576
18577 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
18578
18579         * codegen.cs (EmitCode): New function, will emit the code for a
18580         Block of code given a TypeContainer and its ILGenerator. 
18581
18582         * statement.cs (Block): Standard public readonly optimization.
18583         (Block::Block constructors): Link children. 
18584         (Block::Child): Child Linker.
18585         (Block::EmitVariables): Emits IL variable declarations.
18586
18587         * class.cs: Drop support for MethodGroups here, delay until
18588         Semantic Analysis.
18589         (Method::): Applied the same simplification that I did before, and
18590         move from Properties to public readonly fields.
18591         (Method::ParameterTypes): Returns the parameter types for the
18592         function, and implements a cache that will be useful later when I
18593         do error checking and the semantic analysis on the methods is
18594         performed.
18595         (Constructor::GetCallingConvention): Renamed from CallingConvetion
18596         and made a method, optional argument tells whether this is a class
18597         or a structure to apply the `has-this' bit.
18598         (Method::GetCallingConvention): Implement, returns the calling
18599         convention. 
18600         (Method::Define): Defines the type, a second pass is performed
18601         later to populate the methods.
18602
18603         (Constructor::ParameterTypes): implement a cache similar to the
18604         one on Method::ParameterTypes, useful later when we do semantic
18605         analysis. 
18606
18607         (TypeContainer::EmitMethod):  New method.  Emits methods.
18608
18609         * expression.cs: Removed MethodGroup class from here.
18610
18611         * parameter.cs (Parameters::GetCallingConvention): new method.
18612
18613 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
18614
18615         * class.cs (TypeContainer::Populate): Drop RootContext from the
18616         argument. 
18617
18618         (Constructor::CallingConvention): Returns the calling convention.
18619         (Constructor::ParameterTypes): Returns the constructor parameter
18620         types. 
18621
18622         (TypeContainer::AddConstructor): Keep track of default constructor
18623         and the default static constructor.
18624
18625         (Constructor::) Another class that starts using `public readonly'
18626         instead of properties. 
18627
18628         (Constructor::IsDefault): Whether this is a default constructor. 
18629
18630         (Field::) use readonly public fields instead of properties also.
18631
18632         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
18633         track of static constructors;  If none is used, turn on
18634         BeforeFieldInit in the TypeAttributes. 
18635
18636         * cs-parser.jay (opt_argument_list): now the return can be null
18637         for the cases where there are no arguments. 
18638
18639         (constructor_declarator): If there is no implicit `base' or
18640         `this', then invoke the default parent constructor. 
18641
18642         * modifiers.cs (MethodAttr): New static function maps a set of
18643         modifiers flags into a MethodAttributes enum
18644         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
18645         MethodAttr, TypeAttr to represent the various mappings where the
18646         modifiers are used.
18647         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
18648
18649 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
18650
18651         * parameter.cs (GetParameterInfo): Fix bug where there would be no
18652         method arguments.
18653
18654         * interface.cs (PopulateIndexer): Implemented the code generator
18655         for interface indexers.
18656
18657 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
18658
18659         * interface.cs (InterfaceMemberBase): Now we track the new status
18660         here.  
18661
18662         (PopulateProperty): Implement property population.  Woohoo!  Got
18663         Methods and Properties going today. 
18664
18665         Removed all the properties for interfaces, and replaced them with
18666         `public readonly' fields. 
18667
18668 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
18669
18670         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
18671         initialize their hashtables/arraylists only when they are needed
18672         instead of doing this always.
18673
18674         * parameter.cs: Handle refs and out parameters.
18675
18676         * cs-parser.jay: Use an ArrayList to construct the arguments
18677         instead of the ParameterCollection, and then cast that to a
18678         Parameter[] array.
18679
18680         * parameter.cs: Drop the use of ParameterCollection and use
18681         instead arrays of Parameters.
18682
18683         (GetParameterInfo): Use the Type, not the Name when resolving
18684         types. 
18685
18686 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
18687
18688         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
18689         and instead use public readonly fields.
18690
18691         * class.cs: Put back walking code for type containers.
18692
18693 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
18694
18695         * class.cs (MakeConstant): Code to define constants.
18696
18697         * rootcontext.cs (LookupType): New function.  Used to locate types 
18698
18699
18700 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
18701
18702         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
18703         this System.Reflection code is.  Kudos to Microsoft
18704
18705         * typemanager.cs: Implement a type cache and avoid loading all
18706         types at boot time.  Wrap in LookupType the internals.  This made
18707         the compiler so much faster.  Wow.  I rule!
18708
18709         * driver.cs: Make sure we always load mscorlib first (for
18710         debugging purposes, nothing really important).
18711
18712         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
18713         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
18714
18715         * rootcontext.cs: Lookup types on their namespace;  Lookup types
18716         on namespaces that have been imported using the `using' keyword.
18717
18718         * class.cs (TypeContainer::TypeAttr): Virtualize.
18719         (Class::TypeAttr): Return attributes suitable for this bad boy.
18720         (Struct::TypeAttr): ditto.
18721         Handle nested classes.
18722         (TypeContainer::) Remove all the type visiting code, it is now
18723         replaced with the rootcontext.cs code
18724
18725         * rootcontext.cs (GetClassBases): Added support for structs. 
18726
18727 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
18728
18729         * interface.cs, statement.cs, class.cs, parameter.cs,
18730         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
18731         Drop use of TypeRefs, and use strings instead.
18732
18733 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
18734
18735         * rootcontext.cs: 
18736
18737         * class.cs (Struct::Struct): set the SEALED flags after
18738         checking the modifiers.
18739         (TypeContainer::TypeAttr): new property, returns the
18740         TypeAttributes for a class.  
18741
18742         * cs-parser.jay (type_list): Oops, list production was creating a
18743         new list of base types.
18744
18745         * rootcontext.cs (StdLib): New property.
18746         (GetInterfaceTypeByName): returns an interface by type name, and
18747         encapsulates error handling here.
18748         (GetInterfaces): simplified.
18749         (ResolveTree): Encapsulated all the tree resolution here.
18750         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
18751         types. 
18752
18753         * driver.cs: Add support for --nostdlib, to avoid loading the
18754         default assemblies.
18755         (Main): Do not put tree resolution here. 
18756
18757         * rootcontext.cs: Beginning of the class resolution.
18758
18759 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
18760
18761         * rootcontext.cs: Provide better error reporting. 
18762
18763         * cs-parser.jay (interface_base): set our $$ to be interfaces.
18764
18765         * rootcontext.cs (CreateInterface): Handle the case where there
18766         are no parent interfaces.
18767
18768         (CloseTypes): Routine to flush types at the end.
18769         (CreateInterface): Track types.
18770         (GetInterfaces): Returns an array of Types from the list of
18771         defined interfaces.
18772
18773         * typemanager.c (AddUserType): Mechanism to track user types (puts
18774         the type on the global type hash, and allows us to close it at the
18775         end). 
18776
18777 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
18778
18779         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
18780         RecordInterface instead.
18781
18782         * cs-parser.jay: Updated to reflect changes above.
18783
18784         * decl.cs (Definition): Keep track of the TypeBuilder type that
18785         represents this type here.  Not sure we will use it in the long
18786         run, but wont hurt for now.
18787
18788         * driver.cs: Smaller changes to accomodate the new code.
18789
18790         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
18791         when done. 
18792
18793         * rootcontext.cs (CreateInterface):  New method, used to create
18794         the System.TypeBuilder type for interfaces.
18795         (ResolveInterfaces): new entry point to resolve the interface
18796         hierarchy. 
18797         (CodeGen): Property, used to keep track of the code generator.
18798
18799 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
18800
18801         * cs-parser.jay: Add a second production for delegate_declaration
18802         with `VOID'.
18803
18804         (enum_body): Put an opt_comma here instead of putting it on
18805         enum_body or enum_member_declarations so we can handle trailing
18806         commas on enumeration members.  Gets rid of a shift/reduce.
18807
18808         (type_list): Need a COMMA in the middle.
18809
18810         (indexer_declaration): Tell tokenizer to recognize get/set
18811
18812         * Remove old targets.
18813
18814         * Re-add the parser target.
18815
18816 2001-07-13  Simon Cozens <simon@simon-cozens.org>
18817
18818         * cs-parser.jay: Add precendence rules for a number of operators
18819         ot reduce the number of shift/reduce conflicts in the grammar.
18820
18821 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
18822
18823         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
18824         and put it here.
18825
18826         Get rid of old crufty code.
18827
18828         * rootcontext.cs: Use this to keep track of the parsed
18829         representation and the defined types available to the program. 
18830
18831         * gen-treedump.cs: adjust for new convention.
18832
18833         * type.cs: Split out the type manager, and the assembly builder
18834         from here. 
18835
18836         * typemanager.cs: the type manager will live here now.
18837
18838         * cil-codegen.cs: And the code generator here. 
18839
18840 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
18841
18842         * makefile: Fixed up for easy making.
18843
18844 2001-07-13  Simon Cozens <simon@simon-cozens.org>
18845
18846         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
18847         the 
18848
18849         (unary_expression): Expand pre_increment_expression and
18850         post_decrement_expression to reduce a shift/reduce.
18851
18852 2001-07-11  Simon Cozens
18853
18854         * cs-tokenizer.cs: Hex numbers should begin with a 0.
18855
18856         Improve allow_keyword_as_indent name.
18857
18858 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
18859
18860         * Adjustments for Beta2. 
18861
18862 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
18863
18864         * decl.cs: Added `Define' abstract method.
18865         (InTransit): new property, used to catch recursive definitions. 
18866
18867         * interface.cs: Implement `Define'. 
18868
18869         * modifiers.cs: Map Modifiers.constants to
18870         System.Reflection.TypeAttribute flags.
18871
18872         * class.cs: Keep track of types and user-defined types.
18873         (BuilderInit): New method for creating an assembly
18874         (ResolveType): New function to launch the resolution process, only
18875         used by interfaces for now.
18876
18877         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
18878         that are inserted into the name space. 
18879
18880 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
18881
18882         * ARGH.  I have screwed up my tree so many times due to the use of
18883         rsync rather than using CVS.  Going to fix this at once. 
18884
18885         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
18886         load types.
18887
18888 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
18889
18890         * Experiment successful: Use System.Type rather that our own
18891         version of Type.  
18892
18893 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
18894
18895         * cs-parser.jay: Removed nsAliases from here.
18896
18897         Use new namespaces, handle `using XXX;' 
18898
18899         * namespace.cs: Reimplemented namespace handling, use a recursive
18900         definition of the class.  Now we can keep track of using clauses
18901         and catch invalid using clauses.
18902
18903 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
18904
18905         * gen-treedump.cs: Adapted for all the renaming.
18906
18907         * expression.cs (Expression): this class now has a Type property
18908         which returns an expression Type.
18909
18910         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
18911         `Type', as this has a different meaning now in the base
18912
18913 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
18914
18915         * interface.cs, class.cs: Removed from all the sources the
18916         references to signature computation, as we can not do method
18917         signature computation during the parsing time, as we are not
18918         trying to solve at that point distinguishing:
18919
18920         class X {
18921                 void a (Blah x) {}
18922                 void a (NS.Blah x) {}
18923         }
18924
18925         Which depending on the context might be valid or not, as we do not
18926         know if Blah is the same thing as NS.Blah at that point.
18927
18928         * Redid everything so the code uses TypeRefs now instead of
18929         Types.  TypeRefs are just temporary type placeholders, that need
18930         to be resolved.  They initially have a pointer to a string and the
18931         current scope in which they are used.  This is used later by the
18932         compiler to resolve the reference to an actual Type. 
18933
18934         * DeclSpace is no longer a CIR.Type, and neither are
18935         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
18936         are all DeclSpaces, but no Types. 
18937
18938         * type.cs (TypeRefManager): This implements the TypeRef manager,
18939         which keeps track of all the types that need to be resolved after
18940         the parsing has finished. 
18941
18942 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
18943
18944         * ARGH.  We are going to have to store `foreach' as a class rather
18945         than resolving it, as we need to verify error 1579 after name
18946         resolution.   *OR* we could keep a flag that says `This request to
18947         IEnumerator comes from a foreach statement' which we can then use
18948         to generate the error.
18949
18950 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
18951
18952         * class.cs (TypeContainer.AddMethod): we now add methods to the
18953         MethodGroup instead of the method hashtable.  
18954
18955         * expression.cs: Add MethodGroup abstraction, which gets us one
18956         step closer to the specification in the way we handle method
18957         declarations.  
18958
18959         * cs-parser.jay (primary_expression): qualified_identifier now
18960         tried to match up an identifier to a local variable reference or
18961         to a parameter reference.
18962
18963         current_local_parameters is now a parser global variable that
18964         points to the current parameters for the block, used during name
18965         lookup.
18966
18967         (property_declaration): Now creates an implicit `value' argument to
18968         the set accessor.
18969
18970 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
18971
18972         * parameter.cs: Do not use `param' arguments as part of the
18973         signature, per the spec.
18974
18975 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
18976
18977         * decl.cs: Base class for classes, structs and interfaces.  This
18978         is the "Declaration Space" 
18979
18980         * cs-parser.jay: Use CheckDef for checking declaration errors
18981         instead of having one on each function.
18982
18983         * class.cs: Factor out some code for handling error handling in
18984         accordance to the "Declarations" section in the "Basic Concepts"
18985         chapter in the ECMA C# spec.
18986
18987         * interface.cs: Make all interface member classes derive from
18988         InterfaceMemberBase.
18989
18990 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
18991
18992         * Many things: all interfaces are parsed and generated in
18993         gen-treedump.  Support for member variables, constructors,
18994         destructors, properties, constants is there.
18995
18996         Beginning of the IL backend, but very little done, just there for
18997         testing purposes. 
18998
18999 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
19000
19001         * cs-parser.jay: Fix labeled statement.
19002
19003         * cs-tokenizer.cs (escape): Escape " and ' always.
19004         ref_line, ref_name: keep track of the line/filename as instructed
19005         by #line by the compiler.
19006         Parse #line.
19007
19008 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
19009
19010         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
19011         to match the values in System.CodeDOM.
19012
19013         Divid renamed to Divide.
19014
19015         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
19016         statements. 
19017         (Statements.set): remove.
19018
19019         * System.CodeDOM/CodeCatchClause.cs: always have a valid
19020         statements. 
19021
19022         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
19023         falseStatements always have valid values. 
19024
19025         * cs-parser.jay: Use System.CodeDOM now.
19026