**** Merged r387370-r38910 from MCS ****
[mono.git] / mcs / gmcs / ChangeLog
1 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
2
3         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
4         of a different type is only allowed to private fields of a
5         containing type, not on fields of a base class.
6
7         See test-174.cs and error cs0122-9.cs
8
9 2005-01-13  Raja R Harinath  <rharinath@novell.com>
10
11         Fix test-335.cs (bug #58126).
12         * cs-parser.jay (argument): Split out non-expression parts of the
13         rule into 'non_simple_argument'.
14         (invocation_expression): Support parenthesized invocations with
15         multiple arguments, and with single non-simple arguments.
16
17 2005-01-13  Raja R Harinath  <rharinath@novell.com>
18
19         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
20         places.
21
22 2005-01-12  Raja R Harinath  <rharinath@novell.com>
23
24         Fix cs0038-1.cs, cs1640-6.cs.
25         * ecore.cs (Expression.Resolve): Remove special-case for
26         SimpleName in error-handling.
27         (Expression.almostMatchedMembers): Relax access permission to
28         protected.
29         (Expression.MemberLookupFailed): Handle duplicates in
30         almostMatchedMembers list.
31         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
32         * expression.cs (New.DoResolve): Report CS1540 for more cases.
33         * typemanager.cs (GetFullNameSignature): Use the MethodBase
34         overload if the passed in MemberInfo is a MethodBase.
35
36 2005-01-25  Martin Baulig  <martin@ximian.com>
37
38         * doc.cs
39         (DocUtil.emptyParamList): Removed; use `Type.EmptyTypes' instead.
40
41 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
42
43         Fix #70749
44         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
45         for non-CAS & merge permission sets properly.
46
47 2005-01-11  Raja R Harinath  <rharinath@novell.com>
48
49         Improve standard-compliance of simple name and member access 
50         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
51         * ecore.cs (FullNamedExpression): New abstract base class 
52         for Namespaces and TypeExpressions.
53         (ResolveFlags.SimpleName): Remove.
54         (SimpleName): Remove support for dotted names.
55         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
56         DeclSpace.FindType and DeclSpace.LookupType.
57         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
58         (Expression.ExprClassName): Make member function.
59         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
60         a namespace.  Remove creation of dotted "SimpleName"s.
61         (MemberAccess.DoResolve): Likewise.
62         * decl.cs (DeclSpace.Cache): Make private.
63         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
64         (DeclSpace.FindType): Update.
65         (DeclSpace.LookupType): Move here from RootContext.  Return a 
66         FullNamedExpression.
67         * namespace.cs (Namespace): Derive from FullNamedExpression
68         so that it can be part of expression resolution.
69         (Namespace.Lookup): Return an FullNamedExpression.
70         (NamespaceEntry.LookupAlias): Lookup aliases only in current
71         namespace.
72         * rootcontext.cs (NamespaceLookup): Remove.
73         (LookupType): Move to DeclSpace.
74         * attribute.cs (CheckAttributeType): Update.
75         * doc.cs (FindDocumentedType): Remove allowAlias argument.
76         (FindDocumentedTypeNonArray): Likewise.
77
78 2005-01-11  Raja R Harinath  <rharinath@novell.com>
79
80         Fix cs0509.cs, cs1632.cs.
81         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
82         is the same as IsInterface.
83         (TypeContainer.GetClassBases): Likewise.
84         * statement.cs (LabeledStatement.ig): New field.
85         (LabeledStatement.LabelTarget): Save ILGenerator which created the
86         label.
87         (LabeledStatement.DoEmit): Check that the label was created with
88         the same ILGenerator.
89
90 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
91
92         Fix #71058
93         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
94         accessors to its properties.
95
96         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
97         from accessors to property.
98         
99 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
100
101         Fix #70722
102         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
103         only for overrides.
104         
105 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
106
107         * attribute.cs: Check for null and empty strings.  
108
109         I have lost another battle to Paolo.
110
111 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
112
113         Fix #70942
114         * class.cs (PropertyMethod): Set Parent field in ctors.
115         (SetMethod.InternalParameters): Add unsafe switch hack.
116         Override MarkForDuplicationCheck where it is appropriate.
117
118         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
119         It says whether container allows members with the same name.
120         Base default is no.
121         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
122         Removed is_method parameter.
123
124 2005-01-06  Duncan Mak  <duncan@ximian.com>
125
126         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
127         because the previous change led to incorrect reporting of CS1032
128         ("Cannot define/undefine preprocessor symbols after first token in
129         file"). Instead of using `tokens_seen' as the only flag that
130         triggers CS1040, introduce `comments_seen'. This new flag is used
131         to signify having seen comments on the current line, so it is
132         unset after a newline.
133
134 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
135
136         * doc.cs : When searching for a type, find nested type too.
137           This fixes bug #71040.
138
139 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
140
141         * doc.cs :
142           - Warn missing member comment on those classes which also does not
143             have doc comments. Fixed bug #71041.
144           - Don't warn missing doc comment on default constructor.
145             Fixed bug #71042.
146
147 2005-01-06  Duncan Mak  <duncan@ximian.com>
148
149         * cs-tokenizer.cs (xtoken): After handling traditional C-style
150         comments, set `tokens_seen' to true. This allows us to detect
151         misplaced preprocessor directives (i.e. not at the beginning of
152         the a line, nor after whitespaces). In that case, report error
153         CS1040. This fixes bug #56460.
154
155         * cs-parser.jay (interface_member_declaration): Add checks for
156         IsExplicitImpl, and report CS0541 error if an interface member is
157         defined as an explicit interface declaration.
158
159 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
160
161         Fix #70817
162         * class.cs (PropertyMethod): Set Parent field in ctors.
163         (SetMethod.InternalParameters): Add unsafe switch hack.
164         
165         * decl.cs (MemberCore.Parent): Cannot be readonly.
166
167 2005-01-06  Raja R Harinath  <rharinath@novell.com>
168
169         * decl.cs (DeclSpace.ResolveType): Remove.
170         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
171         Merge in code from ...
172         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
173         * class.cs, enum.cs: Update to changes.
174
175 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
176
177         * anonymous.cs: Ensure that we init the scope of our parent if it
178         has not been initialized yet.
179
180 2004-12-30  Duncan Mak  <duncan@ximian.com>
181
182         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
183         if field.FieldBuilder is null. Fixes #70758.
184
185         * convert.cs: Fixed some typos and updated some of the comments.
186         (ImplicitStandardConversionExists):
187         (TryImplicitIntConversion): If `target_type' is an interface and
188         the type of `ic' implements this interface, return true or a new
189         BoxedCast instead of null. This fixes #70468.
190
191 2004-12-29  Duncan Mak  <duncan@ximian.com>
192
193         * expression.cs (Argument.Emit): Check that Expr is
194         IMemoryLocation before casting to it, and report CS1510 otherwise.
195
196         This fixes #70402.
197
198 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
199
200         * statement.cs (Block.ThisVariable): remove the recursion here, to
201         make the --profile more sane.
202
203 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
204
205         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
206         assembly, by JB Evain.
207
208 2004-12-17  Raja R Harinath  <rharinath@novell.com>
209
210         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
211           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
212         "parent" refers to enclosing type/class.  "base" refers to superclass.
213
214 2004-12-17  Raja R Harinath  <rharinath@novell.com>
215
216         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
217         Ensure that we only have GlobalAttributes.
218         * attribute.cs (Attribute.Emit): Make non-virtual.
219         (GlobalAttribute.Emit): Remove.
220         (Attribute.Resolve): Make virtual.
221         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
222         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
223         the argument. Don't create one.
224         (Attribute.GetObsoleteAttribute): Likewise.
225         (Attribute.GetClsCompliantAttributeValue): Likewise.
226         * class.cs, decl.cs: Update to changes.
227
228 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
229
230         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
231         
232         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
233         
234         * statement.cs (Foreach.Resolve): Add error 186 report.
235
236 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
237
238         * expression.cs (Conditional.DoResolve): Add warning 429.
239         
240         * statement.cs (If.Resolve): Add warning 665.
241
242 2004-12-16  Raja R Harinath  <rharinath@novell.com>
243
244         New invariant: RootContext.Tree.Types.NamespaceEntry == null
245         except when in the parser, and in GlobalAttribute.
246         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
247         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
248         RootContext.Tree.Types.NamespaceEntry once work is done.
249         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
250         and resets RootContext.Tree.Types.NamespaceEntry.
251
252 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
253
254         * cs-parser.jay: Don't create a block for every variable.
255
256 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
257
258         * location.cs: Provide extra information.
259
260         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
261         variables from the captured environment, it is the ldarg_0.
262
263 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
264
265         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
266         find a conclusion.
267         
268         * class.cs: Changed warning level for 169 to avoid developer
269         displeasure from warning flooding. It will be changed back when they
270         fix most of current BCL warnings.
271         
272         * RootContext.cs: Pushed default WarningLevel to 3.
273         
274         * statement.cs: Removed unused variable.
275
276 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
277
278         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
279         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
280         Add error 502 report.
281         (StaticClass.DefineType): Add error 441 report.
282         (Class.AllowedModifiersProp): New virtual property as temporary
283         extension to AllowedModifiers.
284         (Class.DefineType): Add error 418 report. Moved ModFlags check here
285         to share implementation with StaticClass and don't call virtual
286         methods from ctor.
287         
288         * driver.cs (MainDriver): Add error 1558 test.
289
290         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
291         report. Moved error 36 test here.
292
293         * statement.cs (Throw.Resolve): Add error 724 report.
294
295         * typemanager.cs: Add out_attribute_type core type.
296         
297 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
298
299         * class.cs (TypeContainer.VerifyClsCompliance): Add error
300         3018 report.
301         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
302
303         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
304         3017 report.
305         
306         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
307
308         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
309         Add error 3023 report.
310         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
311
312         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
313         implementation.
314
315 2004-12-12  John Luke  <john.luke@gmail.com>
316
317         * driver.cs (AddArgs): take -- into account when
318         adding arguments, fixes bug 65710 
319
320 2004-12-12  Martin Baulig  <martin@ximian.com>
321
322         * expression.cs (Unary.TryReduceNegative): Added support for
323         SByteConstant and ByteConstant.
324         (Unary.Reduce): Check error values from TryReduceNegative().
325
326 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
327
328         * attributes.cs (Attribute.Resolve): Avoid multiple error report
329         and report exception as error 182.
330
331 2004-12-10  Raja R Harinath  <rharinath@novell.com>
332
333         * driver.cs (Main): Fix message when there are warnings.
334
335 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
336
337         * delegate.cs: Fixed my fix from yesterday, sorry about that.
338
339 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
340
341         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
342         Reduced number of warnings.
343         
344         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
345
346 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
347
348         * driver.cs: Removed message.
349
350         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
351
352 2004-12-08    <vargaz@freemail.hu>
353
354         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
355
356 2004-12-08  Martin Baulig  <martin@ximian.com>
357
358         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
359         instead of a CS3002 for properties and indexer.
360
361 2004-12-08  Martin Baulig  <martin@ximian.com>
362
363         * decl.cs (MemberName.ToString): Make this work again.
364
365 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
366
367         * attribute.cs (Resolve): Add error 591 detection.
368
369         * class.cs (FieldMember.Define): Add error 1547 detection.
370         (Indexer.Define): Add error 620 detection.
371         (Operator.Define): Add error 590 detection.
372
373         * ecore.cs: Missing argument for error 79.
374
375         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
376         detection.
377
378 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
379
380         Fix #70106
381         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
382         only.
383
384 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
385
386         * cs-parser.jay : handle doc comments on implicit/explicit operators.
387           Some operator comments were suppressed.
388         * doc.cs : Implicit/explicit operator name in doc comments are like
389           "op_Explicit(type)~returnType", so added suffix handling.
390
391 2005-01-21  Alp Toker  <alp@atoker.com>
392
393         * cs-parser.jay: destructor_declaration's container is PartialContainer
394         not Class when partial types are used, so use Kind prop instead of 'is'.
395
396 2004-12-12  Martin Baulig  <martin@ximian.com>
397
398         * expression.cs (Unary.TryReduceNegative): Added support for
399         SByteConstant and ByteConstant.
400         (Unary.Reduce): Check error values from TryReduceNegative().
401
402 2004-12-11  Martin Baulig  <martin@ximian.com>
403
404         * support.cs (ReflectionParameters.ParameterName): If we have a
405         `gpd', call `ParameterName' on it.
406
407         * parameter.cs (Parameter.GetParameterAttributes): New static method.
408
409         * pending.cs (PendingImplementation.DefineProxy): Call
410         DefineParameter() for all of the MethodBuilder's arguments.
411
412 2004-12-09  Martin Baulig  <martin@ximian.com>
413
414         * doc.cs (DocUtil): Make this a static class.
415
416 2004-12-09  Martin Baulig  <martin@ximian.com>
417
418         * expression.cs (Invocation.InferType): Moved the type inference
419         implementation into TypeManager.
420
421         * generics.cs (TypeManager): Moved the type inference
422         implementation here.
423
424 2004-12-09  Martin Baulig  <martin@ximian.com>
425
426         * typemanager.cs (TypeManager): Make this a partial class.
427
428         * generics.cs
429         (TypeManager): Move the generics part of `TypeManager' here.
430
431 2004-12-08  Martin Baulig  <martin@ximian.com>
432
433         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
434         instead of a CS3002 for properties and indexer.  Added CS3024
435         check for generic interfaces.
436
437         * attributes.cs (AttributeTester.AnalyzeTypeCompliance): Generic
438         instances are not CLS-compliant.
439
440 2004-12-08  Martin Baulig  <martin@ximian.com>
441
442         * cs-parser.jay
443         (void_pointer_expression): New rule for `void*', `void**' etc.
444         (typeof_expression): Add `void_pointer_expression'; fixes #66846.       
445
446 2004-12-08  Martin Baulig  <martin@ximian.com>
447
448         * expression.cs (Invocation.InferType): Removed the hack for
449         MethodCore.MayUnify().  
450
451         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Make
452         this actually work.
453
454         * class.cs (MethodCore.MayUnify): Use
455         TypeManager.MayBecomeEqualGenericTypes().       
456
457 2004-12-08  Martin Baulig  <martin@ximian.com>
458
459         * expression.cs (Is.DoResolve, As.DoResolve): If we're a type
460         parameter, box it.  Fixes #69233.
461
462 2004-12-08  Martin Baulig  <martin@ximian.com>
463
464         * generic.cs (ConstructedType.CheckConstraints): Valuetypes always
465         have the ctor constraint.  Fixes #68326.
466
467 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
468
469         * cs-parser.jay : interface comment was not consumed because of
470           extra opt_semicolon before doc handling.
471
472 2004-12-03  Raja R Harinath  <rharinath@novell.com>
473
474         Fix test-327.cs, test-328.cs, and put in early infrastructure
475         for eventually fixing #52697.
476         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
477         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
478         from other methods.
479         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
480         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
481         (VerifyUsing, error246): Update.
482         * rootcontext.cs (RootContext.NamespaceLookup): Just use
483         'NamespaceEntry.LookupNamespaceOrType'.
484
485 2004-12-07  Martin Baulig  <martin@ximian.com>
486
487         * driver.cs: Call it "BETA SOFTWARE" :-)
488
489 2004-12-06  Raja R Harinath  <rharinath@novell.com>
490
491         Fix crash on cs0657-17.cs.
492         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
493         Use RootContext.Tree.Types, not 'new RootTypes ()'.
494         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
495         the case where the NamespaceEntry gets overwritten.
496
497 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
498
499         Fixed #69195, #56821
500         * ecore.cs (ResolveBoolean): Tiny refactoring.
501
502         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
503         of right expression resolving when left is false constant and
504         operator is LogicalAnd OR true constant and operator is LogicalOr.
505
506         * statement.cs (ResolveUnreachable): Always reports warning.
507
508 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
509
510         * class.cs: Distinguish between 1721 and 1722 (just a little help
511         for the programmer).
512
513 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
514
515         * delegate.cs: Only allow this on new versions of the language. 
516
517 2004-12-02  Duncan Mak  <duncan@ximian.com>
518
519         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
520         Expression class.
521         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
522         here as a static method. Take an additional bool out parameter
523         `must_do_cs1540_check' for signaling to InstanceResolve.
524         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
525         member field from PropertyExpr class and made it an argument of
526         the method instead.
527         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
528         check for MarshalByRefObject, and report CS0122 instead of CS1540.
529         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
530         and `remove_accessor' as well as InstanceResolve: report CS0122
531         where applicable.
532
533         Fixes #70129.
534
535 2004-12-07  Martin Baulig  <martin@ximian.com>
536
537         * decl.cs (DeclSpace.AddToContainer): Report correct errors CS0694
538         and CS0692 where appropriate.
539
540 2004-12-06  Martin Baulig  <martin@ximian.com>
541
542         * class.cs (MethodCore.MayUnify): Moved the CS0408 check here from
543         IsDuplicateImplementation() and improved it.
544
545         * expression.cs (Invocation.InferTypeArguments): Added
546         `Type[] inferred_class_types' argument (for MethodCore.MayUnify)
547         and removed the "ref" modifier from `infered_types'.
548
549         * decl.cs (MemberName.ToString): Removed the exception.
550
551 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
552
553         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
554           comments are allowed.
555
556 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
557
558         * delegate.cs: Add checks for subtypes in paramaters and return values
559         in VerifyMethod () to add support for Covariance/Contravariance
560         in delegates.
561         
562 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
563
564         * report.cs: Remove extra closing parenthesis.
565
566         * convert.cs (Error_CannotImplicitConversion): If the name of the
567         types are the same, provide some extra information.
568
569 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
570
571         Fix bug #70102
572         * attribute.cs (Resolve): Improved implementation of params
573         attribute arguments.
574
575         * support.cs (ParameterData): Add HasParams to be faster.
576
577 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
578
579         all things are for /doc support:
580
581         * doc.cs: new file that supports XML documentation generation.
582         * mcs.exe.sources: added doc.cs.
583         * driver.cs:
584           Handle /doc command line option.
585           Report error 2006 instead of 5 for missing file name for /doc.
586           Generate XML documentation when required, after type resolution.
587         * cs-tokenizer.cs:
588           Added support for picking up documentation (/// and /** ... */),
589           including a new XmlCommentState enumeration.
590         * cs-parser.jay:
591           Added lines to fill Documentation element for field, constant,
592           property, indexer, method, constructor, destructor, operator, event
593           and class, struct, interface, delegate, enum.
594           Added lines to warn incorrect comment.
595         * rootcontext.cs :
596           Added Documentation field (passed only when /doc was specified).
597         * decl.cs:
598           Added DocComment, DocCommentHeader, GenerateDocComment() and
599           OnGenerateDocComment() and some supporting private members for
600           /doc feature to MemberCore.
601         * class.cs:
602           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
603         * delegate.cs:
604           Added overriden DocCommentHeader.
605         * enum.cs:
606           Added overriden DocCommentHeader and GenerateDocComment().
607
608 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
609
610         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
611         unwrapping the enumeration values, chain to
612         DoConstantNumericPromotions again, so we can promote things to the
613         fundamental types (takes care of enums that are bytes, sbytes).
614
615         Fixes bug #62054.
616
617 2004-12-01  Raja R Harinath  <rharinath@novell.com>
618
619         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
620         Fix long-standing bug in type-lookup.  Use FindType instead of
621         LookupType when ec.ResolvingTypeTree.
622         (Attribute.ResolveType, Attribute.Resolve)
623         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
624         Update to changes.
625         (Attributes.Search): Remove internal version.  Update.
626         (Attributes.SearchMulti): Update.
627         (Attributes.GetClsCompliantAttribute): Remove.
628         (Attributes.GetIndexerNameAttribute): Remove.
629         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
630         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
631         * class.cs (Indexer.Define): Likewise.
632
633 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
634
635         Fix bug #68790
636         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
637         MarshallByReference members access.
638
639         * expression.cs: Use CheckMarshallByRefAccess;
640         Better error CS0197 message.
641
642         * report.cs: Print whole related error message.
643
644 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
645
646         * class (GetClassBases): Better error 60 report.
647         (EventProperty): Disabled warning 67 detection.
648
649 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
650
651         Fix bug #60324
652         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
653
654         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
655         precise values.
656
657 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
658
659         Fix bug #49488
660         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
661
662         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
663
664 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
665
666         * attribute.cs (Attribute.Resolve): Refine error reporting and
667         report a cs0117 if the identifier does not exist, to distinguish
668         from 0617 which is a miss-use of the actual identifier.
669
670         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
671         between cs0070 and cs0079.
672
673         * class.cs (MemberBase.DoDefine): When reporting a wrong
674         accessibility level, we use MethodCore to compare instead of
675         Method (this was a regression in some refactoring effort).
676
677         So now we correctly report cs0056 again.
678
679         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
680         testing the target_type (which was known to be object_type) and
681         not the source type (which is anonymous_method).
682
683         Fixed reporting of error cs1660.
684
685         * expression.cs (UserCast.Source): Expose the underlying cast.
686
687         * statement.cs (Switch.SwitchGoverningType): Sort the list of
688         allowed types to find a match to int32 first (most common).
689
690         In addition, it ignores any ImplicitUserConversions that did an
691         internal implicit conversion (as the switch statement allows only
692         one integral conversion to exist).
693
694         * class.cs (PartialContainer.Create): rename `name' to
695         `member_name' for clarity.  Then replace the string calls with a
696         call to MemberName.GetPartialName, as now using
697         MemberName.ToString is an error (this is due to the side effects
698         it had, that were fixed in the past).
699
700         This will restore the error reporting on a number of partial class
701         errors that were missusing this (and getting an exception as a
702         results, which is now just a plain textual warning, because
703         yyparse debug output would crash otherwise).
704
705 2004-11-26  Raja R Harinath  <rharinath@novell.com>
706
707         * Makefile (PROGRAM_INSTALL_DIR): Remove.
708
709 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
710
711         * rootcontext.cs (LookupType): Make sure to cache lookups that
712         don't give us a negative result. This saves about 5% of corlib
713         compilation time.
714
715 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
716
717         * report.cs (AbstractMessage.Print): messages are sent to stderr
718
719         * class.cs (TypeContainer.GetClassBases): It is an error to have a
720         non-interface in the list of interfaces (at this point, either
721         parent was properly set, or a base class is being listed in the
722         interfaces section).
723
724         This flags error 1722, and resolves the crash from bug 69259.
725
726 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
727
728         * statement.cs (Using.EmitExpressionFinally): make this work right
729         for valuetypes. Fixes 69926.
730
731 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
732
733         * const.cs (Const.ChangeType): Cope with the "0 literal can be
734         converted to an enum" here, before we try to change the underlying
735         type.  This code exists, but it is a different code path than the
736         one used while encoding constants.
737
738         (ImplicitReferenceConversionExists): In addition, resynchronized
739         the code here, so it matches the same code in
740         ImplicitReferenceConversionExists for the `from any class-type S
741         to any interface-type T'.       
742
743 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
744
745         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
746
747 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
748
749         * cs-parser.jay: Use verbosity accordingly. 
750
751 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
752
753         * expression.cs (Unary.ResolveOperator): Do not report warning;
754         AddressOf reads from variable.
755         
756         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
757
758 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
759
760         Fix bug #69462
761
762         * attribute.cs (Attributable): Removed CheckTargets.
763         (Attributes.Emit): Explicit attribute targets are tested here.
764
765         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
766         not enabled for interfaces.
767
768         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
769         (GetAssemblyName): Ouch next bug there.
770
771 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
772
773         * expression.cs: Error 275 added.
774         
775 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
776
777         Fix bug #69177 (Implemented decimal constant support)
778
779         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
780         (BinaryFold): Add DecimalConstant.
781
782         * const.cs (Define): Decimal constant 
783         (is not constant.
784         (ChangeType): Add decimal type handling.
785         (LookupConstantValue): Don't set value for decimal type but
786         emit DecimalConstantAttribute. Needed for constant optimization.
787
788         * constant.cs (ToDecimal): New method.
789         (ConvertToDecimal): New method.
790         (IntConstant): Implemented ConvertToDecimal.
791         (DecimalConstant.Emit): Emit optimized version for decimals in
792         int range.
793
794         * expression.cs (ResolveOperator): Changed order of constant
795         reduction to work correctly with native types which have
796         overloaded operators.
797         (ResolveMemberAccess): Extract constant value from attribute
798         for decimal type.
799
800         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
801
802         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
803         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
804         (ChangeType): Decimal is special.
805         (TypeToCoreType): Add decimal type.
806
807 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
808
809         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
810         decimal types.
811
812 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
813
814         * class.cs (EventField.ApplyAttributeBuilder): Fix error
815         test cs1667-5.cs.
816
817 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
818
819         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
820
821         * pending.cs (PendingImplementation): Grab only interfaces.
822
823 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
824
825         * statement.cs (ForeachHelperMethods): Add location member and
826         error 202 detection.
827
828 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
829
830         * expression.cs (DoResolveBase): Fixed wrong warning for out
831         variables.
832
833 2004-12-04  Martin Baulig  <martin@ximian.com>
834
835         * convert.cs (Convert.TypeParameter_to_Null): Use the constraints
836         to check whether the conversion is ok.
837
838         * typemanager.cs (TypeManager.GetTypeArguments): Just return
839         `Type.EmptyTypes' if we're not a generic TypeContainer.
840
841 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
842
843         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
844         old bug: when converting from the null literal to a pointer,
845         return an EmptyCast, not the NullLiteral.
846
847         This fixes #69921, the recent null_type changes probably made this
848         bug more prominent.
849
850 2004-12-03  Martin Baulig  <martin@ximian.com>
851
852         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
853         method as our child, call AnonymousMethod.Compatible() on it.
854
855 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
856
857         * class.cs (FieldBase): Use an unused bit field from the field to
858         encode the `has_offset' property from the FieldMember.  This saves
859         a couple of Ks on bootstrap compilation.
860
861         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
862         method as our child, return the AnonymousMethod resolved
863         expression.
864
865         * expression.cs (New.DoResolve): Allow return values from
866         NewDelegate to also include AnonymousMethods.
867
868         Fixes #70150.
869
870 2004-11-29  Raja R Harinath  <rharinath@novell.com>
871
872         * decl.cs (MemberCore.MemberName): Remove readonly to fix an error
873         cs1648 report.
874         * rootcontext.cs (ResolveCore::interfaces_first_stage): Add
875         System.Runtime.InteropServices._Exception, since it's a base
876         interface of the core type System.Exception in the net_2_0 profile.
877
878 2004-11-27  Martin Baulig  <martin@ximian.com>
879
880         * ecore.cs (Expression.StoreFromPtr): Use `stobj' for generic parameters.
881
882 2004-11-26  Raja R Harinath  <rharinath@novell.com>
883
884         * Makefile: Convert to use executable.make.
885         * gmcs.exe.sources: New.
886
887 2004-11-25  Martin Baulig  <martin@ximian.com>
888
889         * expression.cs (Invocation.InferType): Added support for byref types.
890
891 2004-11-25  Martin Baulig  <martin@ximian.com>
892
893         * statement.cs (Foreach.FetchMethodMoveNext): Wrap `mi.ReturnType'
894         in TypeManager.TypeToCoreType().
895
896 2004-11-25  Martin Baulig  <martin@ximian.com>
897
898         * iterators.cs (Iterator.DoDefineMembers): Override and lookup the
899         "Dispose" method from the `current_type'.
900         (Iterator.EmitMoveNext): Use the `dispose_method' we looked up in
901         DoDefineMembers() instead of using the MethodBuilder; this is
902         required for generic iterators.
903
904         * class.cs (TypeContainer.DoDefineMembers): Make this virtual.
905
906 2004-11-24  Martin Baulig  <martin@ximian.com>
907
908         * ecore.cs (Expression.LoadFromPtr): Use `ldobj' for generic parameters.
909
910 2004-11-20  Martin Baulig  <martin@ximian.com>
911
912         * expression.cs (Invocation.InferType): Correctly infer generic
913         instances; see gen-103.cs.
914         (Invocation.InferTypeArguments): If a generic method doesn't have
915         any unbound type parameters, we don't need to infer anything.
916
917 2004-11-19  Raja R Harinath  <rharinath@novell.com>
918
919         * Makefile (gmcs.exe): Update to new location of bootstrap mcs.exe.
920
921 2004-11-17  Raja R Harinath  <rharinath@novell.com>
922
923         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
924         (TypeHandle.GetMemberCache): New.
925         (TypeHandle.TypeHandle): Update.
926         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
927         (TypeManager.LookupParentInterfacesCache):
928         Rename from LookupInterfaceCache.  Optimize slightly.
929         (TypeManager.MemberLookup_FindMembers): Update.
930         * decl.cs (MemberCache.MemberCache): Set Container to null in the
931         multi-type variant.
932         (AddCacheContents): Rename from AddHashtable.
933         * class.cs (TypeContainer.parent_container): Remove.
934         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
935         (TypeContainer.DoDefineMembers): Don't initialize it.
936         Update to name changes.
937         
938 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
939
940         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
941         that factors the code to check access modifiers on override.  
942
943         (PropertyBase): Use the code here.
944
945         Patch from Lluis S'anchez, fixes bug #69361.
946
947 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
948
949         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
950         routine that is used to report the use of a captured variable
951         whose address has been taken.
952
953         There are two checks: one when variables are being captured and
954         the other check is when the address of a variable is taken. 
955         
956         (because an anonymous methods might be resolved before *or* after
957         the address has been taken) and 
958
959         * expression.cs (Conditional.DoResolve): Remove the special
960         casing that Martin added to trueExpr and falseExpr being both
961         NullLiteral.  We get the right behavior now just by introducing
962         the null_type into the compiler. 
963
964         * convert.cs (ExplicitConversion): Change the code to use
965         null_type instead of testing `expr is NullLiteral'.
966         (ImplicitConversionStandard): use null_type too.
967         (ImplicitReferenceConversionExists): use null_type too.
968         (ImplicitReferenceConversion): use null_type too.
969
970         * literal.cs: The type of `NullLiteral' is now null_type instead
971         of object_type. 
972         (Resolve): Set the type here.
973
974         * typemanager.cs: Introduce null_type.
975
976 2004-11-18  Martin Baulig  <martin@ximian.com>
977
978         * rootcontext.cs
979         (RootContext.LookupType): Return a `Type', not a `TypeExpr'.
980
981 2004-11-18  Martin Baulig  <martin@ximian.com>
982
983         * ecore.cs (TypeExpr.DoResolveAsTypeStep): Make this protected.
984
985 2004-11-18  Martin Baulig  <martin@ximian.com>
986
987         * generic.cs (Constraints.Resolve): Take an `EmitContext' instead
988         of a `DeclSpace'.  If one of our constraints is a `ConstructedType',
989         call ResolveConstructedType() on it to resolve it without checking
990         constraints.
991         (Constraints.ResolveTypes): Check them here.
992         (ConstructedType.DoResolveAsTypeStep): Fully resolve ourselves,
993         but don't check constraints.
994         (ConstructedType.ResolveAsTypeTerminal): Override this and also
995         check constraints here.
996         (ConstructedType.ResolveConstructedType): New public method.  This
997         is called from DoResolveAsTypeStep() and Constraints.Resolve() to
998         resolve ourselves without checking constraints.
999
1000         * ecore.cs (Expression.ResolveAsTypeTerminal): Make this virtual.
1001
1002 2004-11-18  Martin Baulig  <martin@ximian.com>
1003
1004         * decl.cs
1005         (DeclSpace.CurrentType): Changed type from `TypeExpr' to `Type'.
1006
1007         * delegate.cs (Delegate.DefineType): Always create the EmitContext.
1008
1009 2004-11-18  Martin Baulig  <martin@ximian.com>
1010
1011         * ecore.cs (TypeExpr.ResolveType): Removed.
1012         (Expression.ResolveAsTypeTerminal): We always return a fully
1013         resolved `TypeExpr', so we can just access its `Type'.
1014
1015         * class.cs (TypeContainer.DefineType): Resolve `CurrentType' here.
1016
1017 2004-11-17  Martin Baulig  <martin@ximian.com>
1018
1019         * ecore.cs (IAlias.Type): Replaced with ResolveAsType() to make
1020         sure we don't return any unresolved TypeExpr's.
1021         (TypeAliasExpression): The .ctor now takes an `IAlias' instead of
1022         a `TypeExpr'.
1023         (Expression.ResolveAsTypeTerminal): Make sure `te.Type != null'.
1024
1025         * expression.cs (MemberAccess.ResolveAsTypeStep): Don't return any
1026         unresolved `ConstructedType's.
1027
1028 2004-11-17  Martin Baulig  <martin@ximian.com>
1029
1030         * ecore.cs (TypeExpr.ResolveType): Don't make this virtual.
1031
1032 2004-11-17  Martin Baulig  <martin@ximian.com>
1033
1034         * ecore.cs
1035         (Expression.ResolveAsTypeTerminal): Removed the `bool silent' argument.
1036
1037         * decl.cs (DeclSpace.ResolveType): Removed.
1038         (DeclSpace.ResolveTypeExpr): Removed the `bool silent' argument.
1039
1040 2004-11-17  Martin Baulig  <martin@ximian.com>
1041
1042         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
1043         direction, like FindMembers() does.  Fixes #69546, testcase is in
1044         test-315.cs.    
1045
1046 2004-11-16  Martin Baulig  <martin@ximian.com>
1047
1048         This is based on a patch from Marek Safar, see bug #69082.
1049         Fixes bugs #63705 and #67130.
1050
1051         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
1052         method; create a MemberCache for an interface type and cache the
1053         result.
1054
1055         * decl.cs (IMemberContainer.ParentContainer): Removed.
1056         (IMemberContainer.ParentCache): New property.
1057         (MemberCache.SetupCacheForInterface): Removed.
1058         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
1059         to create a cache for an interface's "parent".
1060
1061         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
1062         interfaces too.
1063
1064 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
1065
1066         * statement.cs: Avoid adding bools to a hashtable.
1067
1068 2004-11-15  Martin Baulig  <martin@ximian.com>
1069
1070         * decl.cs (MemberName.GetPartialName): Removed, use GetTypeName() instead.
1071
1072 2004-11-11  Martin Baulig  <martin@ximian.com>
1073
1074         * typemanager.cs (TypeManager.GetMethodName): New method.
1075
1076         * class.cs (MethodData.Define): Include the generic arity in the
1077         name of an explicit interface; also add it to the method name.
1078
1079         * pending.cs (PendingImplementation.InterfaceMethod): The method
1080         name now includes the generic arity.
1081
1082 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
1083
1084         * expression.cs (Invocation.OverloadResolve): Flag error if we are
1085         calling an unsafe method from a safe location.
1086
1087 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
1088
1089         Fix #69167
1090         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
1091
1092 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
1093
1094         * namespace.cs (VerifyUsing): use GetPartialName instead of
1095         ToString. 
1096
1097 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
1098
1099         * statement.cs (Return.Resolve): Fix regression in typo: if
1100         `in_exc', we have to request a NeedReturnLabel, this was a typo
1101         introduced in the anonymous method check-in.  Fixes #69131.
1102
1103         * Indexers were using the ShortName when defining themselves,
1104         causing a regression in the compiler bootstrap when applying the
1105         patch from 2004-11-02 (first part), now they use their full name
1106         and the bug is gone.
1107
1108 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
1109
1110         * driver.cs: Strip the path from the names of embedded resources. Fixes
1111         #68519.
1112
1113 2004-11-04  Raja R Harinath  <rharinath@novell.com>
1114
1115         Fix error message regression: cs0104-2.cs.
1116         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
1117         (AliasEntry.Resolve): Update.
1118         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
1119         'silent' flag.
1120         (RootContext.LookupType): Update.
1121
1122 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
1123
1124         * cs-parser.jay: Add support for handling accessor modifiers
1125         * class: Add support port accessor modifiers and error checking,
1126         define PropertyMethod.Define as virtual (not abstract anymore)
1127         * ecore.cs: Add checking for proeprties access with access modifiers
1128         * iterators.cs: Modify Accessor constructor call based in the modified
1129         constructor
1130 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
1131
1132         * expression.cs (StringConcat): Handle being called twice,
1133         as when we have a concat in a field init with more than two
1134         ctors in the class
1135
1136 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
1137
1138         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
1139         special case explicit implementations, we should always produce
1140         the .property or .event declaration.
1141         
1142         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
1143         since it will not return correct data if people use this
1144         unresolved in the presence of using statements (see test-313).
1145
1146         * class.cs (MethodData.Define): If we are an explicit interface
1147         implementation, set the method name to the full name of the
1148         interface plus the name of the method.  
1149
1150         Notice that using the method.MethodName.GetFullName() does not
1151         work, as it will only contain the name as declared on the source
1152         file (it can be a shorthand in the presence of using statements)
1153         and not the fully qualifed type name, for example:
1154
1155         using System;
1156
1157         class D : ICloneable {
1158                 object ICloneable.Clone ()  {
1159                 }
1160         }
1161
1162         Would produce a method called `ICloneable.Clone' instead of
1163         `System.ICloneable.Clone'.
1164
1165         * namespace.cs (Alias.Resolve): Use GetPartialName.
1166         
1167 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
1168
1169         * cs-parser.jay: Add error 1055 report.
1170
1171 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
1172
1173         * assign.cs (Assign.DoResolve): Only do the transform of
1174         assignment into a New if the types are compatible, if not, fall
1175         through and let the implicit code deal with the errors and with
1176         the necessary conversions. 
1177
1178 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
1179
1180         * cs-parser.jay: Add error 1031 report.
1181
1182         * cs-tokenizer.cs: Add location for error 1038.
1183
1184 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1185
1186         * cs-parser.jay: Add error 1016 report.
1187
1188 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1189
1190         * cs-parser.jay: Add errors 1575,1611 report.
1191
1192 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1193
1194         * cs-parser.jay: Add error 1001 report.
1195
1196 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1197
1198         Fix #68850
1199         * attribute.cs (GetMarshal): Add method argument for
1200         caller identification.
1201
1202         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
1203         agument for GetMarshal and RuntimeMissingSupport.
1204
1205 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1206
1207         * attribute.cs (ExtractSecurityPermissionSet): Removed
1208         TypeManager.code_access_permission_type.
1209
1210         * typemanager.cs: Removed TypeManager.code_access_permission_type.
1211
1212 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
1213
1214         * expression.cs (LocalVariableReference.DoResolveLValue): Check
1215         for obsolete use of a variable here.   Fixes regression on errors
1216         cs0619-25 and cs0619-26.
1217
1218 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
1219
1220         Fix #62358, implemented security attribute encoding.
1221
1222         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
1223         Tests permitted SecurityAction for assembly or other types.
1224         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
1225         data from SecurityPermissionAttribute to PermisionSet class.
1226
1227         * class.cs (ApplyAttributeBuilder): Added special handling
1228         for System.Security.Permissions.SecurityAttribute based types.
1229
1230         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
1231         special handling for System.Security.Permissions.SecurityAttribute
1232         based types.
1233
1234         * enum.cs (ApplyAttributeBuilder): Added special handling
1235         for System.Security.Permissions.SecurityAttribute based types.
1236
1237         * parameter.cs (ApplyAttributeBuilder): Added special handling
1238         for System.Security.Permissions.SecurityAttribute based types.
1239
1240         * rootcontext.cs: Next 2 core types.
1241
1242         * typemanager.cs (TypeManager.security_permission_attr_type):
1243         Built in type for the SecurityPermission Attribute.
1244         (code_access_permission_type): Build in type.
1245
1246 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
1247
1248         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
1249         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
1250         all of this information into
1251         EmitContext.EmitCapturedVariableInstance.
1252         
1253         * codegen.cs (EmitCapturedVariableInstance): move here the
1254         funcionality of emitting an ldarg.0 in the presence of a
1255         remapping.   This centralizes the instance emit code.
1256
1257         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
1258         then emit a load of this: it means that we have reached the
1259         topmost ScopeInfo: the one that contains the pointer to the
1260         instance of the class hosting the anonymous method.
1261
1262         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
1263         captures to the topmost CaptureContext.
1264
1265 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
1266
1267         * expression.cs (LocalVariableReference): Move the knowledge about
1268         the iterators into codegen's EmitCapturedVariableInstance.
1269
1270 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
1271
1272         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
1273         all code paths return a value from an anonymous method (it is the
1274         same as the 161 error, but for anonymous methods).
1275
1276 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
1277
1278         The introduction of anonymous methods in the compiler changed
1279         various ways of doing things in the compiler.  The most
1280         significant one is the hard split between the resolution phase
1281         and the emission phases of the compiler.
1282
1283         For instance, routines that referenced local variables no
1284         longer can safely create temporary variables during the
1285         resolution phase: they must do so from the emission phase,
1286         since the variable might have been "captured", hence access to
1287         it can not be done with the local-variable operations from the runtime.
1288         
1289         * statement.cs 
1290
1291         (Block.Flags): New flag `IsTopLevel' to indicate that this block
1292         is a toplevel block.
1293
1294         (ToplevelBlock): A new kind of Block, these are the blocks that
1295         are created by the parser for all toplevel method bodies.  These
1296         include methods, accessors and anonymous methods.
1297
1298         These contain some extra information not found in regular blocks:
1299         A pointer to an optional CaptureContext (for tracking captured
1300         local variables and parameters).  A pointer to the parent
1301         ToplevelBlock.
1302         
1303         (Return.Resolve): Catch missmatches when returning a value from an
1304         anonymous method (error 1662).
1305         Invoke NeedReturnLabel from the Resolve phase instead of the emit
1306         phase.
1307
1308         (Break.Resolve): ditto.
1309
1310         (SwitchLabel): instead of defining the labels during the
1311         resolution phase, we now turned the public ILLabel and ILLabelCode
1312         labels into methods called GetILLabelCode() and GetILLabel() that
1313         only define the label during the Emit phase.
1314
1315         (GotoCase): Track the SwitchLabel instead of the computed label
1316         (its contained therein).  Emit the code by using
1317         SwitchLabel.GetILLabelCode ().
1318
1319         (LocalInfo.Flags.Captured): A new flag has been introduce to track
1320         whether the Local has been captured or not.
1321
1322         (LocalInfo.IsCaptured): New property, used to tell whether the
1323         local has been captured.
1324         
1325         * anonymous.cs: Vastly updated to contain the anonymous method
1326         support.
1327
1328         The main classes here are: CaptureContext which tracks any
1329         captured information for a toplevel block and ScopeInfo used to
1330         track the activation frames for various local variables.   
1331
1332         Each toplevel block has an optional capture context associated
1333         with it.  When a method contains an anonymous method both the
1334         toplevel method and the anonymous method will create a capture
1335         context.   When variables or parameters are captured, they are
1336         recorded on the CaptureContext that owns them, for example:
1337
1338         void Demo () {
1339              int a;
1340              MyDelegate d = delegate {
1341                  a = 1;
1342              }
1343         }
1344
1345         Here `a' will be recorded as captured on the toplevel
1346         CapturedContext, the inner captured context will not have anything
1347         (it will only have data if local variables or parameters from it
1348         are captured in a nested anonymous method.
1349
1350         The ScopeInfo is used to track the activation frames for local
1351         variables, for example:
1352
1353         for (int i = 0; i < 10; i++)
1354                 for (int j = 0; j < 10; j++){
1355                    MyDelegate d = delegate {
1356                         call (i, j);
1357                    }
1358                 }
1359
1360         At runtime this captures a single captured variable `i', but it
1361         captures 10 different versions of the variable `j'.  The variable
1362         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
1363         recorded on a child.  
1364
1365         The toplevel ScopeInfo will also track information like the `this'
1366         pointer if instance variables were referenced (this is necessary
1367         as the anonymous method lives inside a nested class in the host
1368         type of the method). 
1369
1370         (AnonymousMethod): Expanded to track the Toplevel, implement
1371         `AnonymousMethod.Compatible' to tell whether an anonymous method
1372         can be converted to a target delegate type. 
1373
1374         The routine now also produces the anonymous method content
1375
1376         (AnonymousDelegate): A helper class that derives from
1377         DelegateCreation, this is used to generate the code necessary to
1378         produce the delegate for the anonymous method that was created. 
1379
1380         * assign.cs: API adjustments for new changes in
1381         Convert.ImplicitStandardConversionExists.
1382
1383         * class.cs: Adjustments to cope with the fact that now toplevel
1384         blocks are of type `ToplevelBlock'. 
1385
1386         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
1387         insteda of standard blocks.
1388
1389         Flag errors if params arguments are passed to anonymous methods.
1390
1391         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
1392         `CurrentAnonymousMethod' which points to the current Anonymous
1393         Method.  The variable points to the AnonymousMethod class that
1394         holds the code being compiled.  It is set in the new EmitContext
1395         created for the anonymous method.
1396
1397         (EmitContext.Phase): Introduce a variable and an enumeration to
1398         assist in enforcing some rules about when and where we are allowed
1399         to invoke certain methods (EmitContext.NeedsReturnLabel is the
1400         only one that enfonces this right now).
1401
1402         (EmitContext.HaveCaptureInfo): new helper method that returns
1403         whether we have a CapturedContext initialized.
1404
1405         (EmitContext.CaptureVariable): New method used to register that a
1406         LocalInfo must be flagged for capturing. 
1407
1408         (EmitContext.CapturedParameter): New method used to register that a
1409         parameters must be flagged for capturing. 
1410         
1411         (EmitContext.CapturedField): New method used to register that a
1412         field must be flagged for capturing. 
1413
1414         (EmitContext.HaveCapturedVariables,
1415         EmitContext.HaveCapturedFields): Return whether there are captured
1416         variables or fields. 
1417
1418         (EmitContext.EmitMethodHostInstance): This is used to emit the
1419         instance for the anonymous method.  The instance might be null
1420         (static methods), this (for anonymous methods that capture nothing
1421         and happen to live side-by-side with the current method body) or a
1422         more complicated expression if the method has a CaptureContext.
1423
1424         (EmitContext.EmitTopBlock): Routine that drives the emission of
1425         code: it will first resolve the top block, then emit any metadata
1426         and then emit the code.  The split is done so that we can extract
1427         any anonymous methods and flag any captured variables/parameters.
1428         
1429         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
1430         during this phase, the ILGenerator should not be used as labels
1431         and local variables declared here might not be accessible to any
1432         code that is part of an anonymous method.  
1433
1434         Exceptions to this include the temporary variables that are
1435         created by some statements internally for holding temporary
1436         variables. 
1437         
1438         (EmitContext.EmitMeta): New routine, in charge of emitting all the
1439         metadata for a cb
1440
1441         (EmitContext.TemporaryReturn): This method is typically called
1442         from the Emit phase, and its the only place where we allow the
1443         ReturnLabel to be defined other than the EmitMeta.  The reason is
1444         that otherwise we would have to duplicate a lot of logic in the
1445         Resolve phases of various methods that today is on the Emit
1446         phase. 
1447
1448         (EmitContext.NeedReturnLabel): This no longer creates the label,
1449         as the ILGenerator is not valid during the resolve phase.
1450
1451         (EmitContext.EmitThis): Extended the knowledge in this class to
1452         work in anonymous methods in addition to iterators. 
1453
1454         (EmitContext.EmitCapturedVariableInstance): This emits whatever
1455         code is necessary on the stack to access the instance to a local
1456         variable (the variable will be accessed as a field).
1457
1458         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
1459         EmitContext.EmitAddressOfParameter): Routines to support
1460         parameters (not completed at this point). 
1461         
1462         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
1463         will also remove the parameters.
1464
1465         * convert.cs (Convert): Define a `ConstantEC' which points to a
1466         null.  This is just to prefity some code that uses
1467         ImplicitStandardConversion code and do not have an EmitContext
1468         handy.
1469
1470         The idea is to flag explicitly that at that point in time, it is
1471         known that the conversion will not trigger the delegate checking
1472         code in implicit conversions (which requires a valid
1473         EmitContext). 
1474
1475         Everywhere: pass new EmitContext parameter since
1476         ImplicitStandardConversionExists now requires it to check for
1477         anonymous method conversions. 
1478
1479         (Convert.ImplicitStandardConversionExists): If the type of an
1480         expression is the anonymous_method_type, and the type is a
1481         delegate, we invoke the AnonymousMethod.Compatible method to check
1482         whether an implicit conversion is possible. 
1483
1484         (Convert.ImplicitConversionStandard): Only do implicit method
1485         group conversions if the language level is not ISO_1.
1486
1487         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
1488         MethodInfo for the Invoke method.  used by Delegate and
1489         AnonymousDelegate.
1490
1491         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
1492         method conversions if the target type is a delegate.
1493
1494         Removed extra debugging nops.
1495
1496         (LocalVariableReference): Turn the `local_info' into a public
1497         field. 
1498
1499         Add `prepared' field, the same hack used for FieldExprs to cope
1500         with composed assignments, as Local variables do not necessarily
1501         operate purely on the stack as they used to: they can be captured
1502         fields. 
1503
1504         Add `temp' for a temporary result, like fields.
1505
1506         Refactor DoResolve and DoResolveLValue into DoResolveBase.
1507
1508         It now copes with Local variables that are captured and emits the
1509         proper instance variable to load it from a field in the captured
1510         case. 
1511
1512         (ParameterReference.DoResolveBase): During the resolve phase,
1513         capture parameters if we are in an anonymous method.
1514
1515         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
1516         anonymous method, use the EmitContext helper routines to emit the
1517         parameter reference.
1518
1519         * iterators.cs: Set RemapToProxy to true/false during the
1520         EmitDispose class.
1521
1522         * parameters.cs (GetParameterByName): New helper method. 
1523
1524         * typemanager.cs (anonymous_method_type) a new type that
1525         represents an anonyous method.  This is always an internal type,
1526         used as a fencepost to test against the anonymous-methodness of an
1527         expression. 
1528         
1529 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
1530
1531         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
1532         561 report.
1533         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
1534
1535 2004-11-10  Martin Baulig  <martin@ximian.com>
1536
1537         * expression.cs (Invocation.BetterFunction): If two methods have
1538         equal parameter types, but only one of them is generic, the
1539         non-generic one wins.
1540         (New.DoResolve): Don't set `is_struct' to false if we're a generic
1541         instance; just use `Type.IsValueType' to determine whether
1542         something is a struct or not.
1543         (MemberAccess.DoResolveAsTypeStep): Don't modify the `args' field,
1544         so we can be called multiple times.
1545
1546 2004-11-10  Martin Baulig  <martin@ximian.com>
1547
1548         * generic.cs (TypeParameter.DefineConstraints): New public method.
1549         (TypeParameter.CheckAccessLevel): Override this and return true.
1550         (ConstructedType.ResolveType): Renamed to DoResolveType(), don't
1551         override ResolveType() anymore.
1552         (ConstructedType.DoResolveAsTypeStep): Call DoResolveType() here.
1553
1554 2004-11-10  Martin Baulig  <martin@ximian.com>
1555
1556         * rootcontext.cs (RootContext.LookupType): If we're a nested type,
1557         call DeclSpace.ResolveNestedType() on it.
1558
1559 2004-11-10  Martin Baulig  <martin@ximian.com>
1560
1561         * support.cs (ReflectionParameters.ParameterModifier): If `gpd' is
1562         non-null, call ParameterModifier() on it.
1563
1564 2004-11-10  Martin Baulig  <martin@ximian.com>
1565
1566         * iterators.cs
1567         (Iterators): Added `current_type' and `this_type' fields.
1568         (Iterators.DefineIterator): Create a new EmitContext and store it
1569         in `ec'; compute `this_type'.
1570
1571 2004-11-10  Martin Baulig  <martin@ximian.com>
1572
1573         * typemanager.cs
1574         (TypeManager.IsPrivateAccessible): New public method.
1575         (Closure.Filter): Use IsPrivateAccessible() instead of IsEqual().
1576
1577 2004-11-10  Martin Baulig  <martin@ximian.com>
1578
1579         * class.cs (TypeContainer.DefineType): Call
1580         TypeBuilder.DefineGenericParameters() before resolving the type
1581         parameters.
1582         (MethodData.parent_method): New protected field.
1583         (MethodData..ctor): Added `MethodInfo parent_method' argument.
1584         (MethodData.Define): Compute `parent_method'.
1585
1586         * decl.cs
1587         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
1588         (MemberCore.GetClsCompliantAttributeValue): Likewise.
1589         (DeclSpace.ec): New protected field; store the EmitContext here.
1590         (DeclSpace.EmitContext): New public property.
1591         (DeclSpace.ResolveType): Un-comment from the [Obsolte] attribute.
1592         (DeclSpace.ResolveNestedType): New public method.
1593         (DeclSpace.ResolveTypeExpr): Just call ResolveAsTypeTerminal() here.
1594         (DeclSpace.NestedAccessible): Added `Type tb' argument.
1595         (DeclSpace.FamilyAccessible): Likewise.
1596         (DeclSpace.FindType): Call ResolveNestedType() for nested types.
1597         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
1598         EmitContext.
1599
1600         * delegate.cs (Delegate.Define): Store the EmitContext in the `ec'
1601         field.
1602
1603         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
1604         (Enum.Emit): Don't create a new EmitContext.
1605
1606 2004-10-18  Martin Baulig  <martin@ximian.com>
1607
1608         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
1609         `Type' directly, but call ResolveType() on it.
1610         (Catch.Resolve): Likewise.
1611         (Foreach.Resolve): Likewise.
1612
1613 2004-10-18  Martin Baulig  <martin@ximian.com>
1614
1615         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
1616         `Type' directly, but call ResolveType() on it.
1617         (Probe.DoResolve): Likewise.
1618         (ArrayCreation.LookupType): Likewise.
1619         (TypeOf.DoResolve): Likewise.
1620         (SizeOf.DoResolve): Likewise.
1621
1622 2004-10-18  Raja R Harinath  <rharinath@novell.com>
1623
1624         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
1625         the ResolveType.
1626
1627 2004-10-17  John Luke  <john.luke@gmail.com>
1628
1629         * class.cs (Operator.GetSignatureForError): use CSharpName
1630
1631         * parameter.cs (Parameter.GetSignatureForError): Returns
1632         correct name even if was not defined.
1633
1634 2004-10-13  Raja R Harinath  <rharinath@novell.com>
1635
1636         Fix #65816.
1637         * class.cs (TypeContainer.EmitContext): New property.
1638         (DefineNestedTypes): Create an emitcontext for each part.
1639         (MethodCore.DoDefineParameters): Use container's emitcontext.
1640         Pass type array to InternalParameters.
1641         (MemberBase.DoDefine): Use container's emitcontext.
1642         (FieldMember.Define): Likewise.
1643         (Event.Define): Likewise.
1644         (SetMethod.GetParameterInfo): Change argument to EmitContext.
1645         Pass type array to InternalParameters.
1646         (SetIndexerMethod.GetParameterInfo): Likewise.
1647         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
1648         * delegate.cs (Define): Pass emitcontext to
1649         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
1650         array to InternalParameters.
1651         * expression.cs (ParameterReference.DoResolveBase): Pass
1652         emitcontext to GetParameterInfo.
1653         (ComposedCast.DoResolveAsTypeStep): Remove check on
1654         ec.ResolvingTypeTree.
1655         * parameter.cs (Parameter.Resolve): Change argument to
1656         EmitContext.  Use ResolveAsTypeTerminal.
1657         (Parameter.GetSignature): Change argument to EmitContext.
1658         (Parameters.ComputeSignature): Likewise.
1659         (Parameters.ComputeParameterTypes): Likewise.
1660         (Parameters.GetParameterInfo): Likewise.
1661         (Parameters.ComputeAndDefineParameterTypes): Likewise.
1662         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
1663         * support.cs (InternalParameters..ctor): Remove variant that takes
1664         a DeclSpace.
1665         * typemanager.cs (system_intptr_expr): New.
1666         (InitExpressionTypes): Initialize it.
1667
1668 2004-10-12  Chris Toshok  <toshok@ximian.com>
1669
1670         * cs-parser.jay: fix location for try_statement and catch_clause.
1671
1672 2004-10-18  Martin Baulig  <martin@ximian.com>
1673
1674         * class.cs (FieldMember.Define): Don't access the TypeExpr's
1675         `Type' directly, but call ResolveType() on it.
1676         (MemberBase.DoDefine): Likewise.
1677
1678         * expression.cs (New.DoResolve): Don't access the TypeExpr's
1679         `Type' directly, but call ResolveType() on it.
1680         (ComposedCast.DoResolveAsTypeStep): Likewise.
1681
1682         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
1683         `Type' directly, but call ResolveType() on it.
1684
1685 2004-10-17  John Luke  <john.luke@gmail.com>
1686
1687         * class.cs (Operator.GetSignatureForError): use CSharpName
1688
1689         * parameter.cs (Parameter.GetSignatureForError): Returns
1690         correct name even if was not defined.
1691
1692 2004-10-13  Raja R Harinath  <rharinath@novell.com>
1693
1694         Fix #65816.
1695         * class.cs (TypeContainer.EmitContext): New property.
1696         (DefineNestedTypes): Create an emitcontext for each part.
1697         (MethodCore.DoDefineParameters): Use container's emitcontext.
1698         Pass type array to InternalParameters.
1699         (MemberBase.DoDefine): Use container's emitcontext.
1700         (FieldMember.Define): Likewise.
1701         (Event.Define): Likewise.
1702         (SetMethod.GetParameterInfo): Change argument to EmitContext.
1703         Pass type array to InternalParameters.
1704         (SetIndexerMethod.GetParameterInfo): Likewise.
1705         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
1706         * delegate.cs (Define): Pass emitcontext to
1707         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
1708         array to InternalParameters.
1709         * expression.cs (ParameterReference.DoResolveBase): Pass
1710         emitcontext to GetParameterInfo.
1711         (ComposedCast.DoResolveAsTypeStep): Remove check on
1712         ec.ResolvingTypeTree.
1713         * parameter.cs (Parameter.Resolve): Change argument to
1714         EmitContext.  Use ResolveAsTypeTerminal.
1715         (Parameter.GetSignature): Change argument to EmitContext.
1716         (Parameters.ComputeSignature): Likewise.
1717         (Parameters.ComputeParameterTypes): Likewise.
1718         (Parameters.GetParameterInfo): Likewise.
1719         (Parameters.ComputeAndDefineParameterTypes): Likewise.
1720         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
1721         * support.cs (InternalParameters..ctor): Remove variant that takes
1722         a DeclSpace.
1723         * typemanager.cs (system_intptr_expr): New.
1724         (InitExpressionTypes): Initialize it.
1725
1726 2004-10-12  Chris Toshok  <toshok@ximian.com>
1727
1728         * cs-parser.jay: fix location for try_statement and catch_clause.
1729
1730 2004-10-07  Raja R Harinath  <rharinath@novell.com>
1731
1732         More DeclSpace.ResolveType avoidance.
1733         * decl.cs (MemberCore.InUnsafe): New property.
1734         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
1735         with newly created EmitContext.
1736         (FieldMember.Define): Likewise.
1737         * delegate.cs (Delegate.Define): Likewise.
1738         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
1739         only if normal name-lookup fails.
1740         (TypeExpr.DoResolve): Enable error-checking.
1741         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
1742         (SizeOf.DoResolve): Likewise.
1743         (ComposedCast.DoResolveAsTypeStep): Likewise.
1744         (StackAlloc.DoResolve): Likewise.
1745         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
1746         (Block.Unsafe): New property.
1747         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
1748         (Unsafe): Set 'unsafe' flag of contained block.
1749         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
1750         (Fixed.Resolve): Likewise.
1751         (Catch.Resolve): Likewise.
1752         (Using.ResolveLocalVariableDecls): Likewise.
1753         (Foreach.Resolve): Likewise.
1754
1755 2004-10-05  John Luke <john.luke@gmail.com>
1756
1757         * cs-parser.jay: add location to error CS0175
1758
1759 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
1760
1761         * ecore.cs (Expression.Constantity): Add support for turning null
1762         into a constant.
1763
1764         * const.cs (Const.Define): Allow constants to be reference types
1765         as long as the value is Null.
1766
1767 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
1768
1769         * namespace.cs (NamespaceEntry.Using): No matter which warning
1770         level is set, check if this namespace name has already been added.
1771
1772 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
1773
1774         * expression.cs: reftype [!=]= null should always use br[true,false].
1775         # 67410
1776
1777 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
1778
1779         Fix #67108
1780         * attribute.cs: Enum conversion moved to 
1781         GetAttributeArgumentExpression to be applied to the all
1782         expressions.
1783
1784 2004-10-01  Raja R Harinath  <rharinath@novell.com>
1785
1786         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
1787         * class.c (TypeContainer.DefineType): Flag error if
1788         base types aren't accessible due to access permissions.
1789         * decl.cs (DeclSpace.ResolveType): Move logic to
1790         Expression.ResolveAsTypeTerminal.
1791         (DeclSpace.ResolveTypeExpr): Thin layer over
1792         Expression.ResolveAsTypeTerminal.
1793         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
1794         Refactor code into NestedAccess.  Use it.
1795         (DeclSpace.NestedAccess): New.
1796         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
1797         argument to silence errors.  Check access permissions.
1798         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
1799         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
1800         (Cast.DoResolve): Likewise.
1801         (New.DoResolve): Likewise.
1802         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
1803         (TypeOf.DoResolve): Likewise.
1804
1805         * expression.cs (Invocation.BetterConversion): Return the Type of
1806         the better conversion.  Implement section 14.4.2.3 more faithfully.
1807         (Invocation.BetterFunction): Make boolean.  Make correspondence to
1808         section 14.4.2.2 explicit.
1809         (Invocation.OverloadResolve): Update.
1810         (Invocation): Remove is_base field.
1811         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
1812         (Invocation.Emit): Likewise.
1813
1814 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
1815
1816         * cs-parser.jay: Reverted 642 warning fix.
1817
1818 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
1819
1820         Fix bug #66615
1821         * decl.cs (FindMemberWithSameName): Indexer can have more than
1822         1 argument.
1823
1824 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
1825
1826         * expression.cs (LocalVariableReference.DoResolveLValue):
1827         Do not report warning 219 for out values.
1828         (EmptyExpression.Null): New member to avoid extra allocations.
1829
1830 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
1831
1832         * cs-parser.jay: Fix wrong warning 642 report.
1833
1834         * cs-tokenizer.cs (CheckNextToken): New helper;
1835         Inspect next character if is same as expected.
1836
1837 2004-09-23  Martin Baulig  <martin@ximian.com>
1838
1839         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
1840         (Convert.ImplicitReferenceConversionExists): Likewise.
1841
1842 2004-11-09  Raja R Harinath  <rharinath@novell.com>
1843
1844         * Makefile (DISTFILES): Comment out a few missing files.
1845
1846 2004-10-29  Raja R Harinath  <rharinath@novell.com>
1847
1848         * Makefile (bootstrap_libs,bootstrap_libfiles): New.
1849         (bootstrap-libs): New target.  Invokes the net_2_0_bootstrap profile.
1850         (gmcs.exe): Invoke bootstrap-libs.
1851         (clean-local): Clean the net_2_0_bootstrap profile too.
1852         (PROGRAM_INSTALL_DIR): New.
1853         (install-local): Use it.
1854
1855 2004-10-13  Martin Baulig  <martin@ximian.com>
1856
1857         * generic.cs (TypeManager.InflatedConstraints): New nested class.
1858         (TypeParameter.DefineType): If we're a method type parameter and
1859         that method is overriding something, "inflate" its constraints.
1860
1861 2004-10-12  Martin Baulig  <martin@ximian.com>
1862
1863         * expression.cs (MemberAccess.DoResolve): If we're a SimpleName
1864         and have type arguments, create and resolve a ConstructedType.
1865
1866 2004-10-12  Martin Baulig  <martin@ximian.com>
1867
1868         * decl.cs (MemberCache.FindMemberToOverride): Use
1869         TypeManager.IsEqual() to compare the parameters and Type.Equals()
1870         to compare the invocationType.
1871
1872         * typemanager.cs (TypeManager.IsEqual): Added support for arrays.
1873         When comparing two type parameters, only do the signature-only
1874         comparision for method type parameters.
1875
1876 2004-10-11  Martin Baulig  <martin@ximian.com>
1877
1878         * report.cs: Don't make --fatal abort on warnings, we have
1879         -warnaserror for that.
1880
1881 2004-10-11  Martin Baulig  <martin@ximian.com>
1882
1883         * typemanager.cs
1884         (TypeManager.IsEqualGenericType): Removed, use IsEqual() instead.
1885         (TypeManager.IsEqual): Call ourself recursively instead of using
1886         Type.IsEqual(). 
1887
1888 2004-10-11  Martin Baulig  <martin@ximian.com>
1889
1890         * class.cs (TypeContainer.DefineType): Only call TypeParameter.Define()
1891         on our own type parameters, not on the ones we inherit from a containing
1892         class.
1893
1894         * expression.cs (Invocation.InferType): Use `==', not `Equals()' for
1895         the comparision.
1896
1897         * generic.cs (TypeParameter.Define): We may only be called once.
1898
1899         * pending.cs (Pending.InterfaceMethod): Call TypeManager.Real_IsEqual()
1900         instead of TypeManager.IsEqual().
1901
1902 2004-09-28  Martin Baulig  <martin@ximian.com>
1903
1904         * generic.cs
1905         (GenericConstraints.EffectiveBaseClass): New public property.
1906         (TypeParameter.GenericConstraints): New public property.
1907         (ConstructedType.CheckConstraints): Improved.
1908
1909         * convert.cs (Convert.TypeParam_EffectiveBaseType): New private method.
1910         (Convert.TypeParameterConversion): New private method; use this in
1911         ImplicitReferenceConversion() and ImplicitReferenceConversionExists()
1912         for all conversions related to type parameters.
1913
1914 2004-09-24  Martin Baulig  <martin@ximian.com>
1915
1916         * convert.cs (Convert.ImplicitReferenceConversion): Added implicit
1917         type parameter conversions for type parameters which are known to
1918         be reference types.
1919
1920 2004-09-24  Martin Baulig  <martin@ximian.com>
1921
1922         * generic.cs (GenericConstraints): Added `IsReferenceType' and
1923         `IsValueType' properties.
1924
1925         * support.cs (ReflectionConstraints): Use
1926         Type.GetGenericParameterConstraints() instead of the old hack.
1927
1928 2004-09-24  Martin Baulig  <martin@ximian.com>
1929
1930         * generic.cs (GenericConstraints): Moved here and made it an
1931         abstract class.
1932
1933         * support.cs (GenericConstraints): Moved to generic.cs.
1934
1935 2004-09-24  Martin Baulig  <martin@ximian.com>
1936
1937         * support.cs
1938         (ReflectionConstraints): Un-nested this class and made it public.
1939
1940         * typemanager.cs
1941         (TypeManager.GetTypeParameterConstraints): New public method.
1942         (TypeManager.HasConstructorConstraint): Use the attributes.
1943
1944 2004-09-24  Martin Baulig  <martin@ximian.com>
1945
1946         * support.cs (GenericConstraints): Replaced `HasConstructor',
1947         `IsReferenceType' and `IsValueType' with `Attributes'.
1948         (ReflectionParameters.ReflectionConstraints): Removed the Create()
1949         method and made the .ctor public.
1950
1951         * generic.cs (Constraints.Attributes): New public property.
1952         (Constraints): Renamed `HasConstructor' -> `HasConstructorConstraint',
1953         `IsReferenceType' -> `HasReferenceTypeConstraint' and
1954         `IsValueType' -> `HasValueTypeConstraint'.
1955
1956 2004-09-23  Martin Baulig  <martin@ximian.com>
1957
1958         * generic.cs (Constraints): Reflect latest runtime changes.
1959
1960 2004-09-23  Martin Baulig  <martin@ximian.com>
1961
1962         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
1963         (Convert.ImplicitReferenceConversionExists): Likewise.
1964
1965 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
1966
1967         * class.cs (Operator.Define): Add error 448 and 559 report.
1968         
1969 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
1970
1971         * class.cs (MemberBase.IsTypePermitted): New protected
1972         method for checking error CS0610.
1973
1974 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
1975
1976         * class.cs (TypeContainer.HasExplicitLayout): New property
1977         Returns whether container has StructLayout attribute set Explicit.
1978         (FieldMember): New abstract class for consts and fields.
1979         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
1980         (Field): Reuse FieldMember.
1981
1982         * const.cs (Const): Reuse FieldMember.
1983
1984         * rootcontext.cs: EmitConstants call moved to class.
1985
1986 2004-09-22  Martin Baulig  <martin@ximian.com>
1987
1988         Marek and me just fixed one of our oldest bugs: #28562 :-)
1989
1990         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
1991
1992         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
1993         we're an EnumConstant, just return that.
1994         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
1995         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
1996         to get the value which'll actually be written into the attribute.
1997         However, we have to use GetValue() to access the attribute's value
1998         in the compiler.        
1999
2000 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
2001
2002         * constant.cs (Constant.IsNegative): New abstract property
2003         IsNegative.
2004
2005         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
2006         (StackAlloc.DoResolve): Reused IsNegative.
2007
2008 2004-09-22  Martin Baulig  <martin@ximian.com>
2009
2010         * typemanager.cs (TypeManager.LookupGenericTypeContainer): New
2011         public method; like LookupTypeContainer, but also works for
2012         generic instances.
2013
2014         * report.cs (Report.SymbolRelatedToPreviousError): Use
2015         TypeManager.LookupGenericTypeContainer().       
2016
2017 2004-09-22  Martin Baulig  <martin@ximian.com>
2018
2019         Thanks to Peter Sestoft for this bug report.
2020
2021         * expression.cs (Conditional): If both the `trueExpr' and the
2022         `falseExpr' is a NullLiteral, return a NullLiteral.
2023
2024 2004-09-22  Martin Baulig  <martin@ximian.com>
2025
2026         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
2027         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
2028         for the "get_Current" call.
2029
2030 2004-09-21  Martin Baulig  <martin@ximian.com>
2031
2032         * convert.cs (Convert.ImplicitReferenceConversion): When
2033         converting to an interface type, first check whether we're
2034         converting from a reference type.
2035
2036 2004-09-14  Martin Baulig  <martin@ximian.com>
2037
2038         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
2039
2040 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
2041
2042         Fixed bug #61902
2043         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
2044         called and is obsolete then this member suppress message
2045         when call is inside next [Obsolete] method or type.
2046
2047         * expression.cs: Use TestObsoleteMethodUsage member.
2048
2049 2004-09-14  Martin Baulig  <martin@ximian.com>
2050
2051         * genericparser.cs: Removed.
2052
2053 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
2054
2055         * class.cs (MethodCore.CheckBase): Fix bug #65757.
2056
2057 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
2058
2059         * attribute.cs (Attribute.Resolve): Add error 653 report.
2060
2061         * class.cs (Class.ApplyAttributeBuilder): Add error 641
2062         report.
2063         (Method.ApplyAttributeBuilder): Add error 685 report.
2064         (Operator.Define): Add error 564 report.
2065
2066         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
2067
2068         * expression.cs (Invocation.DoResolve): Add error
2069         245 and 250 report.
2070
2071         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
2072         error 674 report.
2073
2074 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2075
2076         * class.cs (ConstructorInitializer.Resolve):
2077         Wrong error number (515->516).
2078
2079 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2080
2081         * class.cs (Indexer.Define): Add error 631 report.
2082
2083 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2084
2085         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
2086
2087 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2088
2089         * expression.cs (Probe.DoResolve): Add error CS0241 report.
2090
2091 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
2092
2093         * cs-parser.jay: Added error CS0241 report.
2094
2095 2004-09-10  Raja R Harinath  <rharinath@novell.com>
2096
2097         * cs-parser.jay (fixed_statement): Introduce a scope for the
2098         declaration in the 'fixed' statement.
2099
2100 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2101
2102         * cs-parser.jay: Added CS0230 error report.
2103
2104 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2105
2106         * cs-parser.jay: Added errors CS0231 and CS0257 report.
2107
2108 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2109
2110         * expression.cs (Argument.Resolve): Added error CS0192 and
2111         CS0199 report.
2112
2113 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2114
2115         C# 2.0 #pragma warning feature
2116
2117         * cs-tokenizer.cs (PreProcessPragma): New method; 
2118         Handles #pragma directive.
2119
2120         * report.cs (WarningRegions): New class; Support
2121         class for #pragma warning directive. It tests whether
2122         warning is enabled for a given line.
2123
2124 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
2125
2126         * const.cs: Add more descriptive error report, tahnks to
2127         Sebastien. 
2128
2129 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
2130
2131         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
2132
2133 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
2134
2135         * expression.cs: Apply patch from Ben: Remove dead code from
2136         ArrayCreation, and remove the TurnintoConstant call in const.cs,
2137         as that code just threw an exception anwyays.
2138
2139         * const.cs: Remove the call to the turnintoconstant, for details
2140         see bug: #63144
2141         
2142         * literal.cs: The type of the null-literal is the null type;  So
2143         we use a placeholder type (literal.cs:System.Null, defined here)
2144         for it.
2145
2146         * expression.cs (Conditional.DoResolve): Remove some old code that
2147         is no longer needed, conversions have been fixed.
2148
2149         (ArrayCreationExpression.DoResolve): Return false if we fail to
2150         resolve the inner expression.
2151
2152 2004-09-07  Raja R Harinath  <rharinath@novell.com>
2153
2154         Fix test-290.cs.
2155         * cs-parser.jay (delegate_declaration): Record a delegate
2156         declaration as a type declaration.
2157         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
2158
2159 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
2160
2161         * parameter.cs: Do not crash if the type can not be resolved. 
2162
2163         * expression.cs: Report errors with unsafe pointers, fixes #64896
2164
2165 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
2166
2167         * expression.cs: Pointer arith always needs to do a conv.i
2168         if the operand is a long. fix 65320
2169
2170 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
2171
2172         Fixed cs0619-37.cs, cs0619-38.cs
2173
2174         * enum.cs (GetObsoleteAttribute): Removed.
2175
2176         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
2177         on Enum member is double staged. The first is tested member
2178         and then enum.
2179
2180 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
2181
2182         Fixed #56986, #63631, #65231
2183
2184         * class.cs: (TypeContainer.AddToMemberContainer): New method,
2185         adds member to name container.
2186         (TypeContainer.AddToTypeContainer): New method, adds type to
2187         name container.
2188         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
2189         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
2190         AddOperator): Simplified by reusing AddToMemberContainer.
2191         (TypeContainer.UserDefinedStaticConstructor): Changed to property
2192         instead of field.
2193         (Method.CheckForDuplications): Fixed implementation to test all
2194         possibilities.
2195         (MemberBase): Detection whether member is explicit interface
2196         implementation is now in constructor.
2197         (MemberBase.UpdateMemberName): Handles IndexerName.
2198         (Accessor): Changed to keep also location information.
2199         (AbstractPropertyEventMethod): Is derived from MemberCore.
2200         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
2201         will be emited or not.
2202         (PropertyBase.AreAccessorsDuplicateImplementation):
2203         Tests whether accessors are not in collision with some method.
2204         (Operator): Is derived from MethodCore to simplify common
2205         operations.
2206
2207         * decl.cs (Flags.TestMethodDuplication): Test for duplication
2208         must be performed.
2209         (DeclSpace.AddToContainer): Adds the member to defined_names
2210         table. It tests for duplications and enclosing name conflicts.
2211
2212         * enum.cs (EnumMember): Clean up to reuse the base structures
2213
2214 2004-09-03  Martin Baulig  <martin@ximian.com>
2215
2216         Merged latest changes into gmcs.  Please keep this comment in
2217         here, it makes it easier for me to see what changed in MCS since
2218         the last time I merged.
2219
2220 2004-09-03  Martin Baulig  <martin@ximian.com>
2221
2222         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
2223         into TypeContainer, to make partial classes work again.
2224
2225 2004-09-03  Martin Baulig  <martin@ximian.com>
2226
2227         * rootcontext.cs (RootContext.V2): Removed.
2228
2229 2004-03-23  Martin Baulig  <martin@ximian.com>
2230
2231         * expression.cs (Invocation.OverloadResolve): Added `bool
2232         may_fail' argument and use it instead of the Location.IsNull() hack.
2233
2234 2004-09-09  Martin Baulig  <martin@ximian.com>
2235
2236         * cs-parser.jay (namespace_declaration): Fixed CS0134 reporting.
2237
2238 2004-09-09  Martin Baulig  <martin@ximian.com>
2239
2240         * generic.cs (TypeParameter.DefineType): Added support for
2241         explicit interface methods.
2242
2243 2004-09-09  Martin Baulig  <martin@ximian.com>
2244
2245         * README.Changes: New document.  Started to list important changes
2246         between MCS and GMCS here.
2247
2248 2004-09-08  Martin Baulig  <martin@ximian.com>
2249
2250         * class.cs
2251         (TypeContainer.CheckRecursiveDefinition): New protected method.
2252         (TypeContainer.DefineType): Move the CS0146 check into
2253         CheckRecursiveDefinition().     
2254
2255 2004-09-06  Martin Baulig  <martin@ximian.com>
2256
2257         * generic.cs (ConstructedType.CheckConstraints): Allow builtin
2258         types for the constructor constraint.
2259
2260 2004-09-03  Martin Baulig  <martin@ximian.com>
2261
2262         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
2263         into TypeContainer, to make partial classes work again.
2264
2265 2004-09-03  Martin Baulig  <martin@ximian.com>
2266
2267         * rootcontext.cs (RootContext.V2): Removed.
2268
2269 2004-03-23  Martin Baulig  <martin@ximian.com>
2270
2271         * expression.cs (Invocation.OverloadResolve): Added `bool
2272         may_fail' argument and use it instead of the Location.IsNull() hack.
2273
2274 2004-09-03  Martin Baulig  <martin@ximian.com>
2275
2276         Merged latest changes into gmcs.  Please keep this comment in
2277         here, it makes it easier for me to see what changed in MCS since
2278         the last time I merged.
2279
2280 2004-09-03  Raja R Harinath  <rharinath@novell.com>
2281
2282         Fix #61128.
2283         * expression.cs (BetterConversion): Don't allow either conversion 
2284         to be null.  Remove redundant implicit conversion test when 'q ==
2285         null' -- when this function is invoked, we already know that the
2286         implicit conversion exists.
2287         (BetterFunction): Assume that 'best' is non-null.  Remove
2288         redundant reimplementation of IsApplicable when 'best' is null.
2289         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
2290         number of arguments.
2291         (IsAncestralType): Extract from OverloadResolve.
2292         (OverloadResolve): Make robust to the MethodGroupExpr being
2293         unsorted.  Implement all the logic of Section 14.5.5.1, and
2294         support overloading of methods from multiple applicable types.
2295         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
2296
2297         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
2298         (RealError, Warning): Append type of report to related symbol.
2299
2300 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
2301
2302         * enum.cs: Fixed CLS-Compliance checks for enum members.
2303         Error tests cs3008-8.cs, cs3014-8.cs
2304
2305 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
2306
2307         Fixed bug #62342, #63102
2308         * class.cs: ImplementIndexer uses member.IsExplicitImpl
2309         like ImplementMethod.
2310
2311 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
2312
2313         * attribute.cs (Attribute.GetAttributeArgumentExpression):
2314         Fixed bug #65170.
2315
2316 2004-09-02  Martin Baulig  <martin@ximian.com>
2317
2318         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
2319         TypeManager.GetArgumentTypes() rather than calling GetParameters()
2320         on the MethodBase.
2321
2322 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
2323
2324         C# 2.0 Static classes implemented
2325
2326         * class.cs (TypeContainer): instance_constructors,
2327         initialized_fields, initialized_static_fields,
2328         default_constructor, base_inteface_types are protected to be
2329         accessible from StaticClass.
2330         (TypeContainer.DefineDefaultConstructor): New virtual method
2331         for custom default constructor generating
2332         (StaticClass): New class to handle "Static classes" feature.
2333
2334         * cs-parser.jay: Handle static keyword on class like instance
2335         of StaticClass.
2336
2337         * driver.cs: Added "/langversion" command line switch with two
2338         options (iso-1, default).
2339
2340 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
2341
2342         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
2343
2344 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
2345
2346         * delegate.cs: Style.
2347
2348 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
2349
2350         * delegate.cs: Add seperate instance expr field for miguel.
2351
2352 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
2353
2354         * PointerArithmetic (Resolve): make sure we are not doing
2355         pointer arith on void*. Also, make sure we are resolved
2356         by not setting eclass until resolve.
2357
2358         All callers: Make sure that PointerArithmetic gets resolved.
2359
2360 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
2361
2362         * ArrayCreation (LookupType): If the type does not resolve 
2363         to an array, give an error.
2364
2365 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
2366
2367         * statement.cs (Try.Resolve): Fixed bug #64222
2368
2369 2004-08-27  Martin Baulig  <martin@ximian.com>
2370
2371         * class.cs
2372         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
2373         crash here.     
2374
2375 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
2376
2377         * ecore.cs (Constantify): Get underlying type via
2378         System.Enum.GetUnderlyingType to avoid StackOverflow on the
2379         Windows in special cases.
2380
2381 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
2382
2383         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
2384         for obtaining also private methods.
2385         (GetRemoveMethod): Used GetRemoveMethod (true)
2386         for obtaining also private methods.
2387
2388 2004-09-02  Martin Baulig  <martin@ximian.com>
2389
2390         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
2391         TypeManager.GetArgumentTypes() rather than calling GetParameters()
2392         on the MethodBase.
2393
2394 2004-08-27  Martin Baulig  <martin@ximian.com>
2395
2396         * class.cs
2397         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
2398         crash here.     
2399
2400 2004-08-25  Martin Baulig  <martin@ximian.com>
2401
2402         * support.cs (ReflectionParameters..ctor): If this is a generic
2403         method, retrieve and store its type parameters.
2404         (InternalParameters..ctor): Added `TypeParameter[]' argument.
2405         (ReflectionParameters.GenericConstraints): The argument specifies
2406         the type parameter, not the method parameter.
2407         (InternalParameters.GenericConstraints): Likewise.
2408
2409         * generic.cs (TypeParameter.DefineType): Correctly handle
2410         constraints wrt. generic methods in interfaces and their
2411         implementations.        
2412
2413 2004-08-24  Martin Baulig  <martin@ximian.com>
2414
2415         * generic.cs (TypeParameter.IsSubclassOf): New public method.
2416         (Constraints.IsSubclassOf): New internal method.
2417
2418         * typemanager.cs (TypeManager.FindMembers): Added special support
2419         for GenericTypeParameterBuilder's.      
2420         (TypeManager.IsSubclassOf, IsFamilyAccessible): Added support for
2421         type parameters.
2422
2423 2004-08-24  Martin Baulig  <martin@ximian.com>
2424
2425         * typemanager.cs
2426         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
2427         this for accessibility checks.
2428         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
2429         IsNestedFamilyAccessible.
2430         (TypeManager.IsSubclassOf): New method, do what the name actually
2431         says.   
2432
2433 2004-08-24  Martin Baulig  <martin@ximian.com>
2434
2435         * expression.cs (MemberAccess.DoResolve): When resolving ourselves
2436         as a SimpleName, include the generic arity.
2437
2438 2004-08-24  Martin Baulig  <martin@ximian.com>
2439
2440         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
2441         MethodAttributes.HideBySig for operators.
2442
2443 2004-08-23  Martin Baulig  <martin@ximian.com>
2444
2445         Back to the old error reporting system :-)
2446
2447         * report.cs (Message): Removed.
2448         (Report.MessageData, ErrorData, WarningData): Removed.
2449         (Report.Error, Warning): Back to the old system.
2450
2451 2004-08-23  Martin Baulig  <martin@ximian.com>
2452
2453         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
2454
2455         * class.cs (TypeContainer.ParentContainer): New public virtual
2456         method; replaces the explicit interface implementation.
2457         (ClassPart.ParentContainer): Override.
2458
2459 2004-08-23  Martin Baulig  <martin@ximian.com>
2460
2461         * statement.cs (Switch): Added support for constant switches; see
2462         #59428 or test-285.cs.
2463
2464 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
2465
2466         Fixed bug #62740.
2467         * statement.cs (GetEnumeratorFilter): Removed useless
2468         logic because C# specs is strict. GetEnumerator must be
2469         public.
2470
2471 2004-08-22  Martin Baulig  <martin@ximian.com>
2472
2473         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
2474         a switch and may break, reset the barrier.  Fixes #59867.
2475
2476 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
2477
2478         CLS-Compliance speed up (~5% for corlib)
2479
2480         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
2481         New method. Tests container for CLS-Compliant names
2482
2483         * class.cs (TypeContainer.VerifyClsName): New method.
2484         Checks whether container name is CLS Compliant.
2485         (Constructor): Implements IMethodData.
2486
2487         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
2488         low-case table for CLS Compliance test.
2489         (MemberCache.VerifyClsParameterConflict): New method.
2490         Checks method parameters for CS3006 error.
2491
2492         * enum.cs (EnumMember): Is derived from MemberCore.
2493         (Enum.VerifyClsName): Optimized for better performance.
2494
2495 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
2496
2497         * report.cs: Renamed Error_T to Error and changed all
2498         references.
2499
2500 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
2501
2502         * class.cs (TypeContainer.IndexerArrayList): New inner class
2503         container for indexers.
2504         (TypeContainer.DefaultIndexerName): New constant for default
2505         indexer name. Replaced all "Item" with this constant.
2506         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
2507
2508         * typemanager.cs (TypeManager.default_member_ctor): Cache here
2509         DefaultMemberAttribute constructor.
2510
2511 2004-08-05  Martin Baulig  <martin@ximian.com>
2512
2513         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
2514         Fix bug #59429.
2515
2516 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
2517
2518         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
2519         multi platforms problem.
2520
2521         * compiler.csproj: Included shared files.
2522
2523 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
2524
2525         Fix bug 60333, 55971 in the more general way
2526         * attribute.cs (Attribute.GetAttributeArgumentExpression):
2527         Added arg_type argument for constant conversion.
2528         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
2529
2530 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
2531
2532         Fix bug #59760
2533         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
2534         OperatorArrayList, MethodCoreArrayList for typecontainer
2535         containers. Changed class member types to these new types.
2536         (MethodArrayList.DefineMembers): Added test for CS0659.
2537
2538 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
2539
2540         * cfold.cs: Synchronize the folding with the code in expression.cs
2541         Binary.DoNumericPromotions for uint operands.
2542
2543         * attribute.cs: Revert patch from Raja, it introduced a regression
2544         while building Blam-1.2.1 (hard to isolate a test case).
2545
2546 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
2547
2548         Fix for #55382
2549         * class.cs:
2550         (TypeContainer.Define): Renamed to DefineContainerMembers because of
2551         name collision.
2552         (MethodCore.parent_method): New member. The method we're overriding
2553         if this is an override method.
2554         (MethodCore.CheckBase): Moved from Method class and made common.
2555         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
2556         private.
2557         (MethodCore.CheckForDuplications): New abstract method. For custom
2558         member duplication search in a container
2559         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
2560         method and its return type.
2561         (Event.conflict_symbol): New member. Symbol with same name in the
2562         parent class.
2563
2564         * decl.cs:
2565         (MemberCache.FindMemberWithSameName): New method. The method
2566         is looking for conflict with inherited symbols.
2567
2568 2004-08-04  Martin Baulig  <martin@ximian.com>
2569
2570         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
2571
2572         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
2573
2574 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
2575
2576         * report.cs (Message): New enum for better error, warning reference in
2577         the code.
2578         (MessageData): New inner abstract class. It generally handles printing of
2579         error and warning messages.
2580         Removed unused Error, Warning, Message methods.
2581
2582 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
2583
2584         Fix for cs0592-8.cs test
2585         * attribute.cs
2586         (Attributable.ValidAttributeTargets): Made public.
2587         (Attribute.ExplicitTarget): New member for explicit target value.
2588         (Attribute.CheckTargets): Now we translate explicit attribute
2589         target to Target here.
2590
2591 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
2592
2593         * ecore.cs (MethodGroupExpr): new IsBase property.
2594
2595         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
2596
2597         * delegate.cs (DelegateCreation): store a MethodGroupExpr
2598         rather than an instance expr.
2599
2600         (DelegateCreation.Emit): Use the method group rather than
2601         the instance expression. Also, if you have base.Foo as the
2602         method for a delegate, make sure to emit ldftn, not ldftnvirt.
2603
2604         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
2605
2606         (NewDelegate.DoResolve): Only check for the existance of Invoke
2607         if the method is going to be needed. Use MethodGroupExpr.
2608
2609         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
2610
2611         * expression.cs: For pointer arith., make sure to use
2612         the size of the type, not the size of the pointer to
2613         the type.
2614
2615 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
2616
2617         Fix for #60722
2618         * class.cs (Class): Added error CS0502 test.
2619
2620 2004-08-03  John Luke  <jluke@cfl.rr.com>
2621             Raja R Harinath  <rharinath@novell.com>
2622
2623         Fix for #60997.
2624         * attribute.cs (Attribute.complained_before): New flag.
2625         (Attribute.ResolveType, Attribute.Resolve),
2626         (Attribute.DefinePInvokeMethod): Set it.
2627         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
2628         
2629 2004-08-03  Martin Baulig  <martin@ximian.com>
2630
2631         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
2632         use a user-defined operator; we still need to do numeric
2633         promotions in case one argument is a builtin type and the other
2634         one has an implicit conversion to that type.  Fixes #62322.
2635
2636 2004-08-18  Martin Baulig  <martin@ximian.com>
2637
2638         * class.cs (Method.Define): Use the correct method name when
2639         creating the MethodBuilder for a generic method.
2640
2641 2004-08-17  Martin Baulig  <martin@ximian.com>
2642
2643         * generic.cs (Constraints): Support type parameter constraints.
2644
2645 2004-08-16  Martin Baulig  <martin@ximian.com>
2646
2647         * cs-tokenizer.cs (Tokenizer.TypeOfParsing): New public property.
2648         (Token.GENERIC_DIMENSION): New token; this is returned if we
2649         encounter an unbound generic type in a typeof() expression.
2650
2651         * cs-parser.jay (opt_type_argument_list): Added GENERIC_DIMENSION;
2652         this token is only generated while parsing a typeof() expression.
2653         (typeof_expression): Removed the old unbound_type hack.
2654
2655         * generic.cs (TypeArguments.IsUnbound): New public property.
2656
2657         * decl.cs (MemberName): Added support for unbound types.
2658
2659 2004-08-14  Martin Baulig  <martin@ximian.com>
2660
2661         * typemanager.cs
2662         (TypeManager.IsEqualGenericInstance): New static method.
2663         (TypeManager.IsSubclassOrNestedChildOf, IsSubclassOf): This is
2664         just used to check accessibility, so follow the rules of 26.1.6.        
2665
2666         * expression.cs (MemberAccess.ResolveAsTypeStep): Return a
2667         ConstructedType instead of a TypeExpression if we have type arguments.
2668
2669         * cs-parser.jay (typeof_expression): Support unbound generic types.
2670
2671         * ecore.cs (UnboundTypeExpression): New public class.
2672
2673 2004-08-12  Martin Baulig  <martin@ximian.com>
2674
2675         * typemanager.cs (TypeManager.IsNestedChildOf): Use
2676         TypeManager.IsEqual() rather than `=='.
2677
2678         * decl.cs (DeclSpace.CheckAccessLevel): Use `tb.FullName' for
2679         generic instances as well.
2680
2681 2004-08-12  Martin Baulig  <martin@ximian.com>
2682
2683         * expression.cs (Invocation.InferType): We can only infer method
2684         type parameters.  Fixes #62647.
2685
2686 2004-08-11  Martin Baulig  <martin@ximian.com>
2687
2688         * class.cs (TypeContainer.DefineType): Create the TypeBuilder
2689         before resolving the base classes.
2690
2691 2004-08-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
2692
2693         * Makefile: install .mdb file too.
2694
2695 2004-08-05  Martin Baulig  <martin@ximian.com>
2696
2697         * ecore.cs (FieldExpr.DoResolveLValue): If we're resolving a field
2698         initializer, the current type is just the TypeBuilder, not the
2699         instantiated generic type.
2700         (FieldExpr.IsFieldInitializer): New public property.
2701
2702 2004-08-04  Martin Baulig  <martin@ximian.com>
2703
2704         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
2705
2706         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
2707
2708 2004-08-03  Martin Baulig  <martin@ximian.com>
2709
2710         * class.cs (MethodData.Define): If we're an explicit
2711         implementation, remove the generic arity from the type name.
2712
2713 2004-08-03  Martin Baulig  <martin@ximian.com>
2714
2715         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
2716         use a user-defined operator; we still need to do numeric
2717         promotions in case one argument is a builtin type and the other
2718         one has an implicit conversion to that type.  Fixes #62322.
2719
2720 2004-08-02  Martin Baulig  <martin@ximian.com>
2721
2722         * class.cs (TypeContainer.ifaces): Make this a `Type[]', not a
2723         `TypeExpr[]' array.
2724         (TypeContainer.GetClassBases): Return the unexpanded list of
2725         interfaces; we expand them later.
2726         (TypeContainer.DefineType): After creating the TypeBuilder, call
2727         TypeManager.ExpandInterfaces() to get an expanded and resolved
2728         list of interfaces.
2729
2730         * ecore.cs (TypeExpr.GetInterfaces): Removed
2731
2732         * generics.cs (Constraints.InterfaceConstraints): Remove.
2733         (TypeParameter.DefineType): Call TypeManager.RegisterBuilder() to
2734         register the interface constraints.
2735
2736         * typemanager.cs
2737         (TypeManager.AddUserType): Removed the `ifaces' argument.
2738         (TypeManager.AddTypeParameter): Likewise.
2739         (TypeManager.AddUserInterface): Removed, was unused.
2740         (TypeManager.RegisterBuilder): Take a `Type[]' instead of a
2741         `TypeExpr[]' array for the interfaces.
2742         (TypeManager.ExpandInterfaces): Call this after the TypeBuilder
2743         has been defined, returns a list of the resolved interfaces types.
2744         (TypeManager.GetInterfaces): Return a `Type[]', not a `TypeExpr[]'.
2745         (TypeManager.GetExplicitInterfaces): Likewise.  
2746
2747 2004-08-02  Martin Baulig  <martin@ximian.com>
2748
2749         * expression.cs (Invocation.EmitCall): If we're invoking a method
2750         on a type parameter, use the new `Constrained' prefix opcode.
2751
2752 2004-08-02  Martin Baulig  <martin@ximian.com>
2753
2754         * statement.cs (LocalInfo.Flags): Added `IsThis'.
2755         (LocalInfo.IsThis): New public property.
2756         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
2757
2758 2004-08-01  Martin Baulig  <martin@ximian.com>
2759
2760         * class.cs (TypeContainer.GetClassBases): Don't set the default
2761         here since we may get called from GetPartialBases().
2762         (TypeContainer.DefineType): If GetClassBases() didn't return a
2763         parent, use the default one.
2764
2765 2004-07-30  Martin Baulig  <martin@ximian.com>
2766
2767         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
2768
2769         * class.cs (SourceMethod): New public class, derive from the
2770         symbol writer's ISourceMethod.
2771         (Method): Use the new symbol writer API.
2772
2773         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
2774         as argument and use the new symbol writer.
2775
2776         * location.cs
2777         (SourceFile): Implement the symbol writer's ISourceFile.
2778         (Location.SymbolDocument): Removed.
2779         (Location.SourceFile): New public property.
2780
2781         * symbolwriter.cs: Use the new symbol writer API.
2782
2783 2004-07-30  Raja R Harinath  <rharinath@novell.com>
2784
2785         * Makefile (install-local): Remove.  Functionality moved to
2786         executable.make.
2787
2788 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
2789
2790         * Makefile: Install mcs.exe.config file together with mcs.exe.
2791         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
2792         correct runtime version.
2793         
2794 2004-07-25  Martin Baulig  <martin@ximian.com>
2795
2796         * class.cs
2797         (TypeContainer.RegisterOrder): Removed, this was unused.
2798         (TypeContainer, interface_order): Removed.
2799         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
2800         TypeContainer as argument since we can also be called with a
2801         `PartialContainer' for a partial class/struct/interface.
2802         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
2803         of checking whether we're an `Interface' - we could be a
2804         `PartialContainer'.
2805         (PartialContainer.Register): Override; call
2806         AddClass()/AddStruct()/AddInterface() on our parent.
2807
2808         * cs-parser.jay (interface_member_declaration): Add things to the
2809         `current_container', not the `current_class'.
2810
2811         * rootcontext.cs (RegisterOrder): The overloaded version which
2812         takes an `Interface' was unused, removed.
2813
2814         * typemanager.cs (TypeManager.LookupInterface): Return a
2815         `TypeContainer', not an `Interface'.
2816         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
2817         contain a `PartialContainer' for an interface, so check it's
2818         `Kind' to figure out what it is.
2819
2820 2004-07-25  Martin Baulig  <martin@ximian.com>
2821
2822         * class.cs (Class.DefaultTypeAttributes): New public constant.
2823         (Struct.DefaultTypeAttributes): Likewise.
2824         (Interface.DefaultTypeAttributes): Likewise.
2825         (PartialContainer.TypeAttr): Override this and add the
2826         DefaultTypeAttributes.
2827
2828 2004-07-25  Martin Baulig  <martin@ximian.com>
2829
2830         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
2831         we can just use the `Parent' field instead.
2832
2833 2004-07-25  Martin Baulig  <martin@ximian.com>
2834
2835         * class.cs (TypeContainer.Emit): Renamed to EmitType().
2836
2837 2004-07-25  Martin Baulig  <martin@ximian.com>
2838
2839         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
2840         our parts before defining any methods.
2841         (TypeContainer.VerifyImplements): Make this virtual.
2842         (ClassPart.VerifyImplements): Override and call VerifyImplements()
2843         on our PartialContainer.
2844
2845 2004-07-25  Martin Baulig  <martin@ximian.com>
2846
2847         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
2848
2849         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
2850         argument, we can just use the `Parent' field instead.
2851
2852         * class.cs
2853         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
2854         (MemberBase.DoDefine): Likewise.
2855
2856 2004-07-24  Martin Baulig  <martin@ximian.com>
2857
2858         * decl.cs (MemberCore.Parent): New public field.
2859         (DeclSpace.Parent): Moved to MemberCore.
2860
2861         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
2862         (MemberBase.ctor): Added TypeContainer argument, pass it to our
2863         parent's .ctor.
2864         (FieldBase, Field, Operator): Likewise.
2865         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
2866         (EventField, Event): Likewise.
2867
2868 2004-07-23  Martin Baulig  <martin@ximian.com>
2869
2870         * class.cs (PartialContainer): New public class.
2871         (ClassPart): New public class.
2872         (TypeContainer): Added support for partial classes.
2873         (TypeContainer.GetClassBases): Splitted some of the functionality
2874         out into GetNormalBases() and GetPartialBases().
2875
2876         * cs-tokenizer.cs (Token.PARTIAL): New token.
2877         (Tokenizer.consume_identifier): Added some hacks to recognize
2878         `partial', but only if it's immediately followed by `class',
2879         `struct' or `interface'.
2880
2881         * cs-parser.jay: Added support for partial clases.
2882
2883 2004-07-23  Martin Baulig  <martin@ximian.com>
2884
2885         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
2886         a `DeclSpace' and also made it readonly.
2887         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
2888         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
2889         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
2890
2891         * cs-parser.jay: Pass the `current_class', not the
2892         `current_container' (at the moment, this is still the same thing)
2893         to a new Method, Property, Event, Indexer or Constructor.
2894
2895 2004-07-23  Martin Baulig  <martin@ximian.com>
2896
2897         * cs-parser.jay (CSharpParser): Added a new `current_class' field
2898         and removed the `current_interface' one.
2899         (struct_declaration, class_declaration, interface_declaration):
2900         Set `current_class' to the newly created class/struct/interface;
2901         set their `Bases' and call Register() before parsing their body.
2902
2903 2004-07-23  Martin Baulig  <martin@ximian.com>
2904
2905         * class.cs (Kind): New public enum.
2906         (TypeContainer): Made this class abstract.
2907         (TypeContainer.Kind): New public readonly field.
2908         (TypeContainer.CheckDef): New public method; moved here from
2909         cs-parser.jay.
2910         (TypeContainer.Register): New public abstract method.
2911         (TypeContainer.GetPendingImplementations): New public abstract
2912         method.
2913         (TypeContainer.GetClassBases): Removed the `is_class' and
2914         `is_iface' parameters.
2915         (TypeContainer.DefineNestedTypes): Formerly known as
2916         DoDefineType().
2917         (ClassOrStruct): Made this class abstract.
2918
2919         * tree.cs (RootTypes): New public type. 
2920
2921 2004-07-20  Martin Baulig  <martin@ximian.com>
2922
2923         * tree.cs (Tree.RecordNamespace): Removed.
2924         (Tree.Namespaces): Removed.
2925
2926         * rootcontext.cs (RootContext.IsNamespace): Removed.
2927
2928         * cs-parser.jay (namespace_declaration): Just create a new
2929         NamespaceEntry here.
2930
2931 2004-07-21  Lluis Sanchez Gual  <lluis@novell.com>
2932
2933         * Makefile: Install gmcs.exe.config file together with gmcs.exe.
2934         * gmcs.exe.config: Renamed from mcs.exe.config. Added supportedRuntime
2935         entry to make sure it runs in the correct runtime version.
2936         
2937 2004-07-18  Martin Baulig  <martin@ximian.com>
2938
2939         * generic.cs (ConstructedType.CheckConstraints): Improved
2940         constraints checking.
2941
2942 2004-07-18  Martin Baulig  <martin@ximian.com>
2943
2944         * expression.cs (Invocation.BetterMethod): Call
2945         TypeManager.TypeToCoreType() on all types and removed my previous
2946         hack; we're already doig the right thing here.
2947
2948 2004-07-17  Martin Baulig  <martin@ximian.com>
2949
2950         * decl.cs (MemberName.MakeName): Create the "class`1" names here.
2951
2952 2004-07-16  Martin Baulig  <martin@ximian.com>
2953
2954         * iterators.cs: Added generics support.
2955
2956 2004-07-16  Martin Baulig  <martin@ximian.com>
2957
2958         * iterators.cs: Rewrote this.  We're now using one single Proxy
2959         class for both the IEnumerable and the IEnumerator interface and
2960         `Iterator' derives from Class so we can use the high-level API.
2961
2962         * class.cs (TypeContainer.AddIterator): New method.
2963         (TypeContainer.DoDefineType): New protected virtual method, which
2964         is called from DefineType().
2965         (TypeContainer.DoDefineMembers): Call DefineType() and
2966         DefineMembers() on all our iterators.
2967         (TypeContainer.Emit): Call Emit() on all our iterators.
2968         (TypeContainer.CloseType): Call CloseType() on all our iterators.
2969
2970         * codegen.cs (EmitContext.CurrentIterator): New public field.
2971
2972 2004-07-15  Martin Baulig  <martin@ximian.com>
2973
2974         * typemanager.cs
2975         (TypeManager.not_supported_exception_type): New type.   
2976
2977 2004-07-14  Martin Baulig  <martin@ximian.com>
2978
2979         * typemanager.cs
2980         (TypeManager.generic_ienumerable_type): New type.
2981         (TypeManager.generic_ienumerator_type): New type.
2982
2983         * rootcontext.cs
2984         (RootContext.interfaces_first_stage): Added
2985         "System.Collections.Generic.IEnumerator`1" and
2986         "System.Collections.Generic.IEnumerable`1".     
2987
2988 2004-07-14  Martin Baulig  <martin@ximian.com>
2989
2990         * iterators.cs: Use real error numbers.
2991
2992 2004-07-14  Martin Baulig  <martin@ximian.com>
2993
2994         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
2995         requires this to be a System.Collection.IEnumerable and not a
2996         class implementing that interface.
2997         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
2998
2999 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
3000
3001         * class.cs: Fixed previous fix, it broke some error tests.
3002
3003 2004-07-12  Martin Baulig  <martin@ximian.com>
3004
3005         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
3006         Fixes #61293.
3007
3008 2004-07-14  Martin Baulig  <martin@ximian.com>
3009
3010         * decl.cs, expression.cs, generic.cs: Use a backqoute (`) and not
3011         an exclamation mark (!) for the generic arity to reflect the
3012         latest spec changes; ie. use "System.Collections.Generic.IList`1".
3013
3014 2004-07-13  Martin Baulig  <martin@ximian.com>
3015
3016         * cs-tokenizer.cs (Tokenizer.parse_less_than): Allow array rank
3017         specifiers being part of a type argument.
3018
3019 2004-07-13  Martin Baulig  <martin@ximian.com>
3020
3021         * expression.cs (MemberAccess.ResolveAsTypeStep): Use the full `!'
3022         name for generic types.
3023
3024 2004-07-13  Martin Baulig  <martin@ximian.com>
3025
3026         * assign.cs (Assign.DoResolve): Moved the CS0131 check up a little
3027         bit to fix #60119.
3028
3029 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
3030
3031         * assign.cs (LocalTemporary): Add new argument: is_address,If
3032         `is_address' is true, then the value that we store is the address
3033         to the real value, and not the value itself.
3034         
3035         * ecore.cs (PropertyExpr): use the new local temporary
3036         stuff to allow us to handle X.Y += z (where X is a struct)
3037
3038 2004-07-08  Martin Baulig  <martin@ximian.com>
3039
3040         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
3041         not always return, just like we're doing in Using.Resolve().
3042
3043 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
3044
3045         * cs-parser.jay (fixed_statement): flag this as Pinned.
3046
3047 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
3048
3049         * typemanager.cs (TypeManager): Removed MakePinned method, this
3050         mechanism is replaced with the .NET 2.x compatible mechanism of
3051         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
3052
3053         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
3054         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
3055         `IsFixed' property which has a different meaning.
3056
3057 2004-07-02  Raja R Harinath  <rharinath@novell.com>
3058
3059         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
3060         visible from inside a nested class, not just the names of the
3061         immediately enclosing class.
3062         Fix for bug #60730.
3063
3064 2004-06-24  Raja R Harinath  <rharinath@novell.com>
3065
3066         * expression.cs (BetterConversion): Remove buggy special-case
3067         handling of "implicit constant expression conversions".  At this
3068         point, we already know that the conversion is possible -- we're
3069         only checking to see which is better.
3070
3071 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3072
3073         * cs-parser.jay: Added error CS0210 test.
3074
3075 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3076
3077         * cs-parser.jay: Added error CS0134 test.
3078
3079 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3080
3081         Fix bug #52507
3082         * cs-parser.jay: Added error CS0145 test.
3083
3084 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3085
3086         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
3087
3088 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
3089         
3090         * expression.cs (StackAlloc.Resolve): The argument may not
3091         be a constant; deal with this case.
3092         
3093 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
3094
3095         * attribute.cs (IndexerName_GetIndexerName): Renamed to
3096         GetIndexerAttributeValue.
3097         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
3098
3099         * class.cs (Indexer.Define): Added error tests for CS0415,
3100         CS0609.
3101
3102 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
3103
3104         * attribute.cs (Attribute.Resolve): Keep field code in sync with
3105         property code.
3106
3107 2004-06-23  Martin Baulig  <martin@ximian.com>
3108
3109         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
3110         neither return nor throw, reset the barrier as well.  Fixes #60457.
3111
3112 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
3113
3114         * class.cs : EventAttributes is now set to None by default.
3115           This fixes bug #60459.
3116
3117 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
3118
3119         Fix bug #60219
3120         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
3121         Don't throw exception but return null (it's sufficient now).
3122
3123 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
3124
3125         * typemanager.cs (GetArgumentTypes): Faster implementation.
3126
3127 2004-06-18  Martin Baulig  <martin@ximian.com>
3128
3129         * attribute.cs (Attribute.Resolve): Check whether we're an
3130         EmptyCast which a Constant child.  Fixes #60333.
3131
3132 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
3133
3134         * statement.cs (EmitCollectionForeach): Account for the fact that
3135         not all valuetypes are in areas which we can take the address of.
3136         For these variables, we store to a temporary variable. Also, make
3137         sure that we dont emit a `callvirt' on a valuetype method.
3138
3139 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
3140
3141         * expression.cs (StackAlloc.DoReSolve): Added test for
3142         negative parameter (CS0247).
3143
3144 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
3145
3146         Fix bug #59792
3147         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
3148
3149 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
3150
3151         Fix bug #59781
3152         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
3153         ulong.
3154
3155 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
3156
3157         Fix bug #58254 & cs1555.cs, cs1556.cs
3158         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
3159
3160 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
3161
3162         * cs-parser.jay: Added error CS1669 test for indexers.
3163
3164 2004-06-18  Martin Baulig  <martin@ximian.com>
3165
3166         * generics.cs (GenericMethod.ctor): Don't take an Attributes
3167         argument.  Fixes #60441.
3168
3169 2004-06-16  Ben Maurer  <bmaurer@ximian.com>
3170         * ecore.cs (MethodGroupExpr.Name): Revert Martin's patch.
3171         The name needs to have the actual name of the method in order
3172         for other tests (such as the one in OverloadResolve for Invoke
3173         on a delegate) to work. As well, it does not really help
3174         error reporting because the method group had multiple methods.
3175         * Makefile: Remove MCS_DEBUG, you can enable with the DEBUG_FLAGS.
3176         Make profiling work.
3177         
3178 2004-06-13  Martin Baulig  <martin@ximian.com>
3179
3180         * cs-parser.jay: Don't allow generic attributes.
3181
3182 2004-06-13  Martin Baulig  <martin@ximian.com>
3183
3184         * class.cs (MemberBase.DoDefineBase): New protected method.
3185         (MemberBase.DoDefine): Compute the `flags' in the new
3186         DoDefineBase() which must be called first.
3187         (Method.Define): Call DoDefineBase() first so we have the flags
3188         when defining the generic method.
3189
3190         * cs-parser.jay (interface_method_declaration): Support generic methods.
3191
3192 2004-06-13  Martin Baulig  <martin@ximian.com>
3193
3194         * decl.cs (TypeName): Removed.
3195         (MemberName): Removed TypeName and MemberNow; now we just have
3196         MemberName.
3197
3198         * cs-parser.jay: Don't distinguish between type arguments and type
3199         parameters in the grammar and simplified the rules a bit.  The
3200         reduce/reduce conflicts are now gone (except the one we inherited
3201         from mcs).
3202
3203 2004-06-11  Martin Baulig  <martin@ximian.com>
3204
3205         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
3206         call this twice: for params and varargs methods.
3207
3208 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
3209
3210         * class.cs:
3211         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
3212
3213 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
3214
3215         * attribute.cs (Attribute.GetValidTargets): Made public.
3216
3217         * class.cs: 
3218         (AbstractPropertyEventMethod): New class for better code sharing.
3219         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
3220         CS1667 report.
3221         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
3222
3223 2004-06-09  Martin Baulig  <martin@ximian.com>
3224
3225         * cs-parser.jay: Removed a reduce/reduce conflict.
3226
3227 2004-06-03  Martin Baulig  <martin@ximian.com>
3228
3229         * generic.cs (ConstructedType.GetMemberAccess): Renamed to
3230         GetSimpleName() and return a SimpleName.
3231
3232         * ecore.cs (SimpleName.Arguments): New public field.
3233         (SimpleName): Added overloaded ctor which takes an additional
3234         TypeArguments argument.
3235         (SimpleName.SimpleNameResolve): Added support for generic methods.
3236         (MethodGroupExpr.ResolveGeneric): New public method.  The code was
3237         formerly in MemberAccess.DoResolve(), but we also need it in
3238         SimpleNameResolve().
3239
3240         * expression.cs (MemberAccess.DoResolve): Use the new
3241         MethodGroupExpr.ResolveGeneric().       
3242
3243 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3244
3245         * decl.cs: If possible, use lookuptypedirect here. We can only do
3246         this if there is no `.' after the namespace. Avoids using
3247         LookupType, which does lots of slow processing.
3248         (FindNestedType) New method, does what it says :-).
3249         * namespace.cs: use LookupTypeDirect.
3250         * rootcontext.cs: use membercache, if possible.
3251         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
3252
3253 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3254
3255         * expression.cs:
3256         According to the spec, 
3257
3258         In a member access of the form E.I, if E is a single identifier,
3259         and if the meaning of E as a simple-name (§7.5.2) is a constant,
3260         field, property, localvariable, or parameter with the same type as
3261         the meaning of E as a type-name (§3.8), then both possible
3262         meanings of E are permitted.
3263
3264         We did not check that E as a simple-name had the same type as E as
3265         a type name.
3266
3267         This trivial check gives us 5-7% on bootstrap time.
3268
3269 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3270
3271         * expression.cs (Invocation.OverloadResolve): Avoid the
3272         use of hashtables and boxing here by allocating on demand.
3273
3274 2004-05-30  Martin Baulig  <martin@ximian.com>
3275
3276         * rootcontext.cs (RootContext.LookupType): Don't cache things if
3277         we're doing a silent lookup.  Don't try to lookup nested types in
3278         TypeManager.object_type (thanks to Ben Maurer).
3279
3280 2004-05-30  Martin Baulig  <martin@ximian.com>
3281
3282         Committing a patch from Ben Maurer.
3283
3284         * rootcontext.cs (RootContext.LookupType): Cache negative results.
3285
3286 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3287
3288         * convert.cs: add a trivial cache for overload operator resolution.
3289
3290 2004-05-31  Marek Safar  <marek.safar@seznam.cz>
3291
3292         * attribute.cs
3293         (AttributeTester.GetObsoleteAttribute): Returns instance of
3294         ObsoleteAttribute when type is obsolete.
3295
3296         * class.cs
3297         (TypeContainer.VerifyObsoleteAttribute): Override.
3298         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
3299         (MethodCode.VerifyObsoleteAttribute): Override.
3300         (MemberBase.VerifyObsoleteAttribute): Override.
3301
3302         * decl.cs
3303         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
3304         and report proper error.
3305
3306         *delegate.cs
3307         (Delegate.VerifyObsoleteAttribute): Override.
3308
3309         * ecore.cs
3310         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
3311         and report proper error.
3312         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
3313
3314         * enum.cs
3315         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
3316         and enum member.
3317
3318         * expression.cs
3319         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
3320         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
3321         Added test for ObsoleteAttribute.
3322
3323         * statement.cs
3324         (Catch): Derived from Statement.
3325
3326 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3327
3328         * decl.cs: If possible, use lookuptypedirect here. We can only do
3329         this if there is no `.' after the namespace. Avoids using
3330         LookupType, which does lots of slow processing.
3331         (FindNestedType) New method, does what it says :-).
3332         * namespace.cs: use LookupTypeDirect.
3333         * rootcontext.cs: use membercache, if possible.
3334         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
3335
3336 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3337
3338         * expression.cs:
3339         According to the spec, 
3340
3341         In a member access of the form E.I, if E is a single identifier,
3342         and if the meaning of E as a simple-name (§7.5.2) is a constant,
3343         field, property, localvariable, or parameter with the same type as
3344         the meaning of E as a type-name (§3.8), then both possible
3345         meanings of E are permitted.
3346
3347         We did not check that E as a simple-name had the same type as E as
3348         a type name.
3349
3350         This trivial check gives us 5-7% on bootstrap time.
3351
3352 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
3353
3354         Fixed bug #59071 & cs0160.cs
3355         * statement.cs (Try.Resolve): Check here whether order of catch
3356         clauses matches their dependencies.
3357
3358 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
3359
3360         Fixed bug #58624
3361         * ecore.cs (SimpleName.SimpleNameResolve): Added test for
3362         unsafe type.
3363
3364 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3365
3366         * expression.cs (Invocation.OverloadResolve): Avoid the
3367         use of hashtables and boxing here by allocating on demand.
3368
3369 2004-05-30  Martin Baulig  <martin@ximian.com>
3370
3371         * rootcontext.cs (RootContext.LookupType): Don't cache things if
3372         we're doing a silent lookup.  Don't try to lookup nested types in
3373         TypeManager.object_type (thanks to Ben Maurer).
3374
3375 2004-05-30  Martin Baulig  <martin@ximian.com>
3376
3377         Committing a patch from Ben Maurer.
3378
3379         * rootcontext.cs (RootContext.LookupType): Cache negative results.      
3380
3381 2004-05-29  Martin Baulig  <martin@ximian.com>
3382
3383         * class.cs (IMethodData.ShouldIgnore): New method.
3384
3385         * typemanager.cs (TypeManager.MethodFlags): Don't take a
3386         `Location' argument, we don't need it anywhere.  Use
3387         `IMethodData.ShouldIgnore ()' instead of
3388         `MethodData.GetMethodFlags ()'.
3389         (TypeManager.AddMethod): Removed.
3390         (TypeManager.AddMethod2): Renamed to AddMethod.
3391
3392 2004-05-29  Martin Baulig  <martin@ximian.com>
3393
3394         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
3395
3396         * convert.cs (Convert.ImplicitReferenceConversion): If we're
3397         converting from a class type S to an interface type and we already
3398         have an object on the stack, don't box it again.  Fixes #52578.
3399
3400 2004-05-29  Martin Baulig  <martin@ximian.com>
3401
3402         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
3403         Added support for `params' parameters.  Fixes #59267.
3404
3405 2004-05-29  Martin Baulig  <martin@ximian.com>
3406
3407         * literal.cs (NullPointer): Provide a private .ctor which sets
3408         `type' to TypeManager.object_type.  Fixes #59048.
3409
3410 2004-05-29  Martin Baulig  <martin@ximian.com>
3411
3412         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
3413         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
3414
3415         * ecore.cs (EventExpr.instance_expr): Make the field private.
3416
3417 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
3418
3419         Fixed bug #50080 & cs0214-2.cs
3420         * expression.cs (Cast.DoResolve): Check unsafe context here.
3421         
3422         * statement.cs (Resolve.DoResolve): Likewise.
3423
3424 2004-05-26  Martin Baulig  <martin@ximian.com>
3425
3426         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
3427
3428         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
3429         (RootContext.LookupType): Pass down the `silent' flag.
3430
3431 2004-05-25  Martin Baulig  <martin@ximian.com>
3432
3433         * expression.cs
3434         (MethodGroupExpr.IdenticalTypeName): New public property.
3435         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
3436         expression actually refers to a type.
3437
3438 2004-05-25  Martin Baulig  <martin@ximian.com>
3439
3440         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
3441         for #56176 and made it actually work.
3442
3443 2004-05-25  Martin Baulig  <martin@ximian.com>
3444
3445         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
3446         (FieldExpr, PropertyExpr): Override and implement
3447         CacheTemporaries.  Fixes #52279.
3448
3449 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
3450
3451         * location.cs: In the new compiler listing a file twice is a
3452         warning, not an error.
3453
3454 2004-05-24  Martin Baulig  <martin@ximian.com>
3455
3456         * enum.cs (Enum.DefineType): For the `BaseType' to be a
3457         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
3458
3459 2004-05-24  Martin Baulig  <martin@ximian.com>
3460
3461         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
3462         walking the `using' list.  Fixes #53921.
3463
3464 2004-05-24  Martin Baulig  <martin@ximian.com>
3465
3466         * const.cs (Const.LookupConstantValue): Added support for
3467         EmptyCast's; fixes #55251.
3468
3469 2004-05-24  Martin Baulig  <martin@ximian.com>
3470
3471         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
3472         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
3473         which does the CS0135 check.  The reason is that we first need to
3474         check whether the variable actually exists.
3475
3476 2004-05-24  Martin Baulig  <martin@ximian.com>
3477
3478         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
3479         than RootContext.LookupType() to find the explicit interface
3480         type.  Fixes #58584.
3481
3482 2004-05-24  Raja R Harinath  <rharinath@novell.com>
3483
3484         * Makefile: Simplify.  Use executable.make.
3485         * mcs.exe.sources: New file.  List of sources of mcs.exe.
3486
3487 2004-05-24  Anders Carlsson  <andersca@gnome.org>
3488
3489         * decl.cs:
3490         * enum.cs:
3491         Use the invariant culture when doing String.Compare for CLS case
3492         sensitivity.
3493         
3494 2004-05-23  Martin Baulig  <martin@ximian.com>
3495
3496         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
3497         don't have any dots.  Fixes #52622, added cs0246-8.cs.
3498
3499         * namespace.cs (NamespaceEntry.Lookup): Likewise.
3500
3501 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
3502
3503         * class.cs (MemberBase.Define): Reuse MemberType member for 
3504         resolved type. Other methods can use it too.
3505
3506 2004-05-23  Martin Baulig  <martin@ximian.com>
3507
3508         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
3509         the variable also exists in the current block (otherwise, we need
3510         to report a CS0103).  Fixes #58670.
3511
3512 2004-05-23  Martin Baulig  <martin@ximian.com>
3513
3514         * flowanalysis.cs (Reachability.Reachable): Compute this
3515         on-the-fly rather than storing it as a field.
3516
3517 2004-05-23  Martin Baulig  <martin@ximian.com>
3518
3519         * flowanalysis.cs (Reachability.And): Manually compute the
3520         resulting `barrier' from the reachability.      
3521        
3522 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
3523
3524         Fix bug #57835
3525         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
3526         instance of ObsoleteAttribute when symbol is obsolete.
3527
3528         * class.cs
3529         (IMethodData): Extended interface for ObsoleteAttribute support.
3530
3531 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
3532
3533         * attribute.cs: Fix bug #55970
3534
3535 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
3536
3537         Fix bug #52705
3538         * attribute.cs
3539         (GetObsoleteAttribute): New method. Creates the instance of
3540         ObsoleteAttribute.
3541         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
3542         ObsoleteAttribute when member is obsolete.
3543         (AttributeTester.Report_ObsoleteMessage): Common method for
3544         Obsolete error/warning reporting.
3545
3546         * class.cs
3547         (TypeContainer.base_classs_type): New member for storing parent type.
3548
3549         * decl.cs
3550         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
3551         for this MemberCore.
3552
3553 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
3554
3555         * attribute.cs, const.cs: Fix bug #58590
3556
3557 2004-05-21  Martin Baulig  <martin@ximian.com>
3558
3559         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
3560         out parameters if the end of the method is unreachable.  Fixes
3561         #58098. 
3562
3563 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
3564
3565         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
3566         Hari was right, why extra method.
3567
3568 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
3569
3570         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
3571
3572 2004-05-20  Martin Baulig  <martin@ximian.com>
3573
3574         * delegate.cs: Convert this file to Unix mode - like the original
3575         version in mcs is.
3576
3577 2004-05-20  Martin Baulig  <martin@ximian.com>
3578
3579         * attribute.cs: Convert this file to Unix mode - like the original
3580         version in mcs is.
3581
3582 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
3583
3584        Fix bug #58688 (MCS does not report error when the same attribute
3585        is assigned twice)
3586
3587        * attribute.cs (Attribute.Emit): Distinction between null and default.
3588
3589 2004-05-19  Raja R Harinath  <rharinath@novell.com>
3590
3591        * cs-parser.jay (attribute): Create a GlobalAttribute for the case
3592        of a top-level attribute without an attribute target.
3593        * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
3594        Make non-static.
3595        (Attribute.Conditional_GetConditionName), 
3596        (Attribute.Obsolete_GetObsoleteMessage): Update.
3597        (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
3598        part of ScanForIndexerName.
3599        (Attribute.CanIgnoreInvalidAttribute): New function.
3600        (Attribute.ScanForIndexerName): Move to ...
3601        (Attributes.ScanForIndexerName): ... here.
3602        (Attributes.Attrs): Rename from now-misnamed AttributeSections.
3603        (Attributes.Search): New internal variant that can choose not to
3604        complain if types aren't resolved.  The original signature now
3605        complains.
3606        (Attributes.GetClsCompliantAttribute): Use internal variant, with
3607        complaints suppressed.
3608        (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
3609        only if it not useful.
3610        (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
3611        top-level for attributes that are shared between the assembly
3612        and a top-level class.
3613        * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
3614        * class.cs: Update to reflect changes.
3615        (DefineIndexers): Fuse loops.
3616        * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
3617        a couple more variants of attribute names.
3618
3619 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
3620
3621         Fix bug #52585 (Implemented explicit attribute declaration)
3622
3623         * attribute.cs:
3624         (Attributable.ValidAttributeTargets): New abstract method. It gets
3625         list of valid attribute targets for explicit target declaration.
3626         (Attribute.Target): It holds target itself.
3627         (AttributeSection): Removed.
3628         (Attribute.CheckTargets): New method. It checks whether attribute
3629         target is valid for the current element.
3630
3631         * class.cs:
3632         (EventProperty): New class. For events that are declared like
3633         property (with add and remove accessors).
3634         (EventField): New class. For events that are declared like field.
3635         class.cs
3636
3637         * cs-parser.jay: Implemented explicit attribute target declaration.
3638
3639         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
3640         Override ValidAttributeTargets.
3641
3642         * parameter.cs:
3643         (ReturnParameter): Class for applying custom attributes on 
3644         the return type.
3645         (ParameterAtribute): New class. Class for applying custom
3646         attributes on the parameter type.
3647
3648 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
3649
3650         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
3651         definitions. 
3652
3653         (Method): Allow UNSAFE here.
3654
3655         * modifiers.cs: Support unsafe reporting.
3656
3657 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
3658
3659         * decl.cs: Fix bug #58478.
3660
3661 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
3662
3663         * statement.cs: When checking for unreachable code on an EmptyStatement,
3664         set the location. Fixes bug #58488.
3665
3666 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
3667
3668         * driver.cs: Add -pkg handling.
3669
3670         From Gonzalo: UseShelLExecute=false
3671
3672 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
3673
3674         * attribute.cs:
3675         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
3676         for attribute.
3677         (Attribute.IsClsCompliaceRequired): Moved to base for better
3678         accesibility.
3679         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
3680         when attribute is AttributeUsageAttribute.
3681         (Attribute.GetValidTargets): Simplified.
3682         (Attribute.GetAttributeUsage): New method returns AttributeUsage
3683         attribute for this type.
3684         (Attribute.ApplyAttributes): Method renamed to Emit and make
3685         non-static.
3686         (GlobalAttributeSection): New class for special handling of global
3687         attributes (assembly, module).
3688         (AttributeSection.Emit): New method.
3689
3690         * class.cs: Implemented Attributable abstract methods.
3691         (MethodCore.LabelParameters): Moved to Parameter class.
3692         (Accessor): Is back simple class.
3693         (PropertyMethod): Implemented Attributable abstract class.
3694         (DelegateMethod): Implemented Attributable abstract class.
3695         (Event): New constructor for disctintion between normal Event
3696         and Event with accessors.
3697
3698         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
3699
3700         * codegen.cs, const.cs, decl.cs, delegate.cs:
3701         (CommonAssemblyModulClass): Implemented Attributable abstract class
3702         and simplified.
3703
3704         * enum.cs: Implement IAttributeSupport interface.
3705         (EnumMember): New class for emum members. Implemented Attributable
3706         abstract class
3707
3708         * parameter.cs:
3709         (ParameterBase): Is abstract.
3710         (ReturnParameter): New class for easier [return:] attribute handling.
3711
3712         * typemanager.cs: Removed builder_to_attr.
3713
3714 2004-05-11  Raja R Harinath  <rharinath@novell.com>
3715
3716         Fix bug #57151.
3717         * attribute.cs (Attribute.GetPositionalValue): New function.
3718         * class.cs (TypeContainer.VerifyMembers): New function.
3719         (TypeContainer.Emit): Use it.
3720         (ClassOrStruct): New base class for Class and Struct.
3721         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
3722         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
3723         class.
3724         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
3725         then each non-static field should have a FieldOffset attribute.
3726         Otherwise, none of the fields should have a FieldOffset attribute.
3727         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
3728         and FieldOffset attributes.
3729         * typemanager.cs (TypeManager.struct_layout_attribute_type)
3730         (TypeManager.field_offset_attribute_type): New core types.
3731         (TypeManager.InitCoreTypes): Initialize them.
3732
3733 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
3734
3735         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
3736         Return correct type.
3737         From bug #58270.
3738
3739 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
3740
3741         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
3742         be implicitly converted to ulong.
3743         
3744         * expression.cs: The logic for allowing operator &, | and ^ worked
3745         was wrong, it worked before because we did not report an error in
3746         an else branch.  Fixes 57895.
3747
3748         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
3749         allow volatile fields to be reference types.
3750
3751 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
3752
3753         * driver.cs: Add support for /debug-
3754
3755 2004-05-07  Raja R Harinath  <rharinath@novell.com>
3756
3757         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
3758         Add a 'complain' parameter to silence errors.
3759         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
3760         silently overlooked type-resolutions.
3761         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
3762         to reflect changes.
3763         (Attributes.Search): New function.
3764         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
3765         (Attributes.GetAttributeFullName): Remove hack.
3766         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
3767         Update to reflect changes.
3768         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
3769         Use Attributes.Search instead of nested loops.
3770
3771 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
3772
3773         * decl.cs:
3774         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
3775         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
3776         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
3777
3778         * report.cs: (Report.Warning): Renamed to Warning_T because of
3779         parameter collision.
3780
3781 2004-05-05  Raja R Harinath  <rharinath@novell.com>
3782
3783         * expression.cs (MemberAccess.ResolveMemberAccess):
3784         Exit with non-zero status after Report.Error.
3785         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
3786         Likewise.
3787         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
3788
3789 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
3790
3791         * support.cs: Don't hang when the file is empty.
3792
3793 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
3794
3795         * support.cs: In SeekableStreamReader, compute the preamble size of the
3796           underlying stream. Position changes should take into account that initial
3797           count of bytes.
3798
3799 2004-05-03  Todd Berman  <tberman@sevenl.net>
3800
3801         * driver.cs: remove unused GetSysVersion function.
3802
3803 2004-05-03  Todd Berman  <tberman@sevenl.net>
3804
3805         * driver.cs: Remove the hack from saturday, as well as the hack
3806         from jackson (LoadAssemblyFromGac), also adds the CWD to the
3807         link_paths to get that bit proper.
3808
3809 2004-05-01  Todd Berman  <tberman@sevenl.net>
3810
3811         * driver.cs: Try a LoadFrom before a Load, this checks the current
3812         path. This is currently a bug in mono that is be fixed, however, this
3813         provides a workaround for now. This will be removed when the bug
3814         is fixed.
3815
3816 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
3817
3818         * CryptoConvert.cs: Updated to latest version. Fix issue with 
3819         incomplete key pairs (#57941).
3820
3821 2004-05-01  Todd Berman  <tberman@sevenl.net>
3822
3823         * driver.cs: Remove '.' from path_chars, now System.* loads properly
3824         from the GAC
3825
3826 2004-04-30  Jackson Harper  <jackson@ximian.com>
3827
3828         * codegen.cs: Open keys readonly.
3829         
3830 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
3831
3832         * typemanager.cs: don't report cyclic struct layout when a struct
3833         contains 2 or more fields of the same type. Failed for Pango.AttrShape
3834         which has 2 Pango.Rectangle fields.
3835
3836 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
3837
3838         * expression.cs: Handle IntPtr comparisons with IL code
3839         rather than a method call.
3840
3841 2004-04-29  Martin Baulig  <martin@ximian.com>
3842
3843         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
3844         the list of PropertyInfo's in class hierarchy and find the
3845         accessor.  Fixes #56013.
3846
3847 2004-04-29  Martin Baulig  <martin@ximian.com>
3848
3849         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
3850
3851 2004-04-29  Martin Baulig  <martin@ximian.com>
3852
3853         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
3854
3855         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
3856
3857 2004-04-29  Martin Baulig  <martin@ximian.com>
3858
3859         * class.cs (ConstructorInitializer.Resolve): Check whether the
3860         parent .ctor is accessible.  Fixes #52146.
3861
3862 2004-04-29  Martin Baulig  <martin@ximian.com>
3863
3864         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
3865
3866         * statement.cs (Using.EmitLocalVariableDecls): Use
3867         TypeManager.idisposable_type, not typeof (IDisposable).
3868         (Foreach.EmitCollectionForeach): Added support for valuetypes.
3869
3870 2004-04-29  Martin Baulig  <martin@ximian.com>
3871
3872         * class.cs (Event.Define): Don't emit the field and don't set
3873         RTSpecialName and SpecialName for events on interfaces.  Fixes
3874         #57703. 
3875
3876 2004-04-29  Raja R Harinath  <rharinath@novell.com>
3877
3878         Refactor Attribute.ApplyAttributes.
3879         * attribute.cs (Attributable): New base class for objects that can
3880         have Attributes applied on them.
3881         (Attribute): Make AttributeUsage fields public.
3882         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
3883         (Attribute.IsInternalCall): New property.
3884         (Attribute.UsageAttr): Convert to a public read-only property.
3885         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
3886         (Attribute.ResolveType, Attribute.Resolve)
3887         (Attribute.ScanForIndexerName): Update to reflect changes.
3888         (Attribute.CheckAttributeTarget): Re-format.
3889         (Attribute.ApplyAttributes): Refactor, to various
3890         Attributable.ApplyAttributeBuilder methods.
3891         * decl.cs (MemberCore): Make Attributable.
3892         * class.cs (Accessor): Make Attributable.
3893         (MethodData.ApplyAttributes): Use proper attribute types, not
3894         attribute names.
3895         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
3896         (TypeContainer.ApplyAttributeBuilder)
3897         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
3898         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
3899         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
3900         (Operator.ApplyAttributeBuilder): New factored-out methods.
3901         * const.cs (Const.ApplyAttributeBuilder): Likewise.
3902         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
3903         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
3904         * parameter.cs (ParameterBase): New Attributable base class
3905         that can also represent Return types.
3906         (Parameter): Update to the changes.
3907
3908 2004-04-29  Jackson Harper  <jackson@ximian.com>
3909
3910         * driver.cs: Prefer the corlib system version when looking for
3911         assemblies in the GAC. This is still a hack, but its a better hack
3912         now.
3913         
3914 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
3915
3916         * decl.cs, enum.cs: Improved error 3005 reporting.
3917   
3918         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
3919         (related_symbols): New private member for list of symbols
3920         related to reported error/warning.
3921         
3922         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
3923
3924 2004-04-29  Martin Baulig  <martin@ximian.com>
3925
3926         * ecore.cs (Expression.Constantify): If we're an enum and
3927         TypeManager.TypeToCoreType() doesn't give us another type, use
3928         t.UnderlyingSystemType.  Fixes #56178.  
3929
3930 2004-04-29  Martin Baulig  <martin@ximian.com>
3931
3932         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
3933         interfaces and for each interface, only add members directly
3934         declared in that interface.  Fixes #53255.
3935
3936 2004-04-28  Martin Baulig  <martin@ximian.com>
3937
3938         * expression.cs (ConditionalLogicalOperator): Use a temporary
3939         variable for `left' to avoid that we evaluate it more than once;
3940         bug #52588.
3941
3942 2004-04-28  Martin Baulig  <martin@ximian.com>
3943
3944         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
3945         `void[]' (CS1547).
3946
3947 2004-04-28  Martin Baulig  <martin@ximian.com>
3948
3949         * statement.cs (LocalInfo.Resolve): Check whether the type is not
3950         void (CS1547).
3951
3952         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
3953         whether the type is not void (CS1547).
3954
3955 2004-04-28  Martin Baulig  <martin@ximian.com>
3956
3957         * expression.cs (Unary.DoResolveLValue): Override this and report
3958         CS0131 for anything but Operator.Indirection.
3959
3960 2004-04-28  Martin Baulig  <martin@ximian.com>
3961
3962         Committing a patch from Ben Maurer; see bug #50820.
3963
3964         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
3965         check for classes.
3966
3967         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
3968         classes.        
3969
3970 2004-04-28  Martin Baulig  <martin@ximian.com>
3971
3972         Committing a patch from Ben Maurer; see bug #50820.
3973
3974         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
3975         check for classes.
3976
3977         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
3978         classes.        
3979
3980 2004-04-28  Martin Baulig  <martin@ximian.com>
3981
3982         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
3983         (Block.AddLabel): Call DoLookupLabel() to only search in the
3984         current block.
3985
3986 2004-04-28  Martin Baulig  <martin@ximian.com>
3987
3988         * cfold.cs (ConstantFold.BinaryFold): Added special support for
3989         comparing StringConstants and NullLiterals in Equality and Inequality.
3990
3991 2004-04-28  Jackson Harper  <jackson@ximian.com>
3992
3993         * driver.cs: Attempt to load referenced assemblies from the
3994         GAC. This is the quick and dirty version of this method that
3995         doesnt take into account versions and just takes the first
3996         canidate found. Will be good enough for now as we will not have more
3997         then one version installed into the GAC until I update this method.
3998
3999 2004-04-28  Martin Baulig  <martin@ximian.com>
4000
4001         * typemanager.cs (TypeManager.CheckStructCycles): New public
4002         static method to check for cycles in the struct layout.
4003
4004         * rootcontext.cs (RootContext.PopulateTypes): Call
4005         TypeManager.CheckStructCycles() for each TypeContainer.
4006         [Note: We only need to visit each type once.]
4007
4008 2004-04-28  Martin Baulig  <martin@ximian.com>
4009
4010         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
4011
4012         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
4013         success and added `out object value'.  Use a `bool resolved' field
4014         to check whether we've already been called rather than
4015         `ConstantValue != null' since this breaks for NullLiterals.
4016
4017 2004-04-28  Raja R Harinath  <rharinath@novell.com>
4018
4019         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
4020         setting of this flag, since the 'set' method may be non-public.
4021
4022 2004-04-28  Raja R Harinath  <rharinath@novell.com>
4023
4024         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
4025         check on current_vector.Block.
4026
4027 2004-04-27  Martin Baulig  <martin@ximian.com>
4028
4029         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
4030         a field initializer.  Fixes #56459.
4031
4032 2004-04-27  Martin Baulig  <martin@ximian.com>
4033
4034         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
4035         we're not attempting to use an indexer.  Fixes #52154.
4036
4037 2004-04-27  Martin Baulig  <martin@ximian.com>
4038
4039         * statement.cs (Return): Don't create a return label if we don't
4040         need it; reverts my change from January 20th.  Thanks to Ben
4041         Maurer for this.
4042
4043 2004-04-27  Martin Baulig  <martin@ximian.com>
4044
4045         According to the spec, `goto' can only leave a nested scope, but
4046         never enter it.
4047
4048         * statement.cs (Block.LookupLabel): Only lookup in the current
4049         block, don't recurse into parent or child blocks.
4050         (Block.AddLabel): Check in parent and child blocks, report
4051         CS0140/CS0158 if we find a duplicate.
4052         (Block): Removed this indexer for label lookups.
4053         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
4054         this already does the error reporting for us.
4055
4056         * flowanalysis.cs
4057         (FlowBranching.UsageVector.Block): New public variable; may be null.
4058         (FlowBranching.CreateSibling): Added `Block' argument.
4059         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
4060         label for the target of a `goto' and check whether we're not
4061         leaving a `finally'.
4062
4063 2004-04-27  Martin Baulig  <martin@ximian.com>
4064
4065         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
4066         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
4067         just for returns).
4068
4069 2004-04-27  Martin Baulig  <martin@ximian.com>
4070
4071         * statement.cs (Block.AddLabel): Also check for implicit blocks
4072         and added a CS0158 check.
4073
4074 2004-04-27  Martin Baulig  <martin@ximian.com>
4075
4076         * flowanalysis.cs (FlowBranchingLoop): New class.
4077         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
4078         UsageVector's instead of an ArrayList.
4079         (FlowBranching.Label): Likewise.
4080         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
4081         (FlowBranching.AddBreakVector): New method.
4082
4083 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
4084
4085         * attribute.cs: Small regression fix: only convert the type if we
4086         the type is different, fixes System.Drawing build.
4087
4088 2004-04-27  Martin Baulig  <martin@ximian.com>
4089
4090         * attribute.cs (Attribute.Resolve): If we have a constant value
4091         for a named field or property, implicity convert it to the correct
4092         type.
4093
4094 2004-04-27  Raja R Harinath  <rharinath@novell.com>
4095
4096         * statement.cs (Block.Block): Implicit blocks share
4097         'child_variable_names' fields with parent blocks.
4098         (Block.AddChildVariableNames): Remove.
4099         (Block.AddVariable): Mark variable as "used by a child block" in
4100         every surrounding block.
4101         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
4102         been used in a child block, complain about violation of "Invariant
4103         meaning in blocks" rule.
4104         * cs-parser.jay (declare_local_variables): Don't use
4105         AddChildVariableNames.
4106         (foreach_statement): Don't create an implicit block: 'foreach'
4107         introduces a scope.
4108
4109 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
4110
4111         * convert.cs (ImplicitNumericConversion): 0 is also positive when
4112         converting from 0L to ulong.  Fixes 57522.
4113
4114 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
4115
4116         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
4117         derived class hides via 'new' keyword field from base class (test-242.cs).
4118         TODO: Handle this in the more general way.
4119         
4120         * class.cs (CheckBase): Ditto.
4121
4122 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
4123
4124         * decl.cs (caching_flags): New member for storing cached values
4125         as bit flags.
4126         (MemberCore.Flags): New enum where bit flags for caching_flags
4127         are defined.
4128         (MemberCore.cls_compliance): Moved to caching_flags.
4129         (DeclSpace.Created): Moved to caching_flags.
4130
4131         * class.cs: Use caching_flags instead of DeclSpace.Created
4132         
4133 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
4134
4135         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
4136         if we are only a derived class, not a nested class.
4137
4138         * typemanager.cs: Same as above, but do this at the MemberLookup
4139         level (used by field and methods, properties are handled in
4140         PropertyExpr).   Allow for the qualified access if we are a nested
4141         method. 
4142
4143 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
4144
4145         * class.cs: Refactoring.
4146         (IMethodData): New inteface; Holds links to parent members
4147         to avoid member duplication (reduced memory allocation).
4148         (Method): Implemented IMethodData interface.
4149         (PropertyBase): New inner classes for get/set methods.
4150         (PropertyBase.PropertyMethod): Implemented IMethodData interface
4151         (Event): New inner classes for add/remove methods.
4152         (Event.DelegateMethod): Implemented IMethodData interface.
4153
4154         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
4155         EmitContext (related to class.cs refactoring).
4156
4157 2004-04-21  Raja R Harinath  <rharinath@novell.com>
4158
4159         * delegate.cs (Delegate.VerifyApplicability): If the number of
4160         arguments are the same as the number of parameters, first try to
4161         verify applicability ignoring  any 'params' modifier on the last
4162         parameter.
4163         Fixes #56442.
4164
4165 2004-04-08  Martin Baulig  <martin@ximian.com>
4166
4167         Merged latest changes into gmcs.  Please keep this comment in
4168         here, it makes it easier for me to see what changed in MCS since
4169         the last time I merged.
4170
4171 2004-04-16  Raja R Harinath  <rharinath@novell.com>
4172
4173         * class.cs (TypeContainer.AddIndexer): Use
4174         'ExplicitInterfaceName' to determine if interface name was
4175         explicitly specified.  'InterfaceType' is not initialized at this time.
4176         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
4177         Indexers array is already in the required order.  Initialize
4178         'IndexerName' only if there are normal indexers.
4179         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
4180         (TypeContainer.Emit): Emit DefaultMember attribute only if
4181         IndexerName is initialized.
4182         Fixes #56300.
4183
4184 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
4185
4186         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
4187         Fixes #57007
4188
4189 2004-04-15  Raja R Harinath  <rharinath@novell.com>
4190
4191         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
4192         attributes.
4193         Fix for #56456.
4194
4195         * attribute.cs (Attribute.Resolve): Check for duplicate named
4196         attributes.
4197         Fix for #56463.
4198
4199 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
4200
4201         * iterators.cs (MarkYield): track whether we are in an exception,
4202         and generate code accordingly.  Use a temporary value to store the
4203         result for our state.
4204
4205         I had ignored a bit the interaction of try/catch with iterators
4206         since their behavior was not entirely obvious, but now it is
4207         possible to verify that our behavior is the same as MS .NET 2.0
4208
4209         Fixes 54814
4210
4211 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
4212
4213         * iterators.cs: Avoid creating temporaries if there is no work to
4214         do. 
4215
4216         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
4217         Enumerations, use TypeManager.EnumToUnderlying and call
4218         recursively. 
4219
4220         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
4221         bug #57013
4222
4223         (This.Emit): Use EmitContext.EmitThis to emit our
4224         instance variable.
4225
4226         (This.EmitAssign): Ditto.
4227
4228         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
4229         codepaths, we will move all the functionality into
4230         Mono.CSharp.This 
4231
4232         (FieldExpr.EmitAssign): Ditto.
4233
4234         This fixes several hidden bugs that I uncovered while doing a code
4235         review of this today.
4236
4237         * codegen.cs (EmitThis): reworked so the semantics are more clear
4238         and also support value types "this" instances.
4239
4240         * iterators.cs: Changed so that for iterators in value types, we
4241         do not pass the value type as a parameter.  
4242
4243         Initialization of the enumerator helpers is now done in the caller
4244         instead of passing the parameters to the constructors and having
4245         the constructor set the fields.
4246
4247         The fields have now `assembly' visibility instead of private.
4248
4249 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
4250
4251         * expression.cs (Argument.Resolve): Check if fields passed as ref
4252         or out are contained in a MarshalByRefObject.
4253
4254         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
4255         another compiler type.
4256
4257 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
4258
4259         * class.cs (Indexer.Define): use the new name checking method.
4260         Also, return false on an error.
4261         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
4262         (is_identifier_[start/part]_character): make static.
4263
4264 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
4265
4266         * expression.cs (Binary.ResolveOperator): Do no append strings
4267         twice: since we can be invoked more than once (array evaluation)
4268         on the same concatenation, take care of this here.  Based on a fix
4269         from Ben (bug #56454)
4270
4271 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
4272
4273         * codegen.cs: Fix another case where CS1548 must be reported (when 
4274         delay-sign isn't specified and no private is available #56564). Fix
4275         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
4276         error when MCS is used on the MS runtime and we need to delay-sign 
4277         (which seems unsupported by AssemblyBuilder - see #56621).
4278
4279 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
4280
4281         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
4282         (TypeManager.ComputeNamespaces): Faster implementation for
4283         Microsoft runtime.
4284
4285         * compiler.csproj: Updated AssemblyName to mcs.
4286
4287 2004-05-11  Jackson Harper  <jackson@ximian.com>
4288
4289         * Makefile: Preserve MONO_PATH
4290         
4291 2004-05-11  Jackson Harper  <jackson@ximian.com>
4292
4293         * Makefile: Use mono and mcs to build gmcs
4294         
4295 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
4296
4297         * codegen.cs: Add patch from Robert Shade
4298         <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
4299         sync with mcs.
4300
4301 2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
4302
4303         * CryptoConvert.cs: Updated to latest version. Fix issue with 
4304         incomplete key pairs (#57941).
4305
4306 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
4307
4308         * codegen.cs: Fix another case where CS1548 must be reported (when 
4309         delay-sign isn't specified and no private is available #56564). Fix
4310         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
4311         error when MCS is used on the MS runtime and we need to delay-sign 
4312         (which seems unsupported by AssemblyBuilder - see #56621).
4313
4314 2004-04-29  Jackson Harper  <jackson@ximian.com>
4315
4316         * Makefile: Set MONO_PATH to use the bootstrap corlib
4317         * driver.cs: Check the GAC for referenced assemblies.
4318                 
4319 2004-04-29  Martin Baulig  <martin@ximian.com>
4320
4321         * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
4322
4323 2004-04-07  Martin Baulig  <martin@ximian.com>
4324
4325         * expression.cs (Binary.ResolveOperator): Added special case for
4326         Equality/Inequality between a type parameter and a null literal.
4327
4328 2004-04-07  Martin Baulig  <martin@ximian.com>
4329
4330         * convert.cs: Check null literal -> type parameter conversions.
4331
4332 2004-04-07  Martin Baulig  <martin@ximian.com>
4333
4334         * generic.cs (ConstructedType.CheckConstraints): Enforce the
4335         `class' and `struct' constraints.
4336
4337 2004-04-07  Martin Baulig  <martin@ximian.com>
4338
4339         * generic.cs (SpecialConstraint): New public enum.
4340         (Constraints.Resolve): Added support for the `class' and `struct'
4341         constraints.
4342
4343         * cs-parser.jay (type_parameter_constraint): Added support for the
4344         `class' and `struct' constraints.
4345
4346 2004-04-07  Martin Baulig  <martin@ximian.com>
4347
4348         * support.cs (GenericConstraints): Replaced `Types' by
4349         `ClassConstraint' and `InterfaceConstraints'; added
4350         `HasClassConstraint'.   
4351
4352 2004-04-07  Martin Baulig  <martin@ximian.com>
4353
4354         * generic.cs
4355         (Constraints.InterfaceConstraints): New public property.
4356         (Constraints.Types): Make this property public
4357         (TypeParameter): Implement IMemberContainer.
4358         (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
4359         instead of a TypeBuilder/MethodBuilder; pass the interface
4360         constraints to TypeManager.AddTypeParameter().
4361         (TypeParameter.DefineType): Just take an EmitContext and no
4362         TypeBuilder/MethodBuilder.  Use the new public API.
4363
4364         * typemanager.cs (TypeManager.AddTypeParameter): Added
4365         `TypeExpr[]' argument; add the interfaces to the
4366         `builder_to_ifaces' hash.
4367         (TypeManager.LookupMemberContainer): For
4368         GenericTypeParameterBuilders, get the TypeParameter from the
4369         `builder_to_type_param'.
4370         (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
4371         the TypeParameter and call FindMembers on it.
4372
4373 2004-04-07  Martin Baulig  <martin@ximian.com>
4374
4375         * class.cs
4376         (MethodCore.GenericMethod): Moved this field here from Method.
4377         (MethodCore.IsDuplicateImplementation): Take the number of type
4378         parameters into account if we're a generic method.
4379
4380         * expression.cs (Invocation.InferTypeArguments): Don't return true
4381         if `arguments' is null; we still need to check whether we actually
4382         don't need to infer anything in this case.
4383         (MemberAccess): Merged the functionality from GenericMemberAccess
4384         into this class.
4385
4386         * generic.cs (GenericMemberAccess): Removed.
4387
4388 2004-04-05  Martin Baulig  <martin@ximian.com>
4389
4390         * decl.cs (MemberCore): For generic classes, interfaces and
4391         structs, `Name' now includes the number of type parameters
4392         ("Stack!1.Node!1").
4393         (DeclSpace.FindType): Removed the `num_type_args' argument; we now
4394         encode the number of type arguments in the type name.
4395
4396         * expression.cs (Expression.MemberLookup): Removed the
4397         `num_type_args' argument; we now encode the number of type
4398         arguments in the type name.
4399
4400         * ecore.cs (SimpleName): Encode the number of type arguments in
4401         the type name itself.
4402
4403         * generic.cs (ConstructedType): Likewise.
4404
4405         * tree.cs (Tree.RecordDecl): Take a `string' instead of a
4406         `MemberName'; we now include the number of type parameters in the
4407         type name.
4408
4409         * typemanager.cs (TypeManager.CheckGeneric): Removed.
4410         (TypeManager.MemberLookup): Removed the
4411         `num_type_args' argument; we now encode the number of type
4412         arguments in the type name.     
4413
4414 2004-04-03  Martin Baulig  <martin@ximian.com>
4415
4416         * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
4417         (MemberCore.MemberName): Moved here from MemberBase.
4418         (DeclSpace.SetParameterInfo): Just take the constraints as an
4419         ArrayList; we already have the type parameters in our
4420         `MemberName'; also do the CS0080 reporting here.
4421
4422         * cs-parser.jay (struct_declaration): Use `member_name' instead of
4423         `IDENTIFIER opt_type_parameter_list'; when constructing our
4424         `MemberName', it'll already include our type parameters.
4425         (class_declaration, interface_declaration): Likewise.
4426         (delegate_declaration): Likewise.
4427         (MakeName): Take a MemberName and return a MemberName.
4428         The following two changes are required to avoid shift/reduce conflicts:
4429         (member_name): Don't include a TypeName anymore; ie. this is now
4430         just 'IDENTIFIER opt_type_parameter_list'.
4431         (property_declaration, event_declaration): Use a
4432         `namespace_or_type_name' instead of a `member_name'.            
4433
4434 2004-04-03  Martin Baulig  <martin@ximian.com>
4435
4436         * decl.cs (MemberName): Renamed to `TypeName' and created a new
4437         `MemberName' class.
4438         (TypeName): Formerly known as MemberName.
4439
4440         * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
4441         instead of a `MemberName'.
4442
4443         * cs-parser.jay (namespace_or_type_name): Create a TypeName.
4444         (member_name): New rule; create a MemberName.
4445
4446 2004-04-02  Martin Baulig  <martin@ximian.com>
4447
4448         * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
4449         (CS0305 and CS0308).
4450
4451 2004-04-02  Martin Baulig  <martin@ximian.com>
4452
4453         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
4454         support for nested types.
4455
4456 2004-04-02  Martin Baulig  <martin@ximian.com>
4457
4458         * ecore.cs (IAlias): New public interface.
4459         (TypeExpr, TypeExpression): Implement IAlias.
4460         (TypeAliasExpression): New public class.
4461
4462         * namespace.cs (Namespace): Implement IAlias.
4463         (Namespace.Lookup): Return an IAlias instead on an object.
4464         (Namespace.DefineName): Take an IAlias instead of an object.
4465         (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
4466         an object.
4467         (NamespaceEntry.UsingAlias): Take a Membername instead of an
4468         Expression.
4469         (NamespaceEntry.LookupAlias): Return an IAlias instead on an
4470         object.
4471         (NamespaceEntry.Lookup): Likewise.
4472
4473         * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
4474         instead of a Type.      
4475
4476         * decl.cs (DeclSpace): Implement IAlias.
4477         (DeclSpace.LookupAlias): Return an IAlias instead of a string.
4478
4479         * generic.cs (ConstructedType): Improved error checking.
4480
4481 2004-04-02  Martin Baulig  <martin@ximian.com>
4482
4483         * convert.cs: Added type parameter conversions.
4484
4485         * ecore.cs
4486         (UnboxCast.Emit): Emit an `unbox.any' for type params.
4487         (ClassCast.Emit): If the source type is a type parameter, box it.
4488         If the target type is a type parameter, emit an `unbox.any'
4489         instead of a `classcast'.1      
4490
4491 2004-04-01  Martin Baulig  <martin@ximian.com>
4492
4493         * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
4494
4495 2004-04-01  Martin Baulig  <martin@ximian.com>
4496
4497         * generic.cs (ConstructedType.CheckConstraints): Use
4498         Convert.ImplicitStandardConversionExists(); user-defined implicit
4499         conversions are not allowed according to the spec.
4500
4501 2004-03-30  Martin Baulig  <martin@ximian.com>
4502
4503         * expression.cs (New): Added support for type parameters.
4504
4505         * typemanager.cs
4506         (TypeManager.activator_type): New public static field.
4507         (TypeManager.activator_create_instance): Likewise.
4508
4509 2004-03-30  Martin Baulig  <martin@ximian.com>
4510
4511         * typemanager.cs (TypeManager.HasConstructorConstraint): New
4512         public method.
4513
4514 2004-03-30  Martin Baulig  <martin@ximian.com>
4515
4516         * generic.cs (ConstructedType.CheckConstraints): Actually follow
4517         the spec here: the argument type must be convertible to the
4518         constraints.
4519
4520 2004-03-30  Martin Baulig  <martin@ximian.com>
4521
4522         * generic.cs
4523         (TypeParameter.Define, TypeParameter.DefineMethod): Call
4524         TypeManager.AddTypeParameter().
4525         (ConstructedType.CheckConstraints): Re-enable this and actually
4526         check whether we have a constructor constraint.
4527
4528         * typemanager.cs
4529         (TypeManager.builder_to_type_param): New static field.
4530         (TypeManager.AddTypeParameter): New static method.
4531         (TypeManager.LookupTypeParameter): New public method.
4532
4533 2004-03-30  Martin Baulig  <martin@ximian.com>
4534
4535         * generic.cs (TypeParameter.DefineType): Return a boolean and use
4536         the new API to actually define the constructor constraint.
4537
4538         * typemanager.cs
4539         (TypeManager.new_constraint_attr_type): New static field.
4540         (TypeManager.InitCoreTypes): Initialize it.
4541
4542 2004-03-30  Martin Baulig  <martin@ximian.com>
4543
4544         * generic.cs (Constraints): Completed error checking, use correct
4545         error numbers.
4546
4547 2004-03-29  Martin Baulig  <martin@ximian.com>
4548
4549         * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
4550
4551         * expression.cs (Invocation.InferTypeArguments): Added overloaded
4552         public version which takes a `ParameterData pd' instead of an
4553         `ArrayList args'.
4554
4555 2004-03-29  Martin Baulig  <martin@ximian.com>
4556
4557         * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
4558         not a MethodInfo.       
4559
4560 2004-03-29  Martin Baulig  <martin@ximian.com>
4561
4562         * expression.cs (Argument.ResolveMethodGroup): If we're a
4563         ConstructedType, call GetMemberAccess() on it.  
4564
4565 2004-03-29  Martin Baulig  <martin@ximian.com>
4566
4567         * class.cs (MethodBase.CheckGenericOverride): New abstract method.
4568         (MethodCore.CheckGenericOverride): When overriding a generic
4569         method, check whether the constraints match.
4570
4571         * support.cs (GenericConstraints): New public interface.
4572         (ParameterData.GenericConstraints): New public method.
4573
4574         * parameter.cs (Parameter.Resolve): Check whether we're a generic
4575         method parameter and compute our constraints if appropriate.
4576         (Parameter.GenericConstraints): New public property.
4577
4578         * generic.cs (Constraints): Implement GenericConstraints.
4579
4580 2004-03-29  Martin Baulig  <martin@ximian.com>
4581
4582         * decl.cs (MemberCache.FindMemberToOverride): Use
4583         `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
4584
4585 2004-03-29  Martin Baulig  <martin@ximian.com>
4586
4587         * generic.cs (GenericMethod.Define): Resolve our type parameters.
4588
4589 2004-03-29  Martin Baulig  <martin@ximian.com>
4590
4591         * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
4592         not allowed on non-generic declarations").
4593
4594 2004-03-29  Martin Baulig  <martin@ximian.com>
4595
4596         * expression.cs (Invocation.InferTypeArguments): Added overloaded
4597         public version of this method.
4598
4599         * class.cs (MethodCore.IsDuplicateImplementation): Use
4600         Invocation.InferTypeArguments() to check this.
4601
4602 2004-03-29  Martin Baulig  <martin@ximian.com>
4603
4604         * convert.cs: Use TypeManager.IsDelegateType() instead of
4605         comparing types correctly.
4606
4607 2004-03-29  Martin Baulig  <martin@ximian.com>
4608
4609         * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
4610         types directly to make it work for generic instances.
4611
4612         * typemanager.cs (TypeManager.IsSubclassOf): New static method.
4613
4614 2004-03-29  Martin Baulig  <martin@ximian.com>
4615
4616         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
4617         support for arrays.     
4618
4619 2004-03-24  Martin Baulig  <martin@ximian.com>
4620
4621         * decl.cs (DeclSpace.FindType): Also use
4622         TypeManager.CheckGeneric() for types from the using clauses.
4623
4624 2004-03-23  Martin Baulig  <martin@ximian.com>
4625
4626         * expression.cs (Invocation.OverloadResolve): Added `bool
4627         may_fail' argument and use it instead of the Location.IsNull() hack.
4628
4629 2004-03-23  Martin Baulig  <martin@ximian.com>
4630
4631         * expression.cs (Invocation.InferType): Use correct type inference
4632         rules here.     
4633
4634 2004-03-23  Martin Baulig  <martin@ximian.com>
4635
4636         * ecore.cs (MethodGroupExpr.Name): Use
4637         TypeManager.CSharpSignature() instead of just the name.
4638
4639         * expression.cs (Invocation.OverloadResolve): Provide better error
4640         reporting.
4641         (Invocation.DoResolve): OverloadResolve() never returns null
4642         without reporting an error, so removed the error -6 reporting here.
4643
4644 2004-03-23  Martin Baulig  <martin@ximian.com>
4645
4646         * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
4647         generic methods.
4648
4649         * cs-parser.jay (delegate_declaration): Support generic delegates.
4650
4651         * delegate.cs: Support generic delegates.
4652
4653 2004-03-22  Martin Baulig  <martin@ximian.com>
4654
4655         * expression.cs (Invocation.InferParamsTypeArguments): New static
4656         method; does type inference for params arguments.
4657
4658 2004-03-21  Martin Baulig  <martin@ximian.com>
4659
4660         * typemanager.cs (TypeManager.IsGenericMethod): New public static
4661         method; checks whether a method is a generic method.    
4662
4663         * expression.cs (Invocation.InferTypeArguments): New static method;
4664         infer type arguments for generic method invocation.
4665
4666         * ecore.cs (MethodGroupExpr.HasTypeArguments): New public
4667         property; we set this to true if we're resolving a generic method
4668         invocation and the user specified type arguments, ie. we're not
4669         doing type inference.
4670
4671 2004-03-20  Martin Baulig  <martin@ximian.com>
4672
4673         * class.cs (MethodData.DeclaringType): New public property.
4674         (MethodData.Define): Set DeclaringType here.
4675         (Operator.Define): Use OperatorMethod.MethodData.DeclaringType
4676         instead of OperatorMethodBuilder.DeclaringType.
4677
4678 2004-03-20  Martin Baulig  <martin@ximian.com>
4679
4680         * cs-tokenizer.cs (xtoken): Return a special
4681         Token.DEFAULT_OPEN_PARENS for "`default' followed by open parens".
4682
4683         * cs-parser.jay (default_value_expression): Switch to the new
4684         syntax (14.5.13).
4685
4686 2004-03-19  Martin Baulig  <martin@ximian.com>
4687
4688         * decl.cs (MemberName): New class.  We use this to "construct"
4689         namespace_or_type_name's.
4690
4691         * generics.cs (TypeArguments.GetDeclarations): New public method;
4692         returns the type arguments as a string[] and reports a CS0081 if
4693         one of them is not an identifier.
4694
4695         * class.cs (MemberBase): The .ctor now takes the name as a
4696         MemberName instead of a string.
4697         (MemberBase.ExplicitInterfaceName): Changed type from string to
4698         Expression.
4699         (MemberBase.DoDefine): If we're an explicit implementation, the
4700         InterfaceType may be a generic instance.
4701
4702         * cs-parser.jay (namespace_or_type_name): Return a MemberName.
4703         (namespace_name): Call MemberName.GetName () to transform the
4704         MemberName into a string and ensure we don't have any type
4705         arguments.
4706         (type_name): Call MemberName.GetTypeExpression() to transfrom the
4707         MemberName into an expression.
4708         (method_header): Use namespace_or_type_name instead of member_name.     
4709
4710 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
4711
4712         * rootcontext.cs: Add new types to the boot resolution.
4713
4714         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
4715         MulticastDelegate is not allowed.
4716
4717         * typemanager.cs: Add new types to lookup: System.TypedReference
4718         and ArgIterator.
4719
4720         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
4721         check for TypedReference or ArgIterator, they are not allowed. 
4722
4723         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
4724         makes us properly catch 1510 in some conditions (see bug 56016 for
4725         details). 
4726
4727 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
4728
4729         * CryptoConvert.cs: update from corlib version
4730         with endian fixes.
4731
4732 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
4733
4734         * class.cs (Indexer.Define): Check indexername declaration
4735
4736 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
4737
4738         * attribute.cs (IsClsCompliant): Fixed problem with handling
4739         all three states (compliant, not-compliant, undetected).
4740
4741 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
4742
4743         * attribute.cs (Attribute): Location is now public.
4744         (Resolve): Store resolved arguments (pos_values) in attribute class.
4745         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
4746         (GetClsCompliantAttributeValue): New method that gets
4747         CLSCompliantAttribute value.
4748         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
4749         if exists else null.
4750         (AttributeTester): New class for CLS-Compliant verification routines.
4751
4752         * class.cs (Emit): Add CLS-Compliant verification.
4753         (Method.GetSignatureForError): Implemented.
4754         (Constructor.GetSignatureForError): Implemented
4755         (Constructor.HasCompliantArgs): Returns if constructor has
4756         CLS-Compliant arguments.
4757         (Constructor.Emit): Override.
4758         (Construcor.IsIdentifierClsCompliant): New method; For constructors
4759         is needed to test only parameters.
4760         (FieldBase.GetSignatureForError): Implemented.
4761         (TypeContainer): New member for storing base interfaces.
4762         (TypeContainer.FindMembers): Search in base interfaces too.
4763
4764         * codegen.cs (GetClsComplianceAttribute): New method that gets
4765         assembly or module CLSCompliantAttribute value.
4766         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
4767         for assembly.
4768         (ModuleClass.Emit): Add error 3012 test.
4769
4770         * const.cs (Emit): Override and call base for CLS-Compliant tests.
4771
4772         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
4773         state for all decl types.
4774         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
4775         if CLS-Compliant tests are required.
4776         (IsClsCompliaceRequired): New method. Analyze whether code
4777         must be CLS-Compliant.
4778         (IsExposedFromAssembly): New method. Returns true when MemberCore
4779         is exposed from assembly.
4780         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
4781         value or gets cached value.
4782         (HasClsCompliantAttribute): New method. Returns true if MemberCore
4783         is explicitly marked with CLSCompliantAttribute.
4784         (IsIdentifierClsCompliant): New abstract method. This method is
4785         used to testing error 3005.
4786         (IsIdentifierAndParamClsCompliant): New method. Common helper method
4787         for identifier and parameters CLS-Compliant testing.
4788         (VerifyClsCompliance): New method. The main virtual method for
4789         CLS-Compliant verifications.
4790         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
4791         null. I don't know why is null (too many public members !).
4792         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
4793         and get value of first CLSCompliantAttribute that found.
4794
4795         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
4796         (VerifyClsCompliance): Override and add extra tests.
4797
4798         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
4799         clscheck- disable CLS-Compliant verification event if assembly is has
4800         CLSCompliantAttribute(true).
4801
4802         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
4803         ApllyAttribute is now called in emit section as in the other cases.
4804         Possible future Emit integration.
4805         (IsIdentifierClsCompliant): New override.
4806         (VerifyClsCompliance): New override.
4807         (GetEnumeratorName): Returns full enum name.
4808
4809         * parameter.cs (GetSignatureForError): Implemented.
4810
4811         * report.cs (WarningData): New struct for Warning message information.
4812         (LocationOfPreviousError): New method.
4813         (Warning): New method. Reports warning based on the warning table.
4814         (Error_T): New method. Reports error based on the error table.
4815
4816         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
4817         verifications are done here.
4818
4819         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
4820
4821         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
4822         CLSCompliantAttribute.
4823         (all_imported_types): New member holds all imported types from other
4824         assemblies.
4825         (LoadAllImportedTypes): New method fills static table with exported types
4826         from all referenced assemblies.
4827         (Modules): New property returns all assembly modules.
4828
4829 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
4830
4831         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
4832         throwing a parser error.
4833
4834         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
4835         which removes the hardcoded get_/set_ prefixes for properties, as
4836         IL allows for the properties to be named something else.  
4837
4838         Bug #56013
4839
4840         * expression.cs: Do not override operand before we know if it is
4841         non-null.  Fix 56207
4842
4843 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4844
4845         * typemanager.cs: support for pinned variables.
4846
4847 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4848
4849         * decl.cs, typemanager.cs: Avoid using an arraylist
4850         as a buffer if there is only one result set.
4851
4852 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4853
4854         * expression.cs: Make sure you cant call a static method
4855         with an instance expression, bug #56174.
4856
4857 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
4858
4859         * class.cs (IsDuplicateImplementation): Improve error reporting to
4860         flag 663 (method only differs in parameter modifier).
4861
4862         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
4863         in preprocessor directives.
4864
4865         * location.cs (LookupFile): Allow for the empty path.
4866
4867         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
4868         better approach for some of that patch, but its failing with the
4869         CharSet enumeration.  For now try/catch will do.
4870
4871         * typemanager.cs: Do not crash if a struct does not have fields.
4872         Fixes 56150.
4873
4874 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4875
4876         * expression.cs: cs0213, cant fix a fixed expression.
4877         fixes 50231.
4878
4879 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4880
4881         * cs-parser.jay: detect invalid embeded statements gracefully.
4882         bug #51113.
4883
4884 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4885
4886         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
4887         As a regex:
4888         s/
4889         the invocation type may not be a subclass of the tye of the item/
4890         The type of the item must be a subclass of the invocation item.
4891         /g
4892
4893         Fixes bug #50820.
4894
4895 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
4896
4897         * attribute.cs: Added methods to get a string and a bool from an
4898         attribute. Required to information from AssemblyKeyFileAttribute,
4899         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
4900         * codegen.cs: Modified AssemblyName creation to include support for
4901         strongnames. Catch additional exceptions to report them as CS1548.
4902         * compiler.csproj: Updated include CryptoConvert.cs.
4903         * compiler.csproj.user: Removed file - user specific configuration.
4904         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
4905         Mono.Security assembly. The original class is maintained and tested in
4906         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
4907         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
4908         like CSC 8.0 (C# v2) supports.
4909         * Makefile: Added CryptoConvert.cs to mcs sources.
4910         * rootcontext.cs: Added new options for strongnames.
4911
4912 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
4913
4914         * driver.cs: For --expect-error, report error code `2'
4915         if the program compiled with no errors, error code `1' if
4916         it compiled with an error other than the one expected.
4917
4918 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
4919
4920         * compiler.csproj: Updated for Visual Studio .NET 2003.
4921         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
4922         * compiler.sln: Updated for Visual Studio .NET 2003.
4923
4924 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
4925
4926         * expression.cs: Fix bug #47234. We basically need to apply the
4927         rule that we prefer the conversion of null to a reference type
4928         when faced with a conversion to 'object' (csc behaviour).
4929
4930 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4931
4932         * statement.cs: Shorter form for foreach, eliminates
4933         a local variable. r=Martin.
4934
4935 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4936
4937         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
4938         checks if we can use brtrue/brfalse to test for 0.
4939         * expression.cs: use the above in the test for using brtrue/brfalse.
4940         cleanup code a bit.
4941
4942 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4943
4944         * expression.cs: Rewrite string concat stuff. Benefits:
4945
4946         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
4947         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
4948         rather than a concat chain.
4949
4950         * typemanager.cs: Add lookups for more concat overloads.
4951
4952 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4953
4954         * expression.cs: Emit shorter il code for array init.
4955
4956         newarr
4957         dup
4958         // set 1
4959
4960         // set 2
4961
4962         newarr
4963         stloc.x
4964
4965         ldloc.x
4966         // set 1
4967
4968         ldloc.x
4969         // set 2
4970
4971 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
4972
4973         * statement.cs: Before, two switch blocks would be merged if the
4974         total size of the blocks (end_item - begin_item + 1) was less than
4975         two times the combined sizes of the blocks.
4976
4977         Now, it will only merge if after the merge at least half of the
4978         slots are filled.
4979
4980         fixes 55885.
4981
4982 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
4983
4984         * class.cs : csc build fix for GetMethods(). See bug #52503.
4985
4986 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
4987
4988         * expression.cs: Make sure fp comparisons work with NaN.
4989         This fixes bug #54303. Mig approved this patch a long
4990         time ago, but we were not able to test b/c the runtime
4991         had a related bug.
4992
4993 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
4994
4995         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
4996
4997 2004-03-19  Martin Baulig  <martin@ximian.com>
4998
4999         * class.cs (MemberCore.IsDuplicateImplementation): Check whether
5000         two overloads may unify for some type parameter substitutions and
5001         report a CS0408 if appropriate.
5002
5003 2004-03-19  Martin Baulig  <martin@ximian.com>
5004
5005         * class.cs (MemberCore.IsDuplicateImplementation): Report the
5006         error here and not in our caller.
5007
5008 2004-03-19  Martin Baulig  <martin@ximian.com>
5009
5010         * interface.cs: Completely killed this file.
5011         (Interface): We're now a TypeContainer and live in class.cs.
5012
5013         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
5014         argument; we're now also called for interfaces.
5015         (TypeContainer.DefineMembers): Allow this method being called
5016         multiple times.
5017         (TypeContainer.GetMethods): New public method; formerly known as
5018         Interface.GetMethod().  This is used by PendingImplementation.
5019         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
5020         it's now private and non-static.
5021         (Interface): Moved this here; it's now implemented similar to
5022         Class and Struct.
5023         (Method, Property, Event, Indexer): Added `bool is_interface'
5024         argument to their .ctor's.
5025         (MemberBase.IsInterface): New public field.
5026
5027         * cs-parser.jay: Create normal Method, Property, Event, Indexer
5028         instances instead of InterfaceMethod, InterfaceProperty, etc.
5029         (opt_interface_base): Removed; we now use `opt_class_base' instead.
5030         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
5031
5032 2004-03-19  Martin Baulig  <martin@ximian.com>
5033
5034         * class.cs (MethodCore.IsDuplicateImplementation): New private
5035         method which does the CS0111 checking.
5036         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
5037         Use IsDuplicateImplementation().
5038
5039 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
5040
5041         * decl.cs (FindMemberToOverride): New method to find the correct
5042         method or property to override in the base class.
5043         * class.cs
5044             - Make Method/Property use the above method to find the
5045               version in the base class.
5046             - Remove the InheritableMemberSignatureCompare as it is now
5047               dead code.
5048
5049         This patch makes large code bases much faster to compile, as it is
5050         O(n) rather than O(n^2) to do this validation.
5051
5052         Also, it fixes bug 52458 which is that nested classes are not
5053         taken into account when finding the base class member.
5054
5055         Reviewed/Approved by Martin.
5056
5057 2004-03-17  Martin Baulig  <martin@ximian.com>
5058
5059         * expression.cs (MemberAccess.DoResolve): Take the parent's number
5060         of type arguments into account; use the `real_num_type_args'
5061         approach like in DoResolveAsTypeStep().
5062
5063         * generic.cs (GenericMemberAccess.DoResolve): Make this work for
5064         nested types.
5065
5066 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
5067
5068         * interface.cs: In all interface classes removed redundant
5069         member initialization.
5070
5071 2004-03-16  Martin Baulig  <martin@ximian.com>
5072
5073         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
5074
5075 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
5076
5077         * decl.cs (DefineTypeAndParents): New helper method to define a
5078         type's containers before the type itself is defined;  This is a
5079         bug exposed by the recent changes to Windows.Forms when an
5080         implemented interface was defined inside a class that had not been
5081         built yet.   
5082
5083         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
5084
5085         (Check): Loop correctly to report errors modifiers
5086         (UNSAFE was not in the loop, since it was the same as TOP).
5087
5088         * interface.cs: Every interface member now takes a ModFlags,
5089         instead of a "is_new" bool, which we set on the base MemberCore. 
5090
5091         Every place where we called "UnsafeOk" in the interface, now we
5092         call the proper member (InterfaceMethod.UnsafeOK) instead to get
5093         the unsafe settings from the member declaration instead of the
5094         container interface. 
5095
5096         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
5097
5098         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
5099         `set_indexer_name' to the pending bits (one per type).
5100
5101         We fixed a bug today that was picking the wrong method to
5102         override, since for properties the existing InterfaceMethod code
5103         basically ignored the method name.  Now we make sure that the
5104         method name is one of the valid indexer names.
5105
5106 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
5107  
5108         * support.cs (SeekableStreamReader): Keep track of stream byte
5109         positions and don't mix them with character offsets to the buffer.
5110
5111         Patch from Gustavo Giráldez
5112
5113 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
5114
5115         * interface.cs (InterfaceSetGetBase): Removed double member
5116         initialization, base class does it as well.
5117
5118 2004-03-13  Martin Baulig  <martin@ximian.com>
5119
5120         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
5121         when compiling corlib.
5122
5123 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
5124
5125         * convert.cs (ExplicitConversion): We were reporting an error on
5126         certain conversions (object_type source to a value type, when the
5127         expression was `null') before we had a chance to pass it through
5128         the user defined conversions.
5129
5130         * driver.cs: Replace / and \ in resource specifications to dots.
5131         Fixes 50752
5132
5133         * class.cs: Add check for duplicate operators.  Fixes 52477
5134
5135 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
5136
5137         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
5138         that are in the middle of the statements, not only at the end.
5139         Fixes #54987
5140
5141         * class.cs (TypeContainer.AddField): No longer set the
5142         `HaveStaticConstructor' flag, now we call it
5143         `UserDefineStaticConstructor' to diferentiate the slightly
5144         semantic difference.
5145
5146         The situation is that we were not adding BeforeFieldInit (from
5147         Modifiers.TypeAttr) to classes that could have it.
5148         BeforeFieldInit should be set to classes that have no static
5149         constructor. 
5150
5151         See:
5152
5153         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
5154
5155         And most importantly Zoltan's comment:
5156
5157         http://bugzilla.ximian.com/show_bug.cgi?id=44229
5158
5159         "I think beforefieldinit means 'it's ok to initialize the type sometime 
5160          before its static fields are used', i.e. initialization does not need
5161          to be triggered by the first access to the type. Setting this flag
5162          helps the JIT to compile better code, since it can run the static
5163          constructor at JIT time, and does not need to generate code to call it
5164          (possibly lots of times) at runtime. Unfortunately, mcs does not set
5165          this flag for lots of classes like String. 
5166          
5167          csc sets this flag if the type does not have an explicit static 
5168          constructor. The reasoning seems to be that if there are only static
5169          initalizers for a type, and no static constructor, then the programmer
5170          does not care when this initialization happens, so beforefieldinit
5171          can be used.
5172          
5173          This bug prevents the AOT compiler from being usable, since it 
5174          generates so many calls to mono_runtime_class_init that the AOT code
5175          is much slower than the JITted code. The JITted code is faster, 
5176          because it does not generate these calls if the vtable is type is
5177          already initialized, which is true in the majority of cases. But the
5178          AOT compiler can't do this."
5179
5180 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
5181
5182         * class.cs (MethodData.Emit): Refactor the code so symbolic
5183         information is generated for destructors;  For some reasons we
5184         were taking a code path that did not generate symbolic information
5185         before. 
5186
5187 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
5188
5189         * class.cs: Create a Constructor.CheckBase method that
5190         takes care of all validation type code. The method
5191         contains some code that was moved from Define.
5192
5193         It also includes new code that checks for duplicate ctors.
5194         This fixes bug #55148.
5195
5196 2004-03-09  Joshua Tauberer <tauberer@for.net>
5197
5198         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
5199         a { ... }-style array creation invokes EmitStaticInitializers
5200         which is not good for reference-type arrays.  String, decimal
5201         and now null constants (NullCast) are not counted toward
5202         static initializers.
5203
5204 2004-03-05  Martin Baulig  <martin@ximian.com>
5205
5206         * location.cs (SourceFile.HasLineDirective): New public field;
5207         specifies whether the file contains or is referenced by a "#line"
5208         directive.
5209         (Location.DefineSymbolDocuments): Ignore source files which
5210         either contain or are referenced by a "#line" directive.        
5211
5212 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
5213
5214         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
5215         direct access to our parent, so check the method inline there.
5216
5217 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
5218
5219         * expression.cs (Invocation.EmitCall): Miguel's last commit
5220         caused a regression. If you had:
5221
5222             T t = null;
5223             t.Foo ();
5224
5225         In Foo the implict this would be null.
5226
5227 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
5228
5229         * expression.cs (Invocation.EmitCall): If the method is not
5230         virtual, do not emit a CallVirt to it, use Call.
5231
5232         * typemanager.cs (GetFullNameSignature): Improve the method to
5233         cope with ".ctor" and replace it with the type name.
5234
5235         * class.cs (ConstructorInitializer.Resolve): Now the method takes
5236         as an argument the ConstructorBuilder where it is being defined,
5237         to catch the recursive constructor invocations.
5238
5239 2004-03-16  Martin Baulig  <martin@ximian.com>
5240
5241         * expression.cs (MemberAccess.DoResolve): If `expr' resolved to a
5242         ConstructedType, call ResolveType() on it to get the type rather
5243         than just using `expr.Type'.
5244
5245 2004-03-16  Martin Baulig  <martin@ximian.com>
5246
5247         * generics.cs (ConstructedType.GetMemberAccess): Take the
5248         EmitContext instead on the TypeExpr and use
5249         ec.TypeContainer.CurrentType/ec.ContainerType.
5250
5251 2004-03-16  Martin Baulig  <martin@ximian.com>
5252
5253         * ecore.cs (SimpleName.DoResolveAsTypeStep): Lookup type
5254         parameters before aliases.
5255
5256 2004-03-16  Martin Baulig  <martin@ximian.com>
5257
5258         * typemanager.cs (TypeManager.MayBecomeEqualGenericInstances):
5259         New oublic function; checks whether two generic instances may become
5260         equal under some instantiations (26.3.1).
5261
5262         * class.cs (TypeContainer.Define): Call
5263         TypeManager.MayBecomeEqualGenericInstances() and report CS0695 on
5264         error.
5265
5266 2004-03-16  Martin Baulig  <martin@ximian.com>
5267
5268         * class.cs (TypeContainer.GetClassBases): Moved
5269         Error_TypeParameterAsBase() here and also check whether the base
5270         class is not an attribute.
5271
5272 2004-03-16  Martin Baulig  <martin@ximian.com>
5273
5274         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
5275
5276 2004-03-16  Martin Baulig  <martin@ximian.com>
5277
5278         * class.cs (Error_TypeParameterAsBase): Use correct error number
5279         here (CS0689).  
5280
5281 2004-03-16  Martin Baulig  <martin@ximian.com>
5282
5283         * decl.cs (DeclSpace.ResolveTypeExpr): Added more error checking
5284         for generics.
5285
5286         * generics.cs (ConstructedType.DoResolveAsTypeStep): Added better
5287         error reporting.
5288
5289 2004-03-15  Martin Baulig  <martin@ximian.com>
5290
5291         * typemanager.cs (TypeManager.GetFullName): New public method.
5292         (TypeManager.MemberLookup): Added `int_num_type_arguments'
5293         argument; only return members with the correct number of type
5294         arguments.
5295         (TypeManager.CheckGeneric): Allow -1 to bypass the check.
5296         (TypeManager.FilterWithClosure): Call CheckGeneric() to check
5297         whether the number of type arguments matches.
5298
5299         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Allow `expr'
5300         not being a ConstructedType; we can now do "typeof (Foo.Bar<U>)".
5301
5302         * expression.cs (MemberAccess): Added public `NumTypeArguments'
5303         field; it's set by the protected .ctor when we're actually a
5304         GenericMemberAccess.
5305         (MemberAccess.ResolveAsTypeStep): Compute the total number of type
5306         arguments and pass it to MemberLookupFinal ().
5307
5308         * ecore.cs (Expression.MemberLookup): Added `int
5309         num_type_arguments' argument; only return members with the correct
5310         number of type arguments.
5311         (Expression.MemberLookupFailed): Check whether the MemberLookup
5312         failed because we did not have the correct number of type
5313         arguments; report CS0305 in this case.
5314
5315         * decl.cs (DeclSpace.ResolveTypeExpr): Don't report an error if
5316         `e.ResolveAsTypeTerminal()' already did so.
5317
5318 2004-03-15  Martin Baulig  <martin@ximian.com>
5319
5320         * ecore.cs (Expression.ResolveLValue): Allow e.type being null if
5321         we're a ConstructedType; in this case, the caller must report an
5322         error (for instance CS0131).
5323
5324         * generic.cs (TypeArguments): Added Location argument to the .ctor.
5325         (TypeArguments.Resolve): Actually report errors here.
5326
5327 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
5328
5329         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
5330         `set_indexer_name' to the pending bits (one per type).
5331
5332         We fixed a bug today that was picking the wrong method to
5333         override, since for properties the existing InterfaceMethod code
5334         basically ignored the method name.  Now we make sure that the
5335         method name is one of the valid indexer names.
5336
5337 2004-03-15  Martin Baulig  <martin@ximian.com>
5338
5339         * typemanager.cs (TypeManager.IndexerPropertyName): Added support
5340         for generic instances.
5341
5342 2004-03-13  Martin Baulig  <martin@ximian.com>
5343
5344         * class.cs (TypeContainer.DefineType): Call
5345         TypeManager.AddUserType() immediately after creating the
5346         TypeBuilder; pass all type parameters when creating the
5347         CurrentType.
5348
5349         * decl.cs (DeclSpace.FindNestedType): New public method.
5350         (DeclSpace.FindType): Added `int num_type_args' argument; only
5351         return types with the correct number of type parameters.
5352         (DeclSpace.CountTypeParams): New public property.
5353
5354         * ecore.cs (SimpleName.ctor): Added overloaded version which takes
5355         the number of type parameters; defaults to zero.
5356
5357         * generic.cs (TypeArguments.Count): New public property.
5358         (ConstructedType.DoResolveAsTypeStep): First call
5359         ds.FindNestedType() to find out whether we're nested in the
5360         current generic type; in this case, we inherit all type parameters
5361         from the current class.
5362
5363         * rootcontext.cs (RootContext.NamespaceLookup): Added `int
5364         num_type_args' argument.
5365         (RootContext.LookupType): Added overloaded version which takes the
5366         number of type arguments; only return types with the correct
5367         number of type arguments.
5368
5369         * typemanager.cs (TypeManager.CheckGeneric): New public function;
5370         checks whether `Type t' has `int num_type_args'.
5371
5372 2004-03-13  Martin Baulig  <martin@ximian.com>
5373
5374         * generic.cs (GenericMethod.DefineType): New method; calls
5375         DefineType() on all the type parameters.
5376
5377         * class.cs (MethodData.ctor): Added `GenericMethod generic' argument.
5378         (MethodData.Define): If we're a generic method, call
5379         GenericMethod.DefineType() to define the type parameters.       
5380
5381 2004-03-10  Martin Baulig  <martin@ximian.com>
5382
5383         * pending.cs (Pending.InterfaceMethod): Use TypeManager.IsEqual()
5384         instead of IsAssignableFrom.    
5385
5386 2004-03-10  Martin Baulig  <martin@ximian.com>
5387
5388         * ecore.cs (FieldExpr.ctor): Use TypeManager.TypeToCoreType().
5389
5390         * support.cs (ParameterData.HasArrayParameter): New property.
5391         (ReflectionParameters.ctor): Take a MethodBase instead of a
5392         ParameterInfo[].  If we have any type parameters, get the generic
5393         method definition and ask it whether we have variable arguments.
5394
5395 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
5396
5397         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
5398         routines to check if a type is an enumerable/enumerator allow
5399         classes that implement the IEnumerable or IEnumerator interfaces.
5400
5401         * class.cs (Property, Operator): Implement IIteratorContainer, and
5402         implement SetYields.
5403
5404         (Property.Define): Do the block swapping for get_methods in the
5405         context of iterators.   We need to check if Properties also
5406         include indexers or not.
5407
5408         (Operator): Assign the Block before invoking the
5409         OperatorMethod.Define, so we can trigger the Iterator code
5410         replacement. 
5411
5412         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
5413         Property and Operator classes are not created when we parse the
5414         declarator but until we have the block completed, so we use a
5415         singleton SimpleIteratorContainer.Simple to flag whether the
5416         SetYields has been invoked.
5417
5418         We propagate this setting then to the Property or the Operator to
5419         allow the `yield' to function.
5420
5421 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
5422
5423         * codegen.cs: Implemented attribute support for modules.
5424         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
5425         Assembly/Module functionality.
5426
5427         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
5428         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
5429         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
5430
5431 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
5432
5433         * interface.cs (FindMembers): The operation is performed on all base
5434         interfaces and not only on the first. It is required for future CLS Compliance patch.
5435
5436 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
5437
5438         * statement.cs, codegen.cs:
5439         This patch deals with patterns such as:
5440
5441         public class List : IEnumerable {
5442
5443                 public MyEnumerator GetEnumerator () {
5444                         return new MyEnumerator(this);
5445                 }
5446
5447                 IEnumerator IEnumerable.GetEnumerator () {
5448                         ...
5449                 }
5450                 
5451                 public struct MyEnumerator : IEnumerator {
5452                         ...
5453                 }
5454         }
5455
5456         Before, there were a few things we did wrong:
5457         1) we would emit callvirt on a struct, which is illegal
5458         2) we emited ldarg when we needed to emit ldarga
5459         3) we would mistakenly call the interface methods on an enumerator
5460         type that derived from IEnumerator and was in another assembly. For example:
5461
5462         public class MyEnumerator : IEnumerator
5463
5464         Would have the interface methods called, even if there were public impls of the
5465         method. In a struct, this lead to invalid IL code.
5466
5467 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
5468
5469         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
5470           renamed to Emit.
5471
5472         * delegate.cs (Define): Fixed crash when delegate type is undefined.
5473
5474 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
5475
5476         * cs-parser.jay: Fix small regression: we were not testing V2
5477         compiler features correctly.
5478
5479         * interface.cs: If the emit context is null, then create one
5480
5481 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
5482
5483         * decl.cs (GetSignatureForError): New virtual method to get full name
5484           for error messages.
5485
5486         * attribute.cs (IAttributeSupport): New interface for attribute setting.
5487           Now it is possible to rewrite ApplyAttributes method to be less if/else.
5488
5489         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
5490           Duplicated members and code in these classes has been removed.
5491           Better encapsulation in these classes.
5492
5493 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
5494
5495         * assign.cs (Assign.DoResolve): When dealing with compound
5496         assignments, there is a new rule in ECMA C# 2.4 (might have been
5497         there before, but it is documented here) that states that in:
5498
5499         a op= b;
5500
5501         If b is of type int, and the `op' is a shift-operator, then the
5502         above is evaluated as:
5503
5504         a = (int) a op b 
5505
5506         * expression.cs (Binary.ResolveOperator): Instead of testing for
5507         int/uint/long/ulong, try to implicitly convert to any of those
5508         types and use that in pointer arithmetic.
5509
5510         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
5511         method to print information for from the type, not from the
5512         null-method we were given.
5513
5514 2004-02-01  Duncan Mak  <duncan@ximian.com>
5515
5516         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
5517         parsing for cmd, fixes bug #53694.
5518
5519 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
5520
5521         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
5522         in the member name duplication tests. Property and operator name duplication
5523         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
5524
5525 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
5526
5527         * interface.cs (PopulateMethod): Fixed crash when interface method
5528         returns not existing type (error test cs0246-3.cs).
5529
5530 2004-02-02  Ravi Pratap M <ravi@ximian.com>
5531
5532         * cs-parser.jay (interface_accessors): Re-write actions to also
5533         store attributes attached to get and set methods. Fix spelling
5534         while at it.
5535
5536         (inteface_property_declaration): Modify accordingly.
5537
5538         (InterfaceAccessorInfo): New helper class to store information to pass
5539         around between rules that use interface_accessors.
5540
5541         * interface.cs (Emit): Apply attributes on the get and set
5542         accessors of properties and indexers too.
5543
5544         * attribute.cs (ApplyAttributes): Modify accordingly to use the
5545         right MethodBuilder when applying attributes to the get and set accessors.
5546
5547 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
5548
5549         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
5550
5551 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
5552
5553         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
5554
5555 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
5556
5557         * cs-parser.jay: Remove YIELD token, instead use the new grammar
5558         changes that treat `yield' specially when present before `break'
5559         or `return' tokens.
5560
5561         * cs-tokenizer.cs: yield is no longer a keyword.
5562
5563 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
5564
5565         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
5566         setting for default constructors.
5567         For default constructors are almost every time set wrong Modifier. The
5568         generated IL code has been alright. But inside mcs this values was
5569         wrong and this was reason why several of my CLS Compliance tests
5570         failed.
5571
5572 2004-02-27  Martin Baulig  <martin@ximian.com>
5573
5574         * generics.cs (ConstructedType.ResolveType): Make the nested type
5575         stuff actually work.
5576
5577 2004-02-25  Martin Baulig  <martin@ximian.com>
5578
5579         * decl.cs (DeclSpace.CurrentTypeParameters): New protected
5580         property; returns the type parameters just from the current type,
5581         ie. with the ones from outer classes.
5582         (DeclSpace.LookupGeneric): First search in the current class, then
5583         in outer classes.
5584         (DeclSpace.initialize_type_params): When hiding a type parameter
5585         from an outer class, put it into the `type_param_list' anyways.
5586
5587         * expression.cs (MemberAccess.expr): Made this field protected.
5588
5589         * class.cs (TypeContainer.Define): The `CurrentType' just contains
5590         the type parameters from the current class.
5591
5592         * generic.cs (ConstructedType.ResolveType): Support nested generic
5593         types by taking the type parameters which we inherit from outer
5594         classes into account.
5595         (GenericMemberAccess.ResolveAsTypeStep): Override this and added
5596         support for nested generic types.
5597
5598 2004-02-23  Martin Baulig  <martin@ximian.com>
5599
5600         * decl.cs (DeclSpace.IsGeneric): Make this a property instead of a
5601         field and check whether we're nested inside a generic type.
5602         (DeclSpace.ResolveType): If we're resolving to a generic type
5603         definition, create a ConstructedType and return its resolved type.
5604         (DeclSpace.initialize_type_params): New private method;
5605         initializes the `type_param_list' field from the type parameters
5606         from this and all enclosing classes.
5607         (DeclSpace.TypeParameters): Call initialize_type_params() unless
5608         we're already initialized.
5609
5610 2004-02-23  Martin Baulig  <martin@ximian.com>
5611
5612         * class.cs (Method.Define): Create the generic method before
5613         calling DoDefine().
5614         (Memberbase.DoDefine): Added DeclSpace argument (in addition to
5615         the TypeContainer one); we use this for generic methods.
5616
5617         * decl.cs (CheckAccessLevel): If we're a GenericMethod, use our
5618         parent's TypeBuilder.
5619
5620 2004-02-18  Martin Baulig  <martin@ximian.com>
5621
5622         * ecore.cs (FieldExpr.DoResolveLValue): Use TypeManager.IsEqual()
5623         to check for equality.
5624
5625 2004-02-05  Martin Baulig  <martin@ximian.com>
5626
5627         * ecore.cs (FieldExpr.DoResolveLValue): If we have an
5628         `ec.TypeContainer.CurrentType', use it instead of
5629         `ec.ContainerType' to check whether we're in the type's ctor.
5630
5631 2004-01-29  Martin Baulig  <martin@ximian.com>
5632
5633         * expression.cs (Invocation.DoResolve): If we're a
5634         `ConstructedType', then we're actually a generic method, so
5635         rewrite the expr as a GenericMemberAccess.
5636
5637         * cs-parser.jay (member_name): Don't use `namespace_or_type_name'
5638         here; manually parse it into a string.
5639
5640 2004-01-28  Martin Baulig  <martin@ximian.com>
5641
5642         * typemanager.cs (TypeManager.IsEqual): New static method.
5643         (TypeManager.FilterWithClosure): Call TypeManager.IsEqual() to
5644         check for equality instead of using `=='.
5645
5646 2004-01-26  Martin Baulig  <martin@ximian.com>
5647
5648         * decl.cs (DeclSpace.CurrentType): New public field.
5649
5650         * expression.cs (This.ResolveBase): If we have an
5651         `ec.TypeContainer.CurrentType', use it instead of
5652         `ec.ContainerType'.
5653
5654         * class.cs (TypeContainer.DefineType): If we're a generic type,
5655         create the `CurrentType' (unresolved).
5656         (TypeContainer.GenericType): New private field.
5657         (TypeContainer.DefineMembers): If we have a `CurrentType', resolve
5658         it and store it in `GenericType' before creating the MemberCache.
5659         (TypeContainer.GetMembers): If we have a `GenericType', call
5660         TypeManager.FindMembers() on it.
5661
5662         * interface.cs (Interface.GenericType): New private field.
5663         (Interface.DefineType): If we're a generic type, create the
5664         `CurrentType' (unresolved).
5665         (Interface.DefineMembers): If we have a `CurrentType', resolve it
5666         and store it in `GenericType' before creating the MemberCache.
5667         (Interface.GetMembers): If we have a `GenericType', call
5668         TypeManager.FindMembers() on it.
5669
5670 2004-01-22  Martin Baulig  <martin@ximian.com>
5671
5672         * cs-parser.jay (namespace_or_type_name): Return an Expression,
5673         not a QualifiedIdentifier.  This is what `type_name_expression'
5674         was previously doing.
5675         (type_name_expression): Removed; the code is now in
5676         `namespace_or_type_name'.
5677         (qualified_identifier): Removed, use `namespace_or_type_name'
5678         instead.
5679         (QualifiedIdentifier): Removed this class.      
5680
5681 2004-01-22  Martin Baulig  <martin@ximian.com>
5682
5683         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
5684         not a string as alias name.
5685
5686 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
5687
5688         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
5689         #52730 bug, and instead compute correctly the need to use a
5690         temporary variable when requesting an address based on the
5691         static/instace modified of the field and the constructor.
5692  
5693 2004-01-21  Martin Baulig  <martin@ximian.com>
5694
5695         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
5696         class and namespace before looking up aliases.  Fixes #52517.
5697
5698 2004-01-21  Martin Baulig  <martin@ximian.com>
5699
5700         * flowanalysis.cs (UsageVector.Merge): Allow variables being
5701         assinged in a 'try'; fixes exception4.cs.
5702
5703 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5704         * class.cs : Implemented parameter-less constructor for TypeContainer
5705
5706         * decl.cs: Attributes are now stored here. New property OptAttributes
5707
5708         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
5709
5710         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
5711
5712 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5713
5714         * typemanager.cs (CSharpSignature): Now reports also inner class name.
5715           (CSharpSignature): New method for indexer and property signature.
5716
5717 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5718
5719         * pending.cs (IsVirtualFilter): Faster implementation.
5720
5721 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5722
5723         * typemanager.cs: Avoid inclusion of same assembly more than once.
5724
5725 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5726
5727         * cs-parser.jay: Fixed problem where the last assembly attribute
5728           has been applied also to following declaration (class, struct, etc.)
5729           
5730 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5731
5732         * class.cs: Added error CS0538, CS0539 reporting.
5733         Fixed crash on Microsoft runtime when field type is void.
5734
5735         * cs-parser.jay: Added error CS0537 reporting.
5736
5737         * pending.cs: Added error CS0535 reporting.
5738         Improved error report for errors CS0536, CS0534.
5739
5740 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
5741
5742         Merge a few bits from the Anonymous Method MCS tree.
5743
5744         * statement.cs (ToplevelBlock): New class for toplevel methods,
5745         will hold anonymous methods, lifted variables.
5746
5747         * cs-parser.jay: Create toplevel blocks for delegates and for
5748         regular blocks of code. 
5749
5750 2004-01-20  Martin Baulig  <martin@ximian.com>
5751
5752         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
5753         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
5754         and `NeedExplicitReturn'; added `IsLastStatement'.
5755         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
5756         have a `ReturnLabel' or we're not unreachable.
5757
5758         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
5759         child's reachability; don't just override ours with it.  Fixes
5760         #58058 (lluis's example).
5761         (FlowBranching): Added public InTryOrCatch(), InCatch(),
5762         InFinally(), InLoop(), InSwitch() and
5763         BreakCrossesTryCatchBoundary() methods.
5764
5765         * statement.cs (Return): Do all error checking in Resolve().
5766         Unless we are the last statement in a top-level block, always
5767         create a return label and jump to it.
5768         (Break, Continue): Do all error checking in Resolve(); also make
5769         sure we aren't leaving a `finally'.
5770         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
5771         statement in a top-level block.
5772         (Block.Flags): Added `IsDestructor'.
5773         (Block.IsDestructor): New public property.
5774
5775 2004-01-20  Martin Baulig  <martin@ximian.com>
5776
5777         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
5778
5779 2004-01-20  Martin Baulig  <martin@ximian.com>
5780
5781         * statement.cs (Statement.ResolveUnreachable): New public method.
5782         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
5783         (Block.Resolve): Resolve unreachable statements.
5784
5785 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
5786
5787         * expression.cs: We need to fix the case where we do
5788         not have a temp variable here.
5789
5790         * assign.cs: Only expression compound assignments need
5791         temporary variables.
5792
5793 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
5794
5795         * flowanalysis.cs: Reduce memory allocation in a few ways:
5796           - A block with no variables should not allocate a bit
5797             vector for itself.
5798           - A method with no out parameters does not need any tracking
5799             for assignment of the parameters, so we need not allocate
5800             any data for it.
5801           - The arrays:
5802                 public readonly Type[] VariableTypes;
5803                 public readonly string[] VariableNames;
5804             Are redundant. The data is already stored in the variable
5805             map, so we need not allocate another array for it.
5806           - We need to add alot of checks for if (params | locals) == null
5807             due to the first two changes.
5808
5809 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
5810
5811         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
5812         implement IMemoryLocation, we store a copy on a local variable and
5813         take the address of it.  Patch from Benjamin Jemlich
5814
5815         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
5816         to use a special "type_name_expression" rule which reduces the
5817         number of "QualifiedIdentifier" classes created, and instead
5818         directly creates MemberAccess expressions.
5819
5820 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
5821
5822         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
5823         that fixes #52853.  Null literal assignment to ValueType
5824
5825         * class.cs (MethodData.Emit): Instead of checking the name of the
5826         method to determine if its a destructor, create a new derived
5827         class from Method called Destructor, and test for that.  
5828
5829         * cs-parser.jay: Create a Destructor object instead of a Method.  
5830
5831         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
5832
5833         Fixes: 52933
5834
5835 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
5836
5837         * expression.cs (Binary.ResolveOperator): Perform an implicit
5838         conversion from MethodGroups to their delegate types on the
5839         Addition operation.
5840
5841         * delegate.cs: Introduce a new class DelegateCreation that is the
5842         base class for `NewDelegate' and `ImplicitDelegateCreation',
5843         factor some code in here.
5844
5845         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
5846         conversion from MethodGroups to compatible delegate types. 
5847
5848         * ecore.cs (Expression.Resolve): Do not flag error 654
5849         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
5850         we allow conversions from MethodGroups to delegate types now.
5851
5852         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
5853         assignments in v2 either.
5854
5855 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
5856
5857         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
5858         static read-only fields in ctors.
5859
5860         Applied patch from Benjamin Jemlich 
5861
5862         * expression.cs (UnaryMutator): Avoid leaking local variables. 
5863
5864 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
5865
5866         * cs-tokenizer.cs (IsCastToken): Allow the various native types
5867         here to return true, as they can be used like this:
5868
5869                 (XXX) int.MEMBER ()
5870
5871         Fixed 49836 and all the other dups
5872
5873 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
5874
5875         * driver.cs: Implement /win32res and /win32icon.
5876
5877 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
5878
5879         * cs-parser.jay: Add a rule to improve error handling for the
5880         common mistake of placing modifiers after the type.
5881
5882 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
5883
5884         * cs-parser.jay (interface_event_declaration): Catch
5885         initialization of events on interfaces, and report cs0068
5886
5887         * cs-parser.jay (interface_event_declaration): Catch
5888         initialization of events. 
5889
5890         * ecore.cs: Better report missing constructors.
5891
5892         * expression.cs (Binary.ResolveOperator): My previous bug fix had
5893         the error reporting done in the wrong place.  Fix.
5894
5895         * expression.cs (Binary.ResolveOperator): Catch the 
5896         operator + (E x, E y) error earlier, and later allow for implicit
5897         conversions in operator +/- (E e, U x) from U to the underlying
5898         type of E.
5899
5900         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
5901         52596, if the container class is abstract, the default constructor
5902         is protected otherwise its public (before, we were always public).
5903
5904         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
5905         fixed statement.
5906
5907         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
5908         Jemlich that fixes bug #52597, MCS was generating invalid code for
5909         idisposable structs.   Thanks to Ben for following up with this
5910         bug as well.
5911
5912 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
5913
5914         * driver.cs: Allow assemblies without code to be generated, fixes
5915         52230.
5916
5917 2004-01-07  Nick Drochak <ndrochak@gol.com>
5918
5919         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
5920
5921 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
5922
5923         * cs-parser.jay: Add rules to improve error reporting if fields or
5924         methods are declared at the namespace level (error 116)
5925
5926         * Add rules to catch event add/remove
5927
5928 2004-01-04  David Sheldon <dave-mono@earth.li>
5929
5930   * expression.cs: Added matching ")" to error message for 
5931   CS0077
5932
5933 2004-01-03 Todd Berman <tberman@gentoo.org>
5934
5935         * ecore.cs, attribute.cs:
5936         Applying fix from #52429.
5937
5938 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5939
5940         * ecore.cs, expression.cs, statement.cs:
5941         Total rewrite of how we handle branching. We
5942         now handle complex boolean expressions with fewer
5943         jumps. As well if (x == 0) no longer emits a ceq.
5944
5945         if (x is Foo) is much faster now, because we generate
5946         better code.
5947
5948         Overall, we get a pretty big improvement on our benchmark
5949         tests. The code we generate is smaller and more readable.
5950
5951         I did a full two-stage bootstrap. The patch was reviewed
5952         by Martin and Miguel.
5953
5954 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5955
5956         * cs-parser.jay: Make primary_expression not take a QI.
5957         we dont need this because the member_access rule covers
5958         us here. So we replace the rule with just IDENTIFIER.
5959
5960         This has two good effects. First, we remove a s/r conflict.
5961         Second, we allocate many fewer QualifiedIdentifier objects.
5962
5963 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5964
5965         * attribute.cs: Handle MarshalAs attributes as pseudo, and
5966         set the correct information via SRE. This prevents
5967         hanging on the MS runtime. Fixes #29374.
5968
5969 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5970
5971         * convert.cs: correctly handle conversions to value types
5972         from Enum and ValueType as unboxing conversions.
5973
5974         Fixes bug #52569. Patch by Benjamin Jemlich.
5975
5976 2004-01-02  Ravi Pratap  <ravi@ximian.com>
5977
5978         * expression.cs (BetterConversion): Prefer int -> uint
5979         over int -> ulong (csc's behaviour). This fixed bug #52046.
5980
5981 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
5982
5983         * decl.cs (MemberCache.FindMembers): now returns a
5984         MemberInfo [].
5985
5986         * typemanager.cs: In general, go with with ^^.
5987         (CopyNewMethods): take an IList.
5988         (RealMemberLookup): Only allocate an arraylist
5989         if we copy from two sets of methods.
5990
5991         This change basically does two things:
5992         1) Fewer array lists allocated due to CopyNewMethods.
5993         2) the explicit cast in MemberList costed ALOT.
5994
5995 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
5996
5997         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
5998         a hashtable to avoid needless string allocations when an identifier is
5999         used more than once (the common case).
6000
6001 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
6002
6003         * pending.cs: MS's TypeBuilder.GetInterfaces ()
6004         is broken, it will not return anything. So, we
6005         have to use the information we have in mcs to
6006         do the task.
6007
6008         * typemanager.cs: Add a cache for GetInterfaces,
6009         since this will now be used more often (due to ^^)
6010
6011         (GetExplicitInterfaces) New method that gets the
6012         declared, not effective, interfaces on a type
6013         builder (eg, if you have interface IFoo, interface
6014         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
6015         { IBar }.
6016
6017         This patch makes MCS able to bootstrap itself on
6018         Windows again.
6019
6020 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
6021
6022         * expression.cs: Remove the Nop's that Miguel put
6023         in by mistake.
6024
6025 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
6026
6027         * report.cs, codegen.cs: Give the real stack trace to
6028         the error when an exception is thrown.
6029
6030 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
6031
6032         * decl.cs: only allocate hashtables for ifaces if 
6033         it is an iface!
6034
6035 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
6036
6037         * expression.cs: fix the error from cs0121-2.cs
6038         (a parent interface has two child interfaces that
6039         have a function with the same name and 0 params
6040         and the function is called through the parent).
6041
6042 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
6043
6044         * class.cs, rootcontext.cs, typmanager.cs: do not
6045         leak pointers.
6046
6047 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
6048
6049         * codegen.cs: remove stack for the ec flow branching.
6050         It is already a linked list, so no need.
6051
6052 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
6053
6054         * Makefile: Allow custom profiler here.
6055
6056 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
6057
6058         * typemanager.cs (LookupType):
6059           - Use a static char [], because split takes
6060             a param array for args, so it was allocating
6061             every time.
6062           - Do not store true in a hashtable, it boxes.
6063
6064 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
6065
6066         * flowanalysis.cs: bytify common enums.
6067
6068 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
6069
6070         * modifiers.cs: Add a new set of flags for the
6071         flags allowed on explicit interface impls.
6072         * cs-parser.jay: catch the use of modifiers in
6073         interfaces correctly.
6074         * class.cs: catch private void IFoo.Blah ().
6075
6076         All related to bug #50572.
6077
6078 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
6079
6080         * decl.cs: Rewrite the consistant accessability checking.
6081         Accessability is not linear, it must be implemented in
6082         a tableish way. Fixes #49704.
6083
6084 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
6085
6086         * expression.cs: Handle negation in a checked context.
6087         We must use subtraction from zero. Fixes #38674.
6088
6089 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
6090
6091         * class.cs: Ignore static void main in DLLs.
6092         * rootcontext.cs: Handle the target type here,
6093         since we are have to access it from class.cs
6094         * driver.cs: account for the above.
6095
6096 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
6097
6098         * report.cs: Give line numbers and files if available.
6099
6100 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
6101
6102         * driver.cs: Implement /addmodule.
6103
6104         * typemanager.cs:  Change 'modules' field so it now contains Modules not
6105         ModuleBuilders.
6106
6107 2003-12-20  Martin Baulig  <martin@ximian.com>
6108
6109         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
6110         (FieldBase.IsAssigned): Removed this field.
6111         (FieldBase.SetAssigned): New public method.
6112         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
6113
6114 2003-12-20  Martin Baulig  <martin@ximian.com>
6115
6116         * expression.cs (LocalVariableReference.DoResolve): Don't set
6117         `vi.Used' if we're called from DoResolveLValue().
6118
6119         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
6120         returns the usage vector it just merged into the current one -
6121         pass this one to UsageWarning().
6122         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
6123         of the `EmitContext', don't call this recursively on our children.
6124
6125 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
6126
6127         * driver.cs: Implement /target:module.
6128
6129 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
6130
6131         * support.cs (CharArrayHashtable): New helper class.
6132
6133         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
6134         char arrays, not strings, so we can avoid creating a string in
6135         consume_identifier if the identifier is a keyword.
6136
6137 2003-12-16  Martin Baulig  <martin@ximian.com>
6138
6139         * statement.cs (LocalInfo.Assigned): Removed this property.
6140         (LocalInfo.Flags): Removed `Assigned'.
6141         (LocalInfo.IsAssigned): New public method; takes the EmitContext
6142         and uses flow analysis.
6143         (Block.UsageWarning): Made this method private.
6144         (Block.Resolve): Call UsageWarning() if appropriate.
6145
6146         * expression.cs (LocalVariableReference.DoResolve): Always set
6147         LocalInfo.Used here.
6148
6149 2003-12-13  Martin Baulig  <martin@ximian.com>
6150
6151         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
6152         any value here; we're now using flow analysis to figure out
6153         whether a statement/block returns a value.
6154
6155 2003-12-13  Martin Baulig  <martin@ximian.com>
6156
6157         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
6158         working again.
6159         (FlowBranching.MergeFinally): Don't call
6160         `branching.CheckOutParameters()' here, this is called in
6161         MergeTopBlock().
6162         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
6163         when adding the `finally' vector.       
6164
6165 2003-12-13  Martin Baulig  <martin@ximian.com>
6166
6167         * flowanalysis.cs
6168         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
6169         actually work and also fix #48962.
6170
6171 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
6172
6173         * decl.cs: Do not check System.Object for nested types,
6174         since we know it does not have any. Big bang for buck:
6175
6176         BEFORE:
6177            Run 1:   8.35 seconds
6178            Run 2:   8.32 seconds
6179            corlib:  17.99 seconds
6180         AFTER:
6181            Run 1:   8.17 seconds
6182            Run 2:   8.17 seconds
6183            corlib:  17.39 seconds
6184
6185 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
6186
6187         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
6188         time we are returning 0 members, so we save alot here.
6189
6190 2003-12-11  Martin Baulig  <martin@ximian.com>
6191
6192         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
6193         `MergeChild()', also just take the `FlowBranching' as argument;
6194         call Merge() on it and return the result.
6195         (FlowBranching.Merge): We don't need to do anything if we just
6196         have one sibling.
6197
6198 2003-12-11  Martin Baulig  <martin@ximian.com>
6199
6200         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
6201         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
6202         Maurer for this idea.
6203
6204 2003-12-11  Martin Baulig  <martin@ximian.com>
6205
6206         * flowanalysis.cs (MergeResult): This class is now gone; we now
6207         use the `UsageVector' for this.  The reason for this is that if a
6208         branching just has one sibling, we don't need to "merge" them at
6209         all - that's the next step to do.
6210         (FlowBranching.Merge): We now return a `UsageVector' instead of a
6211         `MergeResult'.
6212
6213 2003-12-11  Martin Baulig  <martin@ximian.com>
6214
6215         Reworked flow analyis and made it more precise and bug-free.  The
6216         most important change is that we're now using a special `Reachability'
6217         class instead of having "magic" meanings of `FlowReturns'.  I'll
6218         do some more cleanups and optimizations and also add some more
6219         documentation this week.
6220
6221         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
6222         largely reworked this class.
6223         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
6224         the new `Reachability' class instead of having "magic" values here.
6225         (FlowBranching): We're now using an instance of `Reachability'
6226         instead of having separate `Returns', `Breaks' etc. fields.
6227
6228         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
6229         based on flow analysis; ignore the return value of block.Emit ().
6230
6231 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
6232
6233         * driver.cs typemanager.cs: Find the mono extensions to corlib even
6234         if they are private.
6235
6236 2003-12-09  Martin Baulig  <martin@ximian.com>
6237
6238         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
6239         call them directly on the UsageVector.
6240
6241 2003-12-09  Martin Baulig  <martin@ximian.com>
6242
6243         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
6244         Changed return type from `FlowReturns' to `Reachability'.
6245
6246 2003-12-09  Martin Baulig  <martin@ximian.com>
6247
6248         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
6249         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
6250         `Reachable' fields with a single `Reachability' one.
6251
6252 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
6253
6254         * class.cs (FindMembers): Remove foreach's.
6255
6256         Bootstrap times:
6257
6258         BEFORE
6259                 Run 1:   8.74 seconds
6260                 Run 2:   8.71 seconds
6261
6262         AFTER
6263                 Run 1:   8.64 seconds
6264                 Run 2:   8.58 seconds
6265
6266
6267 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
6268
6269         * cs-parser.jay:
6270         * gen-treedump.cs:
6271         * statement.cs:
6272         This patch does a few things:
6273                 1. EmptyStatement is now a singleton, so it is never reallocated.
6274                 2. All blah is EmptyStatement constructs have been changed to
6275                    blah == EmptyStatement.Value, which is much faster and valid
6276                    now that EmptyStatement is a singleton.
6277                 3. When resolving a block, rather than allocating a new array for
6278                    the non-empty statements, empty statements are replaced with
6279                    EmptyStatement.Value
6280                 4. Some recursive functions have been made non-recursive.
6281         Mainly the performance impact is from (3), however (1) and (2) are needed for
6282         this to work. (4) does not make a big difference in normal situations, however
6283         it makes the profile look saner.
6284
6285         Bootstrap times:
6286
6287         BEFORE
6288         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
6289         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
6290         Total memory allocated: 56397 KB
6291
6292         AFTER
6293         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
6294         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
6295         Total memory allocated: 55666 KB
6296
6297 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
6298
6299         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
6300         than the hashtable in a hashtable version
6301
6302         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
6303         we always end up concating a string. This results in a huge perf
6304         loss, because many strings have to be tracked by the GC. In this
6305         patch, we first use a hashtable that works with two keys, so that
6306         the strings do not need to be concat'ed.
6307
6308         Bootstrap times:
6309         BEFORE
6310                 Run 1:   8.74 seconds
6311                 Run 2:   8.71 seconds
6312
6313         AFTER
6314                 Run 1:   8.65 seconds
6315                 Run 2:   8.56 seconds
6316
6317 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
6318
6319         * Makefile: Add a new target `do-time' that does a quick and simple
6320         profile, leaving easy to parse output.
6321
6322 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
6323
6324         * codegen.cs (Init): Create the dynamic assembly with 
6325         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
6326
6327 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
6328
6329         * support.cs: Make the PtrHashtable use only one
6330         instance of its comparer.
6331
6332 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
6333
6334         * typemanager.cs: Fix lookup of GetNamespaces.
6335
6336 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
6337
6338         * expression.cs: Removed redundant line.
6339
6340         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
6341         ArrayLists, use for loops with bounds.  
6342
6343         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
6344         arraylist.
6345
6346         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
6347         arraylists, use for loop with bounds.
6348
6349         The above three changes give us a 0.071 second performance
6350         improvement out of 3.294 seconds down to 3.223.  On my machine
6351         the above changes reduced the memory usage by 1,387 KB during
6352         compiler bootstrap.
6353
6354         * cs-parser.jay (QualifiedIdentifier): New class used to represent
6355         QualifiedIdentifiers.  Before we created a new string through
6356         concatenation, and mostly later on, the result would be
6357         manipulated by DecomposeQI through string manipulation.
6358
6359         This reduced the compiler memory usage for bootstrapping from
6360         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
6361         compile times in 0.05 seconds.
6362
6363 2003-11-28  Dick Porter  <dick@ximian.com>
6364
6365         * support.cs: Do string compares with the Invariant culture.
6366
6367         * rootcontext.cs: 
6368         * gen-treedump.cs: 
6369         * expression.cs: 
6370         * driver.cs: 
6371         * decl.cs: 
6372         * codegen.cs: 
6373         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
6374         the comparison is done with the Invariant culture.
6375
6376 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
6377
6378         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
6379         GetEnumerator method.
6380
6381         (ProbeCollectionType): Iterate starting at the most specific type
6382         upwards looking for a GetEnumerator
6383
6384         * expression.cs: Shift count can be up to 31 for int/uint and 63
6385         for long/ulong.
6386
6387 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
6388
6389         * statement.cs (Block.LookupLabel): Also look for the label on the
6390         children blocks.  Use a hash table to keep track of visited
6391         nodes. 
6392
6393         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
6394         we actually did transform the other operand, otherwise fall back
6395         to the common codepath that casts to long.
6396
6397         * cs-tokenizer.cs: Use the same code pattern as the int case.
6398         Maybe I should do the parsing myself, and avoid depending on the
6399         Parse routines to get this done.
6400
6401 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
6402
6403         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
6404         which fixes bug 51347.  This time test it.
6405
6406         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
6407         attributes for example can not tell the difference between these.
6408         The difference was only a syntax feature of the language. 
6409
6410         * attribute.cs: Apply attributes to delegates.
6411
6412         * delegate.cs: Call the apply attributes method.
6413
6414 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
6415
6416         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
6417         comparing 0 vs Byte.MinValue, not the value
6418
6419         (ImplicitConversionRequired): When reporting a conversion error,
6420         use error 31 to print out the constant error instead of the
6421         simpler 29.
6422
6423         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
6424         which fixes bug 51347.
6425
6426 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
6427
6428         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
6429         which fixes the -warnaserror command line option.
6430
6431 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
6432
6433         * cfold.cs (DoNumericPromotions): During constant folding of
6434         additions on UIntConstant, special case intconstants with
6435         IntConstants like we do on the expression binary operator. 
6436
6437 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
6438
6439         * convert.cs (ImplicitReferenceConversion): We were missing a case
6440         (System.Enum are not value types or class types, so we need to
6441         classify them separatedly).
6442
6443         * driver.cs: We do not support error 2007.
6444
6445 2003-11-12 Jackson Harper <jackson@ximian.com>
6446
6447         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
6448         system directory. Also use the full file name so users can
6449         libraries names mscorlib-o-tron.dll in a non system dir.
6450         
6451 2004-01-04  David Sheldon <dave-mono@earth.li>
6452
6453         * expression.cs: Added matching ")" to error message for CS0077.
6454
6455 2003-12-19  Martin Baulig  <martin@ximian.com>
6456
6457         * typemanager.cs (TypeManager.IsEqualGenericType): New public
6458         static method; see documentation in the method.
6459         (TypeManager.IsSubclassOrNestedChild): Allow IsEqualGenericType().
6460
6461         * convert.cs (Convert.ImplicitReferenceConversion,
6462         Convert.ImplicitReferenceConversionExists): Add support for
6463         generic type declarations; see gen-36.cs.
6464
6465 2003-12-19  Martin Baulig  <martin@ximian.com>
6466
6467         * pending.cs (Pending.InterfaceMethod): Use
6468         `Type.IsAssignableFrom()' instead of `=='.
6469
6470 2003-12-18  Martin Baulig  <martin@ximian.com>
6471
6472         * decl.cs (DeclSpace.AsAccessible): Check for array, pointer and
6473         byref types first.
6474
6475         * convert.cs (Convert.ImplicitStandardConversionExists): Use
6476         `expr_type.Equals (target_type)' instead of `=='.
6477
6478 2003-12-08  Martin Baulig  <martin@ximian.com>
6479
6480         * generics.cs (Constraints.Types): Removed.
6481         (Constraints.Resolve): Just resolve everything to TypeExpr's, not
6482         to Type's.
6483         (Constraints.ResolveTypes): New public method; resolves the
6484         TypeExpr's to Type's.
6485         (TypeParameter.Define): TypeBuilder.DefineGenericParameter() no
6486         longer takes the constraints.
6487         (TypeParameter.DefineMethod): Likewise.
6488         (TypeParameter.DefineType): New public method.  Calls
6489         `TypeBuilder/MethodBuilder.SetGenericParameterConstraints()' to set
6490         the constraints.
6491
6492 2003-12-08  Martin Baulig  <martin@ximian.com>
6493
6494         * convert.cs (Convert.ImplicitConversionStandard): Use
6495         `expr_type.Equals (target_type)' instead of `=='.
6496
6497 2003-12-08  Martin Baulig  <martin@ximian.com>
6498
6499         * typemanager.cs (TypeManager.GetReferenceType): Call
6500         `Type.MakeByRefType ()'.
6501
6502 2003-12-08  Martin Baulig  <martin@ximian.com>
6503
6504         * cs-parser.jay, cs-tokenizer.cs: `where' is not a keyword, it
6505         just has some special meaning in some situations.  For instance,
6506         it is allowed to use `where' as the name of a variable etc.
6507
6508 2003-12-04  Martin Baulig  <martin@ximian.com>
6509
6510         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
6511         `Type.MakeArrayType()' for array types.
6512
6513 2003-11-18  Miguel de Icaza  <miguel@ximian.com>
6514
6515         * expression.cs (Invocation.VerifyArgumentsCompat): Remove
6516         debugging message.
6517
6518         (SizeOf.DoResolve): assign the `type_queried' field.  This gets
6519         corlib to compile.
6520
6521 2003-11-16  Martin Baulig  <martin@ximian.com>
6522
6523         * codegen.cs (EmitContext.IsGeneric): Removed.
6524
6525         * ecore.cs (SimpleName.ResolveAsTypeStep): Always call
6526         ResolveGeneric() on the DeclSpace.
6527
6528 2003-11-16  Martin Baulig  <martin@ximian.com>
6529
6530         * generic.cs (TypeArguments.Resolve):
6531         `Expression.ResolveAsTypeTerminal()' returns a TypeExpr; call
6532         `ResolveType()' on it to get the Type.
6533
6534 2003-11-15  Martin Baulig  <martin@ximian.com>
6535
6536         * generic.cs (ConstructedType.GetInterfaces): Override this.
6537
6538 2003-11-14  Martin Baulig  <martin@ximian.com>
6539
6540         * interface.cs (Interface.DefineType): Define all type parameters
6541         before adding the interfaces we inherit.
6542
6543 2003-11-11  Martin Baulig  <martin@ximian.com>
6544
6545         * generic.cs (ConstructedType.ResolveType): Always call
6546         `gt.BindGenericParameters (atypes)'; also if `args.HasTypeArguments'.
6547
6548 2003-11-10  Martin Baulig  <martin@ximian.com>
6549
6550         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
6551         (TypeManager.InitCoreTypes): Initialize them here, but instead of
6552         calling `ResolveType()' on them, directly assign their `Type'.
6553
6554 2003-11-08  Martin Baulig  <martin@ximian.com>
6555
6556         * generic.cs (ConstructedType): Override `IsClass' etc.
6557
6558 2003-11-08  Martin Baulig  <martin@ximian.com>
6559
6560         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
6561         return value and the `out parent' parameter.
6562         (TypeContainer.DefineType): Moved the CS0644 check into
6563         GetClassBases().  Don't pass the interface types to the
6564         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
6565         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
6566
6567         * ecore.cs (TypeExpr.IsAttribute): New property.
6568         (TypeExpr.GetInterfaces): New method.
6569
6570         * interface.cs (Interface.GetInterfaceTypeByName): Return a
6571         TypeExpr instead of a Type.
6572         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
6573         (Interface.DefineType): Don't pass the interface types to the
6574         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
6575         them later and then call `TypeBulider.AddInterfaceImplementation()'.
6576
6577         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
6578         instead of a `Type[]'.
6579         (TypeManager.RegisterBuilder): Likewise.
6580         (TypeManager.AddUserInterface): Likewise.
6581         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
6582         `Type[]' and also return a `TypeExpr[]'.
6583         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
6584
6585 2003-11-08  Martin Baulig  <martin@ximian.com>
6586
6587         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
6588         Expression.     
6589
6590 2003-11-08  Martin Baulig  <martin@ximian.com>
6591
6592         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
6593         TypeManager.ResolveExpressionTypes().
6594
6595         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
6596         instead of an Expression.
6597         (TypeExpr): This is now an abstract base class for `TypeExpression'.
6598         (TypeExpression): New public class; formerly known as `TypeExpr'.
6599
6600         * expression.cs (ComposedCast): Derive from TypeExpr.
6601
6602         * typemanager.cs (TypeManager.system_*_expr): These are now
6603         TypExpr's instead of Expression's.
6604         (TypeManager.ResolveExpressionTypes): New public static function;
6605         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
6606         of them.        
6607
6608 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
6609
6610         * expression.cs (New.DoResolve): Do not dereference value that
6611         might be a null return.
6612
6613         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
6614         sure that the constant value has the right type.  Fixes an
6615         unreported bug, similar to 50425.
6616
6617         * const.cs (Const.LookupConstantValue): Call
6618         ImplicitStandardConversionExists before doing a conversion to
6619         avoid havng the TypeManager.ChangeType do conversions.
6620
6621         Reduced the number of casts used
6622
6623         (Const.ChangeType): New routine to enable reuse of the constant
6624         type changing code from statement.
6625
6626         * typemanager.cs (ChangeType): Move common initialization to
6627         static global variables.
6628
6629         Fixes #50425.
6630
6631         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
6632         every value type to go through, even if it was void.  Fix that. 
6633
6634         * cs-tokenizer.cs: Use is_identifier_start_character on the start
6635         character of the define, and the is_identifier_part_character for
6636         the rest of the string.
6637
6638 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
6639
6640         * expression.cs (UnaryMutator.EmitCode): When I updated
6641         LocalVariableReference.DoResolve, I overdid it, and dropped an
6642         optimization done on local variable references.
6643
6644 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
6645
6646         * ecore.cs: Convert the return from Ldlen into an int.
6647
6648 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
6649
6650         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
6651         the accessibility, this is a special case for toplevel non-public
6652         classes (internal for instance).
6653
6654 2003-10-20  Nick Drochak <ndrochak@gol.com>
6655
6656         * ecore.cs: Fix typo and build.  Needed another right paren.
6657
6658 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
6659
6660         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
6661         `internal' case regular and protected, but not allowing protected
6662         to be evaluated later.  Bug 49840
6663
6664 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
6665
6666         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
6667         to kb.Nlast, and not the kb.nFirst to isolate the switch
6668         statement.
6669
6670         Extract the underlying type, so enumerations of long/ulong are
6671         treated like long/ulong.
6672
6673 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
6674
6675         * expression.cs (New): Overload the meaning of RequestedType to
6676         track the possible creation of the NewDelegate type, since
6677         DoResolve is invoked more than once for new constructors on field
6678         initialization.
6679
6680         See bugs: #48800 and #37014
6681
6682         * cs-parser.jay (declare_local_constants): Take an arraylist
6683         instead of a single constant.
6684
6685         (local_constant_declaration): It should take a
6686         constant_declarators, not a constant_declarator.  Fixes 49487
6687
6688         * convert.cs: Fix error report.
6689
6690 2003-10-13 Jackson Harper <jackson@ximian.com>
6691
6692         * typemanager.cs (TypeToCoreType): Add float and double this fixes
6693         bug #49611
6694         
6695 2003-11-03  Martin Baulig  <martin@ximian.com>
6696
6697         * expression.cs (ArrayAccess.GetStoreOpcode): Added
6698         `out bool has_type_arg'; if set, we need to pass the type to
6699         ig.Emit().
6700         (ArrayAccess.GetStoreOpcode, ArrayAccess.EmitLoadOpcode): Use
6701         Stelem_Any/Ldelem_Any for generic parameters.   
6702
6703 2003-11-02  Martin Baulig  <martin@ximian.com>
6704
6705         * expression.cs (Invocation.EmitCall): Use
6706         `TypeManager.IsValueType()' to check whether it's a value type.
6707         Don't set `struct_call' when calling a method on a type parameter.
6708
6709 2003-11-02  Martin Baulig  <martin@ximian.com>
6710
6711         * generics.cs (ConstructedType.Resolve): Renamed to ResolveType()
6712         and removed the TypeBuilder argument.
6713
6714         * typemanager.cs (TypeManager.IsValueType): Return
6715         `t.IsGenericParameter || t.IsValueType'.
6716
6717 2003-10-25  Martin Baulig  <martin@ximian.com>
6718
6719         * decl.cs (DeclSpace.ResolveType): If we're a ConstructedType,
6720         call ConstructedType.Resolve() on it.
6721
6722         * generic.cs (ConstructedType.Resolve): Set `type' on success.
6723
6724 2003-10-25  Martin Baulig  <martin@ximian.com>
6725
6726         * class.cs (TypeContainer.GetClassBases): Changed
6727         `out Type parent' into `out TypeExpr parent'.  Moved CS0644 and
6728         CS8214 reporting here.
6729         (TypeContainer.DefineType): GetClassBases() gives us a `TypeExpr'
6730         instead of a `Type' for our parent.  In case of a recursive
6731         declaration (see tests/gen-23.cs for an example), our parent is a
6732         ConstructedType and it doesn't have its type set.  So, first
6733         create our own TypeBuilder, then call constructed.Resolve() to get
6734         the parent's type and finally TypeBuilder.SetParent() it.
6735
6736         * ecore.cs (TypeExpr.Name): New public virtual property.
6737
6738         * generic.cs
6739         (ConstructedType): We're now a TypeExpr and not just an Expression.
6740         (ConstructedType.ResolveAsTypeStep): Don't resolve our type
6741         arguments here; this is done later.
6742         (ConstructedType.Resolve): New public method to resolve the type
6743         arguments and bind them.
6744
6745 2003-10-21  Martin Baulig  <martin@ximian.com>
6746
6747         * convert.cs: Use `TypeManager.IsValueType' instead of
6748         'type.IsValueType' everywhere.
6749
6750         * typemanager.cs (TypeManager.IsValueType): Return true for type
6751         parameters.  The reason for this is that we need to box a type
6752         parameter when converting it to a reference type.
6753
6754         * cs-parser.jay: Added support for default value expressions.
6755
6756         * generics.cs (DefaultValueExpression): New public class.       
6757
6758 2003-10-17  Martin Baulig  <martin@ximian.com>
6759
6760         * generic.cs (Constraints.Resolve): Take a DecpSpace instead of a
6761         TypeContainer so we can also use this for Interfaces.
6762         (TypeParameter.Resolve): Likewise.
6763
6764         * interface.cs (Interface.DefineType): Added support for generic
6765         interfaces.
6766
6767         * cs-parser.jay: Added support for generic structs and interfaces.
6768
6769 2003-10-17  Martin Baulig  <martin@ximian.com>
6770
6771         * generic.cs (GenericMemberAccess.DoResolve): We can now actually
6772         call generic methods :-)
6773
6774 2003-10-16  Martin Baulig  <martin@ximian.com>
6775
6776         * cs-parser.jay (namespace_or_type_name): Only create a
6777         GenericMemberAccess if we actually have type arguments.
6778
6779 2003-10-13  Martin Baulig  <martin@ximian.com>
6780
6781         * class.cs (Method.Define): If we're a generic method, call
6782         TypeBuilder.DefineGenericMethod () before resolving
6783         the parameters.
6784         (MethodData): Added .ctor which takes an additional MethodBuilder
6785         argument; this is used for generic methods.
6786         (MethodData.Define): Call `builder.SetGenericMethodSignature()' if
6787         we already have a MethodBuilder.
6788
6789 2003-10-10  Martin Baulig  <martin@ximian.com>
6790
6791         * class.cs (Method): Added .ctor which takes a `GenericMethod'
6792         instead of a `DeclSpace'.  This is used for generic methods.
6793
6794         * cs-parser.jay (method_header): Added support for generic
6795         methods; create a `GenericMethod' instance and pass it to the
6796         `Method's .ctor; it'll be used as the `DeclSpace' to lookup
6797         parameters and locals.
6798
6799         * decl.cs (DeclSpace.SetParameterInfo): Removed Location argument
6800         since we already have the location.  Check whether we're a generic
6801         type declaration or a generic method and create the correct type
6802         parameter.
6803
6804         * generic.cs (TypeParameter.DefineMethod): New public method.
6805         (GenericMethod): New public class; derives from DeclSpace and is
6806         used for generic methods.       
6807
6808 2003-10-09  Martin Baulig  <martin@ximian.com>
6809
6810         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
6811         to the .ctor.
6812         (MethodCore.DoDefineParameters): Removed the TypeContainer
6813         argument; use the DeclSpace which was passed to the .ctor instead.
6814         (MethodCore.CheckParameter): Take a DeclSpace instead of a
6815         TypeContainer; we only need a DeclSpace here.
6816
6817 2003-10-09  Martin Baulig  <martin@ximian.com>
6818
6819         * class.cs (MethodData): Added additional `DeclSpace ds' argument
6820         to the .ctor.
6821         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
6822         EmitContext's .ctor.    
6823
6824 2003-10-09  Martin Baulig  <martin@ximian.com>
6825
6826         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
6827         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
6828         AsAccessible(), moved them as well.
6829
6830         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
6831
6832 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
6833
6834         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
6835         generation for >=, as spotted by Paolo, bug 48679.  
6836         Patch from David Waite.
6837
6838         * cs-tokenizer.cs: Add handling for #pragma.
6839
6840         * cs-parser.jay: Allow for both yield and yield return in the
6841         syntax.  The anti-cobolization of C# fight will go on!
6842
6843         * class.cs (TypeBuilder.DefineType): Catch error condition here
6844         (Parent.DefineType erroring out and returning null).
6845
6846         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
6847         coping with enumerations variables, we were mistakenly processing
6848         them as a regular value type instead of built-in types.  Fixes the
6849         bug #48063
6850
6851         * typemanager.cs (IsBuiltinOrEnum): New method.
6852
6853 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
6854
6855         * cs-parser.jay: Upgrade: yield now needs the return clause.
6856
6857 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
6858
6859         * cs-parser.jay : Renamed yyName to yyNames related to jay.
6860
6861 2003-09-29  Martin Baulig  <martin@ximian.com>
6862
6863         * typemanager.cs (TypeManager.GetMethodFlags): Added support for
6864         inflated generic methods.
6865
6866         * generics.cs (ConstructedType): Distinguish between open and
6867         closed constructed types; correctly resolve the arguments.
6868
6869 2003-09-22  Martin Baulig  <martin@ximian.com>
6870
6871         * generic.cs (ConstructedType.ResolveAsTypeCheck): Check whether
6872         all type arguments meet their constraints.
6873
6874 2003-09-19  Martin Baulig  <martin@ximian.com>
6875
6876         * decl.cs (MemberCache.SetupCacheForInterface): Take a
6877         `MemberCache parent' argument.  Normally, an interface doesn't
6878         have a parent type except System.Object, but we use this in gmcs
6879         for generic type parameters.
6880
6881 2003-09-18  Martin Baulig  <martin@ximian.com>
6882
6883         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
6884         on `type.IsInterface'; don't check whether the type has a parent
6885         to determine whether it's an interface.
6886
6887 2003-09-17  Martin Baulig  <martin@ximian.com>
6888
6889         * generic.cs (ConstructedType.ToString): Always use `name' as the
6890         type name.
6891
6892 2003-09-15  Martin Baulig  <martin@ximian.com>
6893
6894         * cs-parser.jay: Fix grammar wrt. type_parameter_constraints.
6895
6896         * generic.cs (Constraints.Resolve): New public method; this is
6897         called to resolve the constraint types and to check whether all
6898         the constraints are correct.
6899         (Constraints.Types): New public property.
6900         (TypeParameter.Resolve): New public method; resolves all the
6901         type's constraints.
6902
6903         * class.cs (TypeContainer.DefineType): Call
6904         TypeParameter.Resolve() before actually defining the type.
6905
6906 2003-09-15  Martin Baulig  <martin@ximian.com>
6907
6908         * class.cs (TypeContainer.DefineType): Added an error flag to
6909         avoid reporting duplicate CS0146's ("class definition is
6910         circular.").
6911
6912         * driver.cs (Driver.MainDriver): Abort if
6913         RootContext.ResolveTree() reported any errors.
6914
6915 2003-09-07  Martin Baulig  <martin@ximian.com>
6916
6917         * report.cs (Error, Warning): Added overloaded versions which take
6918         a `params object[] args' and call String.Format().
6919
6920 2003-09-07  Martin Baulig  <martin@ximian.com>
6921
6922         * decl.cs (DeclSpace..ctor): Don't call
6923         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
6924         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
6925         (DeclSpace.RecordDecl): New method.
6926
6927         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
6928
6929 2003-09-02  Ravi Pratap  <ravi@ximian.com>
6930
6931         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
6932         value attributes to be applied to ParameterBuilders.
6933
6934         * class.cs (MethodCore.LabelParameters): Make static and more
6935         generic so that it can be used from other places - like interface
6936         methods, for instance.
6937
6938         * interface.cs (Interface.Emit): Call LabelParameters before
6939         emitting attributes on the InterfaceMethod.
6940
6941 2003-09-07  Martin Baulig  <martin@ximian.com>
6942
6943         * generic.cs (ConstructedType.ResolveAsTypeStep): Report a CS8217
6944         if the number of type parameters doesn't match.
6945
6946 2003-09-04  Martin Baulig  <martin@ximian.com>
6947
6948         * expression.cs (ComposedCast.ResolveAsTypeStep): Added support
6949         for arrays of generic type params (ie. `!0[]').
6950
6951 2003-09-04  Martin Baulig  <martin@ximian.com>
6952
6953         * class.cs (TypeContainer.AsAccessible): Ignore generic parameters
6954         for the moment.
6955
6956 2003-09-04  Martin Baulig  <martin@ximian.com>
6957
6958         * decl.cs (DeclSpace.LookupGeneric): New method.
6959         (DeclSpace.CheckAccessLevel): Ignore generic parameters for the
6960         moment.
6961
6962         * generic.cs (TypeParameterExpr): Take a TypeParameter as
6963         argument, not just a string.
6964         (TypeParameter.Define): New public method; this is called to
6965         actually define the generic parameter; after this, you can use the
6966         new `Type' property to get the type.
6967
6968 2003-09-04  Martin Baulig  <martin@ximian.com>
6969
6970         * decl.cs (DeclSpace.SetParameterInfo): The `constraints' argument
6971         is now an ArrayList; initialize the result of the `TypeParameters'
6972         property here.
6973         (DeclSpace.GetGenericData): Removed.
6974         (DeclSpace.LookupGeneric): Temporarily removed; we need to
6975         implement this in a different way.
6976         (DeclSpace.GetTypeParameters): Removed; there's now a
6977         `TypeParameters' property.
6978         (DeclSpace.TypeParameters): New public property.
6979
6980         * generic.cs (Constraints): Make this class public.
6981         (TypeParameter): New public class.
6982
6983 2003-09-04  Martin Baulig  <martin@ximian.com>
6984
6985         * decl.cs (DeclSpace.GetTypeParameters): New method to return the
6986         generic parameters.
6987
6988         * class.cs (TypeContainer.DefineType): Call
6989         TypeBuilder.DefineGenericParameter () on all generic parameters if
6990         this is a generic type.
6991
6992 2003-08-28  Martin Baulig  <martin@ximian.com>
6993
6994         * sample-stack.il: Compile this with ilasm: "ilasm /dll
6995         sample-stack.il".
6996
6997         * sample-hello.cs: Compile this with gmcs: "gmcs
6998         /r:sample-stack.dll sample-hello.cs".
6999
7000 2003-08-28  Martin Baulig  <martin@ximian.com>
7001
7002         * generic.cs (ConstructedType.ResolveAsTypeStep): Actually bind
7003         the parameters to the generic type.
7004
7005 2003-08-28  Martin Baulig  <martin@ximian.com>
7006
7007         * cs-tokenizer.cs (parse_less_than): Also allow all builtin types.
7008
7009 2003-08-28  Martin Baulig  <martin@ximian.com>
7010
7011         * cs-parser.jay (opt_type_argument_list): Use
7012         `OP_GENERICS_LT type_arguments OP_GENERICS_GT'.
7013         (primary_expression): Replace `qualified_identifier' with `type_name'.
7014         (type_parameter_list): Use `OP_GENERICS_LT type_parameters OP_GENERICS_GT'.
7015
7016         * cs-tokenizer.cs (is_punct): When reading a `<', invoke a custom
7017         parser to check whether it is syntactically a type parameter list;
7018         return OP_GENERICS_LT/OP_GENERICS_GT instead of OP_LT/OP_GT in
7019         this case.
7020
7021 2003-08-26  Martin Baulig  <martin@ximian.com>
7022
7023         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
7024         resolving aliases; fixes #47927.
7025
7026 2003-08-26  Martin Baulig  <martin@ximian.com>
7027
7028         * statement.cs (Using.DoResolve): This is internally emitting a
7029         try/finally clause, so we need to set ec.NeedExplicitReturn if we
7030         do not always return.  Fixes #47681.
7031
7032 2003-08-26  Martin Baulig  <martin@ximian.com>
7033
7034         * decl.cs (MemberCore): Moved WarningNotHiding(),
7035         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
7036         into MemberBase.
7037         (AdditionResult): Make this nested in DeclSpace.
7038         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
7039         argument; call NamespaceEntry.Define() unless we're nested in a
7040         class or struct.
7041
7042         * namespace.cs (Namespace.DefineName): New public function.  This
7043         is called from DeclSpace's .ctor to add 
7044         (Namespace.Lookup): Include DeclSpaces in the lookup.
7045
7046         * class.cs (Operator): Derive from MemberBase, not MemberCore.
7047
7048         * const.cs (Const): Derive from MemberBase, not MemberCore.     
7049
7050 2003-08-25  Martin Baulig  <martin@ximian.com>
7051
7052         * convert.cs (Convert.ExplicitReferenceConversion): When
7053         converting from an interface type to a class, unbox if the target
7054         type is a struct type.  Fixes #47822.
7055
7056 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7057
7058         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
7059         #47854.
7060
7061 2003-08-22  Martin Baulig  <martin@ximian.com>
7062
7063         * class.cs (TypeManager.DefineType): When defining a nested type,
7064         call DefineType() on our parent; fixes #47801.
7065
7066 2003-08-22  Martin Baulig  <martin@ximian.com>
7067
7068         * class.cs (MethodData.Define): While checking if a method is an
7069         interface implementation, improve the test a bit more to fix #47654.
7070
7071 2003-08-22  Martin Baulig  <martin@ximian.com>
7072
7073         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
7074         correctly; fixes #47722.
7075
7076 2003-08-22  Martin Baulig  <martin@ximian.com>
7077
7078         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
7079         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
7080
7081         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
7082
7083 2003-08-22  Martin Baulig  <martin@ximian.com>
7084
7085         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
7086         can only be assigned in static constructors.  Fixes #47161.
7087
7088 2003-08-22  Martin Baulig  <martin@ximian.com>
7089
7090         Rewrote and improved the flow analysis code.
7091
7092         * flowbranching.cs (FlowBranching): Make this class abstract.
7093         (FlowBranching.CreateBranching): New static function to create a
7094         new flow branching.
7095         (FlowBranchingBlock, FlowBranchingException): New classes.
7096         (FlowBranching.UsageVector.Type): New public readonly field.
7097         (FlowBranching.UsageVector.Breaks): Removed the setter.
7098         (FlowBranching.UsageVector.Returns): Removed the setter.
7099         (FlowBranching.UsageVector): Added Break(), Return(),
7100         NeverReachable() and Throw() methods to modify the reachability.
7101         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
7102         done by FlowBranching.Merge().
7103         (FlowBranching.UsageVector.MergeChild): New method; merges the
7104         merge result into the current vector.
7105         (FlowBranching.Merge): New abstract method to merge a branching.
7106
7107 2003-08-12  Martin Baulig  <martin@ximian.com>
7108
7109         * expression.cs (Indirection.CacheTemporaries): Create the
7110         LocalTemporary with the pointer type, not its element type.
7111
7112 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
7113
7114         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
7115         token was a keyword or not.
7116
7117         Add `error' options where an IDENTIFIER was expected;  Provide
7118         CheckToken and CheckIdentifierToken convenience error reporting
7119         functions. 
7120
7121         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
7122
7123         * decl.cs: Rename `NamespaceEntry Namespace' public field into
7124         NameSpaceEntry NameSpaceEntry.
7125
7126         (LookupInterfaceOrClass): Avoid creating a full qualified name
7127         from namespace and name: avoid doing lookups when we know the
7128         namespace is non-existant.   Use new Tree.LookupByNamespace which
7129         looks up DeclSpaces based on their namespace, name pair.
7130
7131         * driver.cs: Provide a new `parser verbose' to display the
7132         exception thrown during parsing.  This is turned off by default
7133         now, so the output of a failure from mcs is more graceful.
7134
7135         * namespace.cs: Track all the namespaces defined in a hashtable
7136         for quick lookup.
7137
7138         (IsNamespace): New method
7139
7140 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
7141
7142         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
7143         we know that we need to concatenate (full typename can never be
7144         null). 
7145
7146         * class.cs: ditto.
7147
7148         * statement.cs: Use a bitfield;  Do not initialize to null things
7149         which are done by the constructor by default.
7150
7151         * cs-parser.jay: bug fix, parameter was 4, not 3.
7152
7153         * expression.cs: Just use the property;
7154
7155         * statement.cs: No need for GetVariableInfo method.
7156
7157 2003-08-08  Martin Baulig  <martin@ximian.com>
7158
7159         * flowanalysis.cs (FlowReturns): This is now nested in the
7160         `FlowBranching' class.
7161         (MyBitVector): Moved this here from statement.cs.
7162         (FlowBranching.SiblingType): New enum type.
7163         (FlowBranching.CreateSibling): Added `SiblingType' argument.
7164
7165 2003-08-07  Martin Baulig  <martin@ximian.com>
7166
7167         * flowanalysis.cs (FlowBranchingType): This is now nested in the
7168         `FlowBranching' class and called `BranchingType'.
7169
7170 2003-08-07  Martin Baulig  <martin@ximian.com>
7171
7172         * flowanalysis.cs: Moved all the control flow analysis code into
7173         its own file.
7174
7175 2003-08-07  Martin Baulig  <martin@ximian.com>
7176
7177         * assign.cs (Assign.DoResolve): `target' must either be an
7178         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
7179         #37319.
7180
7181 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
7182
7183         * expression.cs (BinaryMethod): This kind of expression is created by the
7184         Binary class if it determines that the operator has to be handled
7185         by a method.
7186
7187         (BinaryDelegate): This kind of expression is created if we are
7188         dealing with a + or - operator on delegates.
7189
7190         (Binary): remove method, argumetns, and DelegateOperator: when
7191         dealing with methods, 
7192
7193         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
7194
7195         * statement.cs (Block): use bitfields for the three extra booleans
7196         we had in use.   Remove unused topblock parameter.
7197
7198         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
7199
7200         * assign.cs: Drop extra unneeded tests.
7201
7202 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
7203
7204         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
7205
7206         * statement.cs (Foreach): Use VariableStorage instead of
7207         LocalBuilders.   
7208
7209         * codegen.cs (VariableStorage): New class used by clients that
7210         require a variable stored: locals or fields for variables that
7211         need to live across yield.
7212
7213         Maybe provide a convenience api for EmitThis+EmitLoad?
7214
7215         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
7216         these bad boys.
7217
7218 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
7219
7220         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
7221         RemapParameterLValue): New methods that are used to turn a
7222         precomputed FieldInfo into an expression like this:
7223
7224                 instance.FieldInfo
7225
7226         The idea is to use this instead of making LocalVariableReference
7227         have more than one meaning.
7228
7229         * cs-parser.jay: Add error production to BASE.
7230
7231         * ecore.cs: Deal with TypeManager.GetField returning null, which
7232         is now a valid return value.
7233
7234         (FieldExprNoAddress): New expression for Fields whose address can
7235         not be taken.
7236
7237         * expression.cs (LocalVariableReference): During the resolve
7238         phases, create new expressions if we are in a remapping context.
7239         Remove code that dealt with remapping here.
7240
7241         (ParameterReference): same.
7242
7243         (ProxyInstance): New expression, like the `This' expression, but
7244         it is born fully resolved.  We know what we are doing, so remove
7245         the errors that are targeted to user-provided uses of `this'.
7246
7247         * statement.cs (Foreach): our variable is now stored as an
7248         Expression;  During resolution, follow the protocol, dont just
7249         assume it will return this.
7250
7251 2003-08-06  Martin Baulig  <martin@ximian.com>
7252
7253         * support.cs (SeekableStreamReader.cs): New public class.
7254
7255         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
7256         SeekableStreamReader instead of the normal StreamReader.
7257
7258 2003-08-04  Martin Baulig  <martin@ximian.com>
7259
7260         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
7261         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
7262         deambiguate casts and delegate invocations.
7263         (parenthesized_expression): Use the new tokens to ensure this is
7264         not a cast of method invocation.
7265
7266         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
7267         when reading a `)' and Deambiguate_CloseParens () was previously
7268         called.
7269
7270         * expression.cs (ParenthesizedExpression): New class.  This is
7271         just used for the CS0075 test.
7272         (Binary.DoResolve): Check for CS0075.   
7273
7274 2003-07-29  Ravi Pratap  <ravi@ximian.com>
7275
7276         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
7277         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
7278         reference comparison.
7279
7280         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
7281         examine the ReturnType for equality - this is necessary in the
7282         cases of implicit and explicit operators whose signature also
7283         includes the return type.
7284
7285 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
7286
7287         * namespace.cs: Cache the result of the namespace computation,
7288         instead of computing it every time.
7289
7290 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
7291
7292         * decl.cs: Use a global arraylist that we reuse over invocations
7293         to avoid excesive memory consumption.  Reduces memory usage on an
7294         mcs compile by one meg (45 average).
7295
7296         * typemanager.cs (LookupTypeReflection): In .NET pointers are
7297         private, work around that.
7298
7299 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
7300
7301         * literal.cs (IntLiteral): Define Zero and One static literals. 
7302
7303         * cs-parser.jay (integer_literal): use static literals to reduce
7304         memory usage for the most used literals (0, 1 and -1).  211kb
7305         reduced in memory usage.
7306
7307         Replace all calls to `new ArrayList' with `new
7308         ArrayList(4)' which is a good average number for most allocations,
7309         and also requires only 16 bytes of memory for its buffer by
7310         default. 
7311
7312         This reduced MCS memory usage in seven megabytes for the RSS after
7313         bootstrapping.
7314
7315 2003-07-28  Ravi Pratap  <ravi@ximian.com>
7316
7317         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
7318         handle params methods the correct way by forming only one
7319         applicable set with params and normal methods in them. Earlier we
7320         were looking at params methods only if we found no normal methods
7321         which was not the correct thing to do.
7322
7323         (Invocation.BetterFunction): Take separate arguments indicating
7324         when candidate and the best method are params methods in their
7325         expanded form.
7326
7327         This fixes bugs #43367 and #46199.
7328
7329         * attribute.cs: Documentation updates.
7330
7331         (CheckAttribute): Rename to CheckAttributeTarget.
7332         (GetValidPlaces): Rename to GetValidTargets.
7333
7334         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
7335         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
7336
7337         Fixes bug #44468.
7338
7339 2003-07-28  Miguel de Icaza  <miguel@ximian.com>
7340
7341         * codegen.cs: Compute IsGeneric correctly.
7342
7343         * cs-parser.jay: Introduce OP_GENERIC_LT for the grammar ambiguity
7344         resolution. 
7345
7346         Bring back (temporarily) OP_LEFT_SHIFT, OP_RIGHT_SHIFT,
7347         OP_SHIFT_RIGHT_ASSIGN, OP_SHIFT_LEFT_ASSIGN.  There were too many
7348         regressions, and I was chasing more bugs than I required.
7349
7350         * interface.cs: Use expressions for base type names (like classes
7351         and structs have been doing for a while now), and resolve that.
7352         This patch should probably go into head as well.
7353
7354         This makes it one less user of FindType.
7355
7356 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
7357
7358         This compiler can not self host currently.  Need to fix that.
7359         
7360         * Makefile: compile to `gmcs.exe'
7361
7362         * driver.cs: Turn on v2 by default on gmcs.
7363
7364         * generic.cs (ConstructedType): Does no longer take a container
7365         type argument;  That will be taken care of later.
7366
7367         (ConstructedType.DoResolve, ConstructedType.ResolveAsTypeStep):
7368         Use SimpleName to resolve for now, so we can continue the work on
7369         the parser, until we get Type.GetType that understands generics.
7370
7371         (ConstructedType.ToString): Implement
7372
7373         (TypeArguments.Resolve): Resolve the child expressions as types. 
7374         
7375         * cs-parser.jay: Rename interface_constraints to
7376         type_parameter_constraints
7377
7378         (namespace_or_type_name): Only use constructed types for the basic
7379         construction, we will deal with identifier<...> later.
7380
7381         (type/type_name): No longer call DecomposeQI, as
7382         namespace_or_type_name is always decoded now.
7383         
7384 2003-07-22  Ravi Pratap  <ravi@ximian.com>
7385
7386         * expression.cs (Invocation.OverloadResolve): Follow the spec more
7387         closely: we eliminate methods in base types when we have an
7388         applicable method in a top-level type.
7389
7390         Please see section 14.5.5.1 for an exact description of what goes
7391         on. 
7392
7393         This fixes bug #45127 and a host of other related to corlib compilation.
7394
7395         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
7396         array is the method corresponding to the top-level type (this is
7397         because of the changes made to icall.c) so we change this
7398         accordingly.
7399
7400         (MethodGroupExpr.Name): This too.
7401
7402         * typemanager.cs (GetElementType): New method which does the right
7403         thing when compiling corlib. 
7404
7405         * everywhere: Make use of the above in the relevant places.
7406
7407 2003-07-22  Martin Baulig  <martin@ximian.com>
7408
7409         * cs-parser.jay (invocation_expression): Moved
7410         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
7411         `cast_expression', but create a InvocationOrCast which later
7412         resolves to either an Invocation or a Cast.
7413
7414         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
7415         method; call this before EmitStatement() to make sure that this
7416         expression can be used as a statement.
7417
7418         * expression.cs (InvocationOrCast): New class; resolves to either
7419         an Invocation or a Cast.
7420
7421         * statement.cs (StatementExpression): Call ResolveStatement() on
7422         the ExpressionStatement before emitting it.
7423
7424 2003-07-21  Martin Baulig  <martin@ximian.com>
7425
7426         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
7427         `ref' and `out' attributes match; fixes #46220.
7428         (MemberAccess.ResolveMemberAccess): You can't reference a type
7429         through an expression; fixes #33180.
7430         (Indexers.GetIndexersForType): Don't return the indexers from
7431         interfaces the class implements; fixes #46502.
7432
7433 2003-07-21  Martin Baulig  <martin@ximian.com>
7434
7435         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
7436         CS0661 checks; fixes bug #30442.
7437
7438 2003-07-21  Martin Baulig  <martin@ximian.com>
7439
7440         * decl.cs (AdditionResult): Added `Error'.
7441
7442         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
7443
7444         * typemanager.cs (TypeManager.ChangeType): Catch exceptions; makes
7445         cs0031.cs actually work.
7446
7447  2003-07-20  Miguel de Icaza  <miguel@ximian.com>
7448  
7449         * cs-parser.jay (namespace_name): do not use
7450         namespace_or_type_name, use qualified_identifier, because
7451         namespace_or_type_name will soon return a composed expression
7452         instead of a string.
7453  
7454         (namespace_or_type_name): Instead of returning a string, now this
7455         production returns an expression.
7456  
7457         * codegen.cs (EmitContext): Setup IsGeneric property based on
7458         whether our DeclSpace is generic, our the method is generic.
7459  
7460         * modifier.cs (Modifiers.METHOD_GENERIC): New definition, use if
7461         the method is generic.
7462  
7463         * cs-parser.jay (type_arguments, opt_type_argument_list,
7464         type_parameters, type_parameter_list, opt_type_parameter_list,
7465         type_parameter,, opt_type_parameter_constraints_clauses,
7466         type_parameter_constraints_clauses,
7467         type_parameter_constraint_clause, type_parameter_constraint,
7468         interface_constraints): Add new production
7469  
7470         * decl.cs (DeclSpace): IsGeneric, flag to track whether this
7471         DeclSpace is generic or not.
7472  
7473         (DeclSpace.SetParameterInfo): New routine, used to set the
7474         parameter info for a type.
7475  
7476         (DeclSpace.LookupGeneric): Lookups a name, and if it is a generic,
7477         returns a GenericTypeExpr
7478  
7479         * ecore.cs (SimpleName.ResolveAsTypeStep): If our container is
7480         generic, lookup the generic argument.
7481  
7482         * attribute.cs: Do not allow TypeParameterExpressions in
7483         Attributes.
7484  
7485         * class.cs: Do not allow the Main method to be defined in a
7486         Generic container.
7487  
7488         * expression.cs (SizeOf): Do not allow generic types to be used as
7489         arguments to sizeof.
7490  
7491         * typemanager.cs (IsGeneric): Wrapper for Reflection when we have
7492         it: whether a type is generic or not.  Only works for types we are
7493         currently building for now.
7494         
7495 2003-07-20  Martin Baulig  <martin@ximian.com>
7496
7497         * namespace.cs: Fixed that bug which caused a crash when compiling
7498         the debugger's GUI.
7499
7500 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
7501
7502         * typemanager.cs (LookupTypeReflection): Never expose types which
7503         are NotPublic, NestedPrivate, NestedAssembly, or
7504         NestedFamANDAssem.  We used to return these, and later do a check
7505         that would report a meaningful error, but the problem is that we
7506         would not get the real match, if there was a name override.
7507
7508 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
7509
7510         * namespace.cs (Namespace, Name): Do not compute the namespace
7511         name dynamically, compute it in the constructor.  This reduced
7512         memory usage by 1697 KB.
7513
7514         * driver.cs: Use --pause to pause at the end.
7515
7516 2003-07-17  Peter Williams  <peter@newton.cx>
7517
7518         * Makefile: Change the name of the test target so that it doesn't
7519         conflict with the recursive test target.
7520
7521 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
7522
7523         * expression.cs (LocalVariableReference.Emit, EmitAssign,
7524         AddressOf): Do not use EmitThis, that was wrong, use the actual
7525         this pointer.
7526
7527 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
7528
7529         * class.cs (MethodData.Define): While checking if a method is an
7530         interface implementation, improve the test: If we are not public
7531         (use new test here: use the computed MethodAttributes directly,
7532         instead of the parsed modifier flags) check if the `implementing'
7533         method comes from an interface or not.
7534
7535         * pending.cs (VerifyPendingMethods): Slightly better error
7536         message.
7537
7538         * makefile: add test target that does the mcs bootstrap.
7539
7540 2003-07-16  Ravi Pratap  <ravi@ximian.com>
7541
7542         * interface.cs (Define): Do nothing here since there are no
7543         members to populate etc. Move the attribute emission out of here
7544         since this was just totally the wrong place to put it. Attribute
7545         application happens during the 'Emit' phase, not in the 'Define'
7546         phase.
7547
7548         (Emit): Add this method and move the attribute emission here
7549
7550         * rootcontext.cs (EmitCode): Call the Emit method on interface
7551         types too.
7552
7553 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
7554
7555         * expression.cs (OverloadResolve): Report error only if Location
7556         is not 'Null' which means that there was a probe going on.
7557
7558 2003-07-14  Martin Baulig  <martin@ximian.com>
7559
7560         * expression.cs (ConditionalLogicalOperator): New public class to
7561         implement user defined conditional logical operators.
7562         This is section 14.11.2 in the spec and bug #40505.
7563
7564 2003-07-14  Martin Baulig  <martin@ximian.com>
7565
7566         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
7567
7568 2003-07-14  Martin Baulig  <martin@ximian.com>
7569
7570         * codegen.cs (EmitContext.InFixedInitializer): New public field.
7571
7572         * ecore.cs (IVariable.VerifyFixed): New interface method.
7573
7574         * expression.cs (Unary.ResolveOperator): When resolving the `&'
7575         operator, check whether the variable is actually fixed.  Fixes bug
7576         #36055.  Set a variable definitely assigned when taking its
7577         address as required by the spec.
7578
7579         * statement.cs (LocalInfo.IsFixed): New field.
7580         (LocalInfo.MakePinned): Set `IsFixed' to true.
7581
7582 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
7583
7584         * attribute.cs (Attribute.Resolve): While doing a Member lookup
7585         for .ctors, ensure that we only ask for members declared in the
7586         attribute type (BindingFlags.DeclaredOnly).
7587
7588         Fixes bug #43632.
7589
7590         * expression.cs (Error_WrongNumArguments): Report error 1501
7591         correctly the way CSC does.
7592
7593 2003-07-13  Martin Baulig  <martin@ximian.com>
7594
7595         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
7596         lookup on the fully qualified name, to make things like "X.X" work
7597         where "X.X" is a fully qualified type name, but we also have a
7598         namespace "X" in the using list.  Fixes #41975.
7599
7600 2003-07-13  Martin Baulig  <martin@ximian.com>
7601
7602         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
7603         function. If we're a CompoundAssign, we need to create an embedded
7604         CompoundAssign, not an embedded Assign.
7605         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
7606         Fixes #45854.
7607
7608 2003-07-13  Martin Baulig  <martin@ximian.com>
7609
7610         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
7611         work to fix bug #46088.
7612
7613 2003-07-13  Ravi Pratap <ravi@ximian.com>
7614
7615         * class.cs (Operator.Emit): Do not emit attributes here - it is
7616         taken care of by the Method class that we delegate too. This takes
7617         care of bug #45876.
7618
7619 2003-07-10  Martin Baulig  <martin@ximian.com>
7620
7621         * expression.cs (TypeOfVoid): New class.
7622         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
7623
7624 2003-07-10  Martin Baulig  <martin@ximian.com>
7625
7626         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
7627         bug #35957.
7628
7629 2003-07-10  Martin Baulig  <martin@ximian.com>
7630
7631         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
7632         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
7633
7634         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
7635
7636         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
7637
7638 2003-07-10  Martin Baulig  <martin@ximian.com>
7639
7640         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
7641         of decimal.  Fixes #42850.
7642
7643         NOTE: I also fixed the created byte blob, but this doesn't work on
7644         the MS runtime and csc never produces any byte blobs for decimal
7645         arrays.
7646
7647 2003-07-10  Martin Baulig  <martin@ximian.com>
7648
7649         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
7650         structs; fixes #32068.
7651         (Block.AddChildVariableNames): Fixed #44302.
7652
7653 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7654
7655         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
7656
7657 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
7658
7659         * attribute.cs: And this test is onger needed.
7660
7661 2003-07-08  Martin Baulig  <martin@ximian.com>
7662
7663         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
7664         inaccessible types.  Fixes #36313.
7665
7666         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
7667
7668         * namespace.cs (NamespaceEntry): Create implicit entries for all
7669         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
7670         implicit entries for N1.N2 and N1.
7671
7672 2003-07-08  Martin Baulig  <martin@ximian.com>
7673
7674         Rewrote the handling of namespaces to fix a lot of the issues
7675         wrt. `using' aliases etc.
7676
7677         * namespace.cs (Namespace): Splitted this class into a
7678         per-assembly `Namespace' and a per-file `NamespaceEntry'.
7679
7680         * typemanager.cs (TypeManager.IsNamespace): Removed.
7681         (TypeManager.ComputeNamespaces): Only compute namespaces from
7682         loaded assemblies here, not the namespaces from the assembly we're
7683         currently compiling.
7684
7685 2003-07-08  Martin Baulig  <martin@ximian.com>
7686
7687         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
7688
7689 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
7690
7691         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
7692         already fixed it.  
7693
7694         I thought about the memory savings here, but LookupTypeReflection
7695         is used under already very constrained scenarios.  Compiling
7696         corlib or mcs only exposes one hit, so it would not really reduce
7697         any memory consumption.
7698
7699 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7700
7701         * typemanager.cs: fixes bug #45889 by only adding public types from
7702         other assemblies to the list of known types.
7703
7704 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
7705
7706         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
7707         on the type we resolved.
7708
7709 2003-07-05  Martin Baulig  <martin@ximian.com>
7710
7711         * pending.cs (PendingImplementation.ParentImplements): Don't
7712         create the proxy if the parent is abstract.
7713
7714         * class.cs (TypeContainer.DefineIndexers): Process explicit
7715         interface implementations first.  Fixes #37714.
7716
7717 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
7718
7719         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
7720         defined recursively;  but since we modify the input parameters
7721         (left is set to `this' temporarily), we reset this value if the
7722         left_is_explicit is false, which gives the original semantics to
7723         the code.  
7724
7725         * literal.cs (NullPointer): new class used to represent a null
7726         literal in a pointer context.
7727
7728         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
7729         type is a pointer, use a NullPointer object instead of a
7730         NullLiteral.   Closes 43687
7731
7732         (ExplicitConversion): Convert pointer values using
7733         the conv opcode to the proper type.
7734
7735         * ecore.cs (New): change ValueTypeVariable property into a method,
7736         that returns whether the valuetype is suitable for being used.
7737
7738         * expression.cs (Binary.DoNumericPromotions): Only return if we
7739         the int constant was a valid uint, and we can return both left and
7740         right as uints.  If not, we continue processing, to trigger the
7741         type conversion.  This fixes 39018.
7742
7743         * statement.cs (Block.EmitMeta): During constant resolution, set
7744         the CurrentBlock property on the emitcontext, so that we resolve
7745         constants propertly.
7746
7747 2003-07-02  Martin Baulig  <martin@ximian.com>
7748
7749         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
7750         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
7751
7752         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
7753         than emitting it here.
7754
7755         * statement.cs: Fixed some more flow analysis bugs.
7756
7757 2003-07-02  Martin Baulig  <martin@ximian.com>
7758
7759         * class.cs (MethodData.Define): When implementing interface
7760         methods, set Final unless we're Virtual.
7761
7762         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
7763         check work for interface methods.
7764
7765 2003-07-01  Martin Baulig  <martin@ximian.com>
7766
7767         * ecore.cs (EmitContext.This): Replaced this property with a
7768         GetThis() method which takes a Location argument.  This ensures
7769         that we get the correct error location for a CS0188.
7770
7771 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
7772
7773         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
7774         ImplicitStandardConversion.
7775
7776         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
7777
7778 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
7779
7780         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
7781         optimization.
7782
7783 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
7784
7785         * class.cs (Constructor.Define): Turn off initlocals for unsafe
7786         constructors.
7787
7788         (MethodData.Define): Turn off initlocals for unsafe methods.
7789
7790 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
7791
7792         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
7793         complete;  Fixes #37521.
7794
7795         * delegate.cs: Use Modifiers.TypeAttr to compute the
7796         TypeAttributes, instead of rolling our own.  This makes the flags
7797         correct for the delegates.
7798
7799 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
7800
7801         * class.cs (Constructor.Define): Set the private flag for static
7802         constructors as well.
7803
7804         * cs-parser.jay (statement_expression): Set the return value to
7805         null, to avoid a crash when we catch an error.
7806
7807 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
7808
7809         * cs-parser.jay: Applied patch from Jackson that adds support for
7810         extern and unsafe modifiers to destructor declarations.
7811
7812         * expression.cs: Report error 21 if the user is trying to index a
7813         System.Array.
7814
7815         * driver.cs: Add an error message, suggested by the bug report.
7816
7817         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
7818         if we do not have a ": this ()" constructor initializer.  Fixes 45149
7819
7820 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
7821
7822         * namespace.cs: Add some information to reduce FAQs.
7823
7824 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
7825
7826         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
7827         underlying enumeration types.  Fixes #43915.
7828
7829         * expression.cs: Treat ushort/short as legal values to be used in
7830         bitwise operations.
7831
7832 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
7833
7834         * delegate.cs: transfer custom attributes for paramenters from
7835         the delegate declaration to Invoke and BeginInvoke.
7836
7837 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
7838
7839         * attribute.cs: handle custom marshalers and emit marshal info
7840         for fields, too.
7841
7842 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
7843
7844         * makefile.gnu: Added anonymous.cs to the compiler sources.
7845
7846 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
7847
7848         * iterators.cs: Change the name of the proxy class to include two
7849         underscores.
7850
7851         * cs-parser.jay: Update grammar to include anonymous methods.
7852
7853         * anonymous.cs: new file.
7854
7855 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
7856
7857         * class.cs (Field.Define): Add missing test for pointers and
7858         safety. 
7859
7860 2003-05-27  Ravi Pratap  <ravi@ximian.com>
7861
7862         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
7863         we use the stobj opcode.
7864
7865         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
7866         since it wasn't the correct fix. 
7867
7868         It still is puzzling that we are required to use stobj for IntPtr
7869         which seems to be a ValueType.
7870
7871 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
7872
7873         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
7874         during regular simple name resolution.   Now, the trick is that
7875         instead of returning for processing the simplename, we do a
7876         TypeManager.LookupType (ie, a rooted lookup as opposed to a
7877         contextual lookup type).   If a match is found, return that, if
7878         not, return for further composition.
7879
7880         This fixes long-standing 30485.
7881
7882         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
7883         using the address to initialize an object, do an Stobj instead of
7884         using the regular Stelem.
7885
7886         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
7887         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
7888         Because if we are a BaseIndexerAccess that value will be true.
7889         Fixes 43643.
7890
7891         * statement.cs (GotoCase.Resolve): Return after reporting an
7892         error, do not attempt to continue. 
7893
7894         * expression.cs (PointerArithmetic.Emit): If our operand is a
7895         long, convert our constants to match the operand before
7896         multiplying.  Convert to I type before adding.   Fixes 43670.
7897
7898 2003-05-14  Ravi Pratap  <ravi@ximian.com>
7899
7900         * enum.cs (ImplicitConversionExists) : Rename to
7901         ImplicitEnumConversionExists to remove ambiguity. 
7902
7903         * ecore.cs (NullCast): New type of cast expression class which
7904         basically is very similar to EmptyCast with the difference being
7905         it still is a constant since it is used only to cast a null to
7906         something else
7907         (eg. (string) null)
7908
7909         * convert.cs (ImplicitReferenceConversion): When casting a null
7910         literal, we return a NullCast.
7911
7912         * literal.cs (NullLiteralTyped): Remove - I don't see why this
7913         should be around anymore.
7914
7915         The renaming (reported was slightly wrong). Corrections:
7916
7917         ConvertImplicitStandard -> ImplicitConversionStandard
7918         ConvertExplicitStandard -> ExplicitConversionStandard
7919
7920         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
7921         before passing them in !
7922
7923         * convert.cs (ImplicitConversionStandard): When comparing for
7924         equal expr and target types, ensure that expr is not a
7925         NullLiteral.
7926
7927         In general, we must not be checking (expr_type ==
7928         target_type) in the top level conversion methods
7929         (ImplicitConversion, ExplicitConversion etc). This checking is
7930         done in the methods that they delegate to.
7931
7932 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
7933
7934         * convert.cs: Move Error_CannotConvertType,
7935         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
7936         ImplicitNumericConversion, ImplicitConversionExists,
7937         ImplicitUserConversionExists, StandardConversionExists,
7938         FindMostEncompassedType, FindMostSpecificSource,
7939         FindMostSpecificTarget, ImplicitUserConversion,
7940         ExplicitUserConversion, GetConversionOperators,
7941         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
7942         TryImplicitIntConversion, Error_CannotConvertImplicit,
7943         ConvertImplicitRequired, ConvertNumericExplicit,
7944         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
7945         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
7946         its own file.
7947
7948         Perform the following renames:
7949
7950         StandardConversionExists -> ImplicitStandardConversionExists
7951         ConvertImplicit -> ImplicitConversion
7952         ConvertImplicitStandard -> ImplicitStandardConversion
7953         TryImplicitIntConversion -> ImplicitIntConversion
7954         ConvertImplicitRequired -> ImplicitConversionRequired
7955         ConvertNumericExplicit -> ExplicitNumericConversion
7956         ConvertReferenceExplicit -> ExplicitReferenceConversion
7957         ConvertExplicit -> ExplicitConversion
7958         ConvertExplicitStandard -> ExplicitStandardConversion
7959
7960 2003-05-19  Martin Baulig  <martin@ximian.com>
7961
7962         * statement.cs (TypeInfo.StructInfo): Made this type protected.
7963         (TypeInfo): Added support for structs having structs as fields.
7964
7965         * ecore.cs (FieldExpr): Implement IVariable.
7966         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
7967         VariableInfo for the field.
7968
7969 2003-05-18  Martin Baulig  <martin@ximian.com>
7970
7971         * expression.cs (This.DoResolve): Report a CS0027 if we're
7972         emitting a field initializer.
7973
7974 2003-05-18  Martin Baulig  <martin@ximian.com>
7975
7976         * expression.cs (This.ResolveBase): New public function.
7977         (This.DoResolve): Check for CS0188.
7978
7979         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
7980         This.Resolve().
7981
7982         * ecore.cs (MethodGroupExpr.DoResolve): Set the
7983         `instance_expression' to null if we don't have any non-static
7984         methods.
7985
7986 2003-05-18  Martin Baulig  <martin@ximian.com>
7987
7988         Reworked the way how local variables and parameters are handled by
7989         the flow analysis code.
7990
7991         * statement.cs (TypeInfo, VariableMap): New public classes.
7992         (VariableInfo): New public class.  This is now responsible for
7993         checking whether a variable has been assigned.  It is used for
7994         parameters and local variables.
7995         (Block.EmitMeta): Take the InternalParameters as argument; compute
7996         the layout of the flow vectors here.
7997         (Block.LocalMap, Block.ParameterMap): New public properties.
7998         (FlowBranching): The .ctor doesn't get the InternalParameters
7999         anymore since Block.EmitMeta() now computes the layout of the flow
8000         vector.
8001         (MyStructInfo): This class is now known as `StructInfo' and nested
8002         in `TypeInfo'; we don't access this directly anymore.
8003
8004         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
8005         property and removed IsAssigned(), IsFieldAssigned(),
8006         SetAssigned() and SetFieldAssigned(); we now call them on the
8007         VariableInfo so we don't need to duplicate this code everywhere.
8008
8009         * expression.cs (ParameterReference): Added `Block block' argument
8010         to the .ctor.
8011         (LocalVariableReference, ParameterReference, This): The new
8012         VariableInfo class is now responsible for all the definite
8013         assignment stuff.
8014
8015         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
8016         IsParameterAssigned, SetParameterAssigned): Removed.
8017
8018 2003-05-18  Martin Baulig  <martin@ximian.com>
8019
8020         * typemanager.cs (InitCoreTypes): Try calling
8021         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
8022         the 3-args-version.  Corlib now also needs our `void_type'.
8023         (GetMethod): Added overloaded version which takes an optional
8024         `bool report_errors' to allow lookups of optional methods.
8025
8026 2003-05-12  Martin Baulig  <martin@ximian.com>
8027
8028         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
8029         only used for locals and not for parameters.
8030
8031 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
8032
8033         * support.cs (InternalParameters.ParameterType): Return the
8034         ExternalType of the parameter.
8035
8036         * parameter.cs (Parameter.ExternalType): drop the two arguments,
8037         they were unused.
8038
8039 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
8040
8041         * class.cs (MethodData.Define): Do not set the `newslot' on
8042         interface members, if they are also flagged as "override".
8043
8044         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
8045         better code for ++i and i++.  This only works for static fields
8046         and local variables.
8047
8048         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
8049         want to pull the DeclSpace out of the builder_to_declspace instead
8050         of the TypeBuilder (like in TypeContainer.FindMembers).
8051
8052         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
8053         instead of LookupTypeContainer.  Fixes the crash on .NET for
8054         looking up interface members.
8055
8056         * const.cs: Create our own emit context during the Definition
8057         stage, so that constants are evaluated in the proper context, when
8058         a recursive definition happens.
8059
8060 2003-05-11  Martin Baulig  <martin@ximian.com>
8061
8062         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
8063         new block for a switch section.
8064         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
8065         the adding/lookup in the switch block.  Fixes #39828.
8066
8067 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
8068
8069         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
8070         functionality: I needed to convert the data after I had performed
8071         the add/sub operation into the operands type size.
8072
8073         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
8074         pass the type for the box operation, otherwise the resulting
8075         object would have been of type object.
8076
8077         (BoxedCast): Add constructor to specify the type to box as.
8078
8079 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
8080
8081         * iterators.cs: I was reusing the `count' variable inadvertently,
8082         take steps to not allow this to happen.
8083
8084 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
8085
8086         * attribute.cs (Attribute.Resolve): Params attributes are encoded
8087         by creating an array at the point where the params starts and
8088         putting all those arguments there, then adjusting the size of the
8089         array.
8090
8091 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
8092
8093         * expression.cs (New.AddressOf): Implement interface
8094         IMemoryLocation.  This is used when the `new' operator is used in
8095         the context of an invocation to a method on a value type.
8096
8097         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
8098         example. 
8099
8100         * namespace.cs: Also check the using aliases here.
8101
8102         * driver.cs: Move the test for using validity after the types have
8103         been entered, so we do a single pass that also includes the using
8104         aliases. 
8105
8106         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
8107         in the regular case.   CreateSiblingForFinally is doing extra
8108         error checking.
8109
8110         * attribute.cs (GetAttributeArgumentExpression): Store the result
8111         on an out value, and use the return value to indicate failure
8112         instead of using null (which is a valid return for Constant.GetValue).
8113
8114         * statement.cs: Perform the analysis flow for the increment
8115         portion after the statement, because this will be the real flow of
8116         execution.  Fixes #42385
8117
8118         * codegen.cs (EmitContext.EmitArgument,
8119         EmitContext.EmitStoreArgument): New helper functions when the
8120         RemapToProxy flag is set.
8121
8122         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
8123         function.
8124
8125         Add support for remapping parameters. 
8126
8127         * iterators.cs: Propagate parameter values;  Store parameter
8128         values in the proxy classes.
8129
8130 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
8131
8132         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
8133         need a proxy reference;  I do not know what I was thinking
8134
8135         * cs-parser.jay (constructor_initializer): catch another error,
8136         and display nice message.
8137
8138         (field_declaration): catch void field declaration
8139         to flag a better error. 
8140
8141         * class.cs (MemberBase.CheckBase): Report an error instead of a
8142         warning if a new protected member is declared in a struct. 
8143         (Field.Define): catch the error of readonly/volatile.
8144
8145         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
8146
8147         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
8148         volatile variable is taken
8149
8150 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
8151
8152         * statement.cs (Fixed.Resolve): Report an error if we are not in
8153         an unsafe context.
8154
8155 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
8156
8157         * typemanager.cs: reuse the code that handles type clashes for
8158         delegates and enumerations.
8159
8160         * class.cs (Report28): Always report.
8161
8162         * expression.cs (EncodeAsAttribute): Allow nulls here.
8163
8164 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
8165
8166         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
8167         the functionality for testing whether an expression is valid for
8168         an attribute here.  Also handle the case of arrays of elements
8169         being stored. 
8170
8171         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
8172         encoding a linear array into an array of objects that are suitable
8173         to be passed to an CustomAttributeBuilder.
8174
8175         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
8176
8177         * ecore.cs: (FieldExpr): Handle field remapping here.
8178
8179         * iteratators.cs: Pass the instance variable (if the method is an
8180         instance method) to the constructors, so we can access the field
8181         variables on the class.
8182
8183         TODO: Test this with structs.  I think the THIS variable on
8184         structs might have to be a pointer, and not a refenrece
8185
8186 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
8187
8188         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
8189         local variables to fields in a proxy class.
8190
8191         * iterators.cs (PopulateProxy): Rename our internal fields to
8192         <XXX>.  
8193         Create a <THIS> field if we are an instance method, so we can
8194         reference our parent container variables.
8195         (MapVariable): Called back from the EmitContext code to enter a
8196         new variable to field mapping into the proxy class (we just create
8197         a FieldBuilder).
8198
8199         * expression.cs
8200         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
8201         for using the remapped locals to fields.
8202
8203         I placed the code here, because that gives the same semantics to
8204         local variables, and only changes the Emit code.
8205
8206         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
8207         statements inside iterators.
8208         (VariableInfo): Add a FieldBuilder for the cases when we are
8209         remapping local variables to fields in a proxy class
8210
8211         * ecore.cs (SimpleNameResolve): Avoid testing two times for
8212         current_block != null.
8213
8214         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
8215         not cope with strings, as it has been moved to the
8216         TableSwitchEmit.  Fixed bug in switch generation.
8217
8218         * expression.cs (New.DoResolve): Provide more context for the user
8219         when reporting an error.
8220
8221         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
8222         pointers. 
8223
8224         * expression.cs (MemberAccess.DoResolve): When we get a type back,
8225         check the permissions for it.  Note than in a type-resolution
8226         context the check was already present in DeclSpace.ResolveType,
8227         but was missing from the MemberAccess.
8228
8229         (ArrayCreation.CheckIndices): warn if the user has
8230         more nested levels of expressions, but there are no more
8231         dimensions specified.  Avoids crash on bug 41906.
8232
8233 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
8234
8235         * statement.cs (Block): replace Implicit bool, for a generic
8236         flags.   
8237         New flag: `Unchecked'.  This is used during the EmitMeta phase
8238         (which is out-of-line with the regular Resolve/Emit process for a
8239         statement, as this is done ahead of time, but still gets a chance
8240         to call constant resolve).
8241
8242         (Block.Flags): new enum for adding a new flag.
8243
8244         (Block.EmitMeta): track the state of unchecked.
8245
8246         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
8247         to enable constant resolution to work there as well.
8248
8249 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
8250
8251         * typemanager.cs (ienumerable_type): Also look up
8252         System.Collections.IEnumerable. 
8253
8254 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
8255
8256         TODO: Test more than one conditional per method.
8257
8258         * class.cs (Indexer.Define): Report the location where the user is
8259         referencing the unsupported feature.
8260
8261         (MethodData): Overload the use of `conditionals' to
8262         minimize the creation of needless ArrayLists.   This saves roughly
8263         212kb on my machine.
8264
8265         (Method): Implement the new IIteratorContainer interface.
8266         (Method.SetYields): Implement the method by setting the ModFlags
8267         to contain METHOD_YIELDS.
8268
8269         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
8270         which just got set to null.
8271
8272         * iterators.cs: New file.
8273
8274         (Yield, YieldBreak): New statements.
8275
8276         * statement.cs (Return.Resolve): Flag an error if we are used in
8277         an iterator method.
8278
8279         * codegen.cs (InIterator): New flag set if the code is being
8280         compiled in an iterator method.
8281
8282         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
8283         internal modifier, and we just use it to avoid adding extra
8284         fields, as this is seldom used.  
8285
8286         * cs-parser.jay: Add yield_statement (yield and yield break).
8287
8288         * driver.cs: New flag -v2 to turn on version 2 features. 
8289
8290         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
8291         hashtable when v2 is enabled.
8292
8293 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
8294
8295         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
8296         there is already a namespace defined with this name.
8297
8298         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
8299         people upgraded their corlibs.
8300
8301         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
8302         always use fully qualified types, no need to use the compiler
8303         front end.
8304
8305         (TypeManager.IsNamespace): Use binarysearch.
8306
8307         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
8308         AddDelegate): I did not quite use the new IsValid API properly: I
8309         have to pass the short-name and the fullname.  I was passing only
8310         the basename instead of the fullname sometimes. 
8311
8312         (TypeContainer.DefineType): call NamespaceClash.
8313
8314         * interface.cs (Interface.DefineType): use NamespaceClash before
8315         defining the type.
8316
8317         * delegate.cs (Delegate.DefineType): use NamespaceClash before
8318         defining the type.
8319
8320         * enum.cs: (Enum.DefineType): use NamespaceClash before
8321         defining the type.
8322
8323         * typemanager.cs (: 3-line patch that gives us some tasty 11%
8324         speed increase.  First, use the negative_hits cache when we get a
8325         negative.  Second, add the type with its full original name
8326         instead of the new . and + encoded name (reflection uses + to
8327         separate type from a nested type).  Use LookupTypeReflection
8328         directly which bypasses the type->name hashtable (that we already
8329         know does not contain the type.
8330
8331         * decl.cs (DeclSpace.ResolveTypeExpr): track the
8332         location/container type. 
8333
8334         * driver.cs: When passing utf8, use directly the UTF8Encoding.
8335
8336 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
8337
8338         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
8339
8340         * delegate.cs (NewDelegate.Resolve): Test whether an instance
8341         method is being referenced in the method group from a static
8342         context, and report error 120 if so.
8343
8344         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
8345         Error118. 
8346
8347         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
8348         is created, we create the A namespace).
8349
8350         * cs-parser.jay: A namespace also introduces a DeclarationFound.
8351         Fixes #41591
8352
8353 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
8354
8355         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
8356         invocation to ModuleBuilder.GetType with the same values will
8357         return a new type instance, so we need to cache its return
8358         values. 
8359
8360         * expression.cs (Binary.ResolveOperator): Only allow the compare
8361         operators on enums if they are of the same type.
8362
8363         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
8364         types of ValueType on their own case.  Before we were giving them
8365         the same treatment as objects.
8366
8367         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
8368         fullname.  Short name is used to compare against container name.
8369         Fullname is used to check against defined namespace names.
8370
8371         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
8372         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
8373
8374         (Method.CheckBase): Call parent.
8375         (MemberBase.CheckBase): Check for protected members on sealed
8376         classes.
8377         (PropertyBase.CheckBase): Call parent.
8378         (Field.Define): Call parent.
8379
8380         * report.cs: Negative error codes are now mapped to 8000 - code,
8381         so that the display is render more nicely.
8382
8383         * typemanager.cs: Do not use try/catch, instead report a regular
8384         error. 
8385
8386         (GetPointerType, GetReferenceType): These methods provide
8387         mechanisms to obtain the T* and T& from a T.  We had the code
8388         previously scattered around the code base, and it also used
8389         TypeManager.LookupType that would go through plenty of caches.
8390         This one goes directly to the type source.
8391
8392         In some places we did the Type.GetType followed by
8393         ModuleBuilder.GetType, but not in others, so this unifies the
8394         processing as well.
8395
8396         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
8397         statements now that we have namespace information.
8398
8399         * typemanager.cs (IsNamespace): New method, returns whether the
8400         string presented is a namespace or not.
8401
8402         (ComputeNamespaces): New public entry point, computes the list of
8403         available namespaces, using the GetNamespaces API call in Mono, or
8404         the slower version in MS.NET.   
8405
8406         Now before we start the semantic analysis phase, we have a
8407         complete list of namespaces including everything that the user has
8408         provided.
8409
8410         Deleted old code to cache namespaces in .nsc files.
8411
8412 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
8413
8414         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
8415         class/struct location definition Location for the implicit
8416         constructor location.
8417
8418         (Operator.Define): Use the location of the operator for the
8419         implicit Method definition.
8420
8421         (Constructor.Emit): use the constructor location for the implicit
8422         base initializer constructor.
8423
8424         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
8425         and the Expression class now contains two new methods:
8426
8427         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
8428         isolate type lookup from the rest of the resolution process.
8429
8430         Since we use Expressions to hold type definitions due to the way
8431         we parse the input we have historically overloaded Resolve to
8432         perform the Type lookups if a special flag is passed.  Now this is
8433         eliminated and two methods take their place. 
8434
8435         The differences in the two methods between xStep and xTerminal is
8436         that xStep is involved in our current lookup system that uses
8437         SimpleNames to compose a name, while xTerminal is used just to
8438         catch the case where the simplename lookup failed.
8439
8440 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
8441
8442         * expression.cs (ResolveMemberAccess): Remove redundant code.
8443         TypeExpr expressions are always born fully resolved.
8444
8445         * interface.cs (PopulateMethod): Do not lookup the types twice.
8446         We were doing it once during SemanticAnalysis and once during
8447         PopulateMethod.
8448
8449         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
8450         in local variable type definitions, were being returned as a
8451         SimpleName (we decomposed everything into a string), that is
8452         because primary_expression was being used instead of a type in the
8453         grammar (reduce/reduce conflicts).
8454
8455         The part that was wrong is that we converted the expression into a
8456         string (an oversimplification in one hand, compounded with primary
8457         expressions doing string concatenation).
8458
8459         So things like:
8460
8461         A.B.C [] x;
8462
8463         Would return "A.B.C[]" as a SimpleName.  This stopped things like
8464         using clauses from working on this particular context.  And a type
8465         was being matched directly against "A.B.C[]".
8466
8467         We now use the correct approach, and allow for ComposedCast to be
8468         part of the unary expression.  So the "A.B.C []" become a composed
8469         cast of "A.B.C" (as a nested group of MemberAccess with a
8470         SimpleName at the end) plus the rank composition "[]". 
8471
8472         Also fixes 35567
8473
8474 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
8475
8476         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
8477         for the access level checking.
8478
8479         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
8480         `TypeContainer container', because I kept getting confused when I
8481         was debugging this code.
8482
8483         * expression.cs (Indexers): Instead of tracking getters/setters,
8484         we now track them in parallel.  We create one arraylist less, but
8485         most importantly it is possible now for the LValue code to find a
8486         matching get for a set.
8487
8488         (IndexerAccess.DoResolveLValue): Update the code.
8489         GetIndexersForType has been modified already to extract all the
8490         indexers from a type.  The code assumed it did not.
8491
8492         Also make the code set the correct return type for the indexer.
8493         This was fixed a long time ago for properties, but was missing for
8494         indexers.  It used to be void_type.
8495
8496         (Binary.Emit): Test first for doubles instead of
8497         floats, as they are more common.
8498
8499         (Binary.EmitBranchable): Use the .un version of the branch opcodes
8500         when dealing with floats and the <=, >= operators.  This fixes bug
8501         #39314 
8502
8503         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
8504         to load the array value by emitting a load on the foreach variable
8505         type.  This was incorrect.  
8506
8507         We now emit the code to load an element using the the array
8508         variable type, and then we emit the conversion operator.
8509
8510         Fixed #40176
8511
8512 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
8513
8514         * attribute.cs: Avoid allocation of ArrayLists in the common case.
8515
8516 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
8517
8518         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
8519         test for protection before we test for signatures. 
8520
8521         (MethodSignature.ToString): implement.
8522
8523         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
8524         to the case where we reduced into a LongConstant.
8525
8526         * decl.cs (CheckAccessLevel): If the type is an array, we can not
8527         depend on whether the information is acurrate, because the
8528         Microsoft runtime will always claim that the array type is public,
8529         regardless of the real state.
8530
8531         If the type is a pointer, another problem happens: the type is
8532         reported as non-public in Microsoft.  
8533
8534         In both cases we have to call CheckAccessLevel recursively with
8535         the underlying type as the argument to be tested.
8536
8537 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
8538
8539         * assign.cs (Assign.Emit): If we are dealing with a compound
8540         assignment expression, we should use the code path that stores the
8541         intermediate result in a temporary value.  This fixes #40903.
8542
8543         *expression.cs (Indirection.ToString): Provide ToString method for
8544         debugging. 
8545
8546 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
8547
8548         * class.cs: Null out fields holding references to Block objects so
8549         they can be garbage collected.
8550
8551         * expression.cs (OverloadResolve): Remove unused local.
8552
8553 2003-04-07  Martin Baulig  <martin@ximian.com>
8554
8555         * codegen.cs (EmitContext.CurrentFile): New public field.
8556         (EmitContext.Mark): Use the CurrentFile to check whether the
8557         location is in the correct file.
8558         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
8559
8560 2003-04-07  Martin Baulig  <martin@ximian.com>
8561
8562         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
8563
8564         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
8565         location.  [FIXME: The location argument which gets passed to this
8566         method is sometimes wrong!]
8567
8568 2003-04-07  Nick Drochak <ndrochak@gol.com>
8569
8570         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
8571
8572 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
8573
8574         * expression.cs (Indirection.EmitAssign): We were using the
8575         temporary, but returning immediately instead of continuing the
8576         EmitAssing flow.
8577
8578 2003-04-06  Martin Baulig  <martin@ximian.com>
8579
8580         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
8581         if it's a nested child, but also deriving from the outer class.
8582         See test 190.cs.
8583
8584         * typemanager.cs (IsNestedChildOf): Make this work if it's a
8585         nested child, but also deriving from the outer class.  See
8586         test-190.cs.
8587         (FilterWithClosure): We may access private members of the outer
8588         class if we're a nested child and deriving from the outer class.
8589         (RealMemberLookup): Only set `closure_private_ok' if the
8590         `original_bf' contained BindingFlags.NonPublic.
8591
8592 2003-04-05  Martin Baulig  <martin@ximian.com>
8593
8594         * expression.cs (SizeOf.DoResolve): Use ResolveTypeExpr, so we can
8595         probe if its a type parameter, and if so, flag an error.
8596
8597         * decl.cs: Move here the SetParameterInfo code from class.cs.
8598         Handle IsGeneric here.
8599
8600         Handle a variety of errors in the parameter info definition.
8601
8602         * ecore.cs (SimpleName.DoResolveType): Handle look ups for generic
8603         type parameters here.
8604
8605         * cs-parser.jay (class_declaration): report errors for parameters
8606         here as well.
8607
8608 2003-01-21  Miguel de Icaza  <miguel@ximian.com>
8609
8610         * generic.cs: New file, contains support code for generics.
8611
8612         * cs-parser.jay: Remove OP_SHIFT_LEFT, OP_SHIFT_RIGHT,
8613         OP_SHIFT_LEFT_ASSIGN, OP_SHIFT_RIGHT_ASSIGN.
8614
8615         Update parser for the above removals.
8616
8617         * cs-tokenizer.cs: Do not handle <<= or >>= specially.  This is
8618         now taken care of in the parser.
8619
8620 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
8621
8622         * class.cs (Event.Define): Do not allow abstract events to have
8623         initializers. 
8624
8625 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
8626
8627         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
8628         block in event declarations.
8629
8630         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
8631         value type, get its address.
8632
8633         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
8634         leaving a class on the stack instead of a boolean value (int
8635         0/1).  Change the code so we compare against null, and then the
8636         result against zero.
8637
8638         * class.cs (TypeContainer.GetClassBases): We were checking for the
8639         parent class being sealed too late.
8640
8641         * expression.cs (Binary.Emit): For <= and >= when dealing with
8642         floating point values, use cgt.un and clt.un instead of cgt and
8643         clt alone.
8644
8645 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
8646
8647         * statement.cs: Apply the same optimization as MS: skip the 
8648         GetEnumerator returning an IEnumerator, and use the one returning a 
8649         CharEnumerator instead. This allows us to avoid the try-finally block 
8650         and the boxing.
8651
8652 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
8653
8654         * cs-parser.jay: Attributes cannot be applied to
8655                          namespaces. Fixes #40473
8656
8657 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8658
8659         * class.cs:
8660         (Add*): check if the name is valid using the full name for constants,
8661         fields, properties and events.
8662
8663 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
8664
8665         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
8666         char constants to be part of the enumeration.
8667
8668         * expression.cs (Conditional.DoResolve): Add support for operator
8669         true. Implements the missing functionality from 14.12
8670
8671         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
8672         operator true/false as required by the spec.
8673
8674         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
8675         implicit conversion to boolean.
8676
8677         * statement.cs (Statement.ResolveBoolean): A boolean expression is
8678         also one where the type implements `operator true'. 
8679
8680         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
8681         get an expression that will invoke operator true based on an
8682         expression.  
8683
8684         (GetConversionOperators): Removed the hack that called op_True
8685         here.  
8686
8687         (Expression.ResolveBoolean): Move this from Statement.
8688
8689 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
8690
8691         * ecore.cs (FieldExpr): do not allow initialization of initonly
8692         fields on derived classes
8693
8694 2003-03-13  Martin Baulig  <martin@ximian.com>
8695
8696         * statement.cs (Block.Emit): Call ig.BeginScope() and
8697         ig.EndScope() when compiling with debugging info; call
8698         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
8699
8700 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
8701
8702         * expression.cs (Indexers): Do not construct immediately, allow
8703         for new members to be appended as we go.  Fixes 38143
8704
8705 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8706
8707         * expression.cs: save/restore context when resolving an unchecked
8708         expression.
8709
8710 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
8711
8712         * cfold.cs: Catch division by zero in modulus operator during
8713         constant folding.
8714
8715 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
8716
8717         * interface.cs (Interface.DefineMembers): Avoid defining members
8718         twice. 
8719
8720 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
8721
8722         * driver.cs: handle the +/- options for -noconfig
8723
8724         * statement.cs (Unckeched.Resolve): Also track the state of
8725         unchecked in the Resolve phase.
8726
8727 2003-02-27  Martin Baulig  <martin@ximian.com>
8728
8729         * ecore.cs (Expression.MemberLookup): Don't create a
8730         MethodGroupExpr for something which is not a method.  Fixes #38291.
8731
8732 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
8733
8734         * class.cs (MemberBase.CheckParameters): Also check that the type
8735         is unmanaged if it is a pointer.
8736
8737         * expression.cs (SizeOf.Resolve): Add location information.
8738
8739         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
8740         a managed type is declared.
8741
8742         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
8743         parameter modifiers as well.  Fixes bug 38606
8744
8745         * class.cs: Very sad.  Am backing out the speed up changes
8746         introduced by the ArrayList -> Array in the TypeContainer, as they
8747         were not actually that much faster, and introduced a bug (no error
8748         reports on duplicated methods).
8749
8750         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
8751         source first, this will guarantee that we have a valid expression
8752         before calling in lower levels functions that will require a
8753         resolved object.  Then use this original_source in the
8754         target.ResolveLValue instead of the original source that was
8755         passed to us.
8756
8757         Another change.  Use target.Resolve instead of LValueResolve.
8758         Although we are resolving for LValues, we will let the Assign code
8759         take care of that (it will be called again from Resolve).  This
8760         basically allows code like this:
8761
8762         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
8763         class Y { void A (X x) { x [0] += o; }
8764
8765         The problem was that the indexer was trying to resolve for
8766         set_Item (idx, object o) and never finding one.  The real set_Item
8767         was set_Item (idx, X).  By delaying the process we get the right
8768         semantics. 
8769
8770         Fixes bug 36505
8771
8772 2003-02-23  Martin Baulig  <martin@ximian.com>
8773
8774         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
8775         while calling DoEmit ().
8776
8777         * codegen.cs (EmitContext.Mark): Don't mark locations in other
8778         source files; if you use the #line directive inside a method, the
8779         compiler stops emitting line numbers for the debugger until it
8780         reaches the end of the method or another #line directive which
8781         restores the original file.
8782
8783 2003-02-23  Martin Baulig  <martin@ximian.com>
8784
8785         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
8786
8787 2003-02-23  Martin Baulig  <martin@ximian.com>
8788
8789         * statement.cs (Block.AddChildVariableNames): We need to call this
8790         recursively, not just for our immediate children.
8791
8792 2003-02-23  Martin Baulig  <martin@ximian.com>
8793
8794         * class.cs (Event.Define): Always make the field private, like csc does.
8795
8796         * typemanager.cs (TypeManager.RealMemberLookup): Make events
8797         actually work, fixes bug #37521.
8798
8799 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
8800
8801         * delegate.cs: When creating the various temporary "Parameters"
8802         classes, make sure that we call the ComputeAndDefineParameterTypes
8803         on those new parameters (just like we do with the formal ones), to
8804         allow them to be resolved in the context of the DeclSpace.
8805
8806         This fixes the bug that Dick observed in Bugzilla #38530.
8807
8808 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
8809
8810         * expression.cs (ResolveMemberAccess): When resolving a constant,
8811         do not attempt to pull a constant if the value was not able to
8812         generate a valid constant.
8813
8814         * const.cs (LookupConstantValue): Do not report more errors than required.
8815
8816 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8817
8818         * expression.cs: fixes bug #38328.
8819
8820 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
8821
8822         * class.cs: Changed all the various members that can be part of a
8823         class from being an ArrayList to be an Array of the right type.
8824         During the DefineType type_list, interface_list, delegate_list and
8825         enum_list are turned into types, interfaces, delegates and enums
8826         arrays.  
8827
8828         And during the member population, indexer_list, event_list,
8829         constant_list, field_list, instance_constructor_list, method_list,
8830         operator_list and property_list are turned into their real arrays.
8831
8832         Although we could probably perform this operation earlier, for
8833         good error reporting we need to keep the lists and remove the
8834         lists for longer than required.
8835
8836         This optimization was triggered by Paolo profiling the compiler
8837         speed on the output of `gen-sample-program.pl' perl script. 
8838
8839         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
8840         not crash in methods like MemberLookupFailed that use this field.  
8841
8842         This problem arises when the compiler fails to resolve a type
8843         during interface type definition for example.
8844
8845 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
8846
8847         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
8848         inherit from System.Object, so we have to stop at null, not only
8849         when reaching System.Object.
8850
8851 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
8852
8853         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
8854         DeclaredOnly because the parent indexer might have had a different
8855         name, but did not loop until the top of the hierarchy was reached.
8856
8857         The problem this one fixes is 35492: when a class implemented an
8858         indexer from an interface, we were getting the interface method
8859         (which was abstract) and we were flagging an error (can not invoke
8860         abstract method).
8861
8862         This also keeps bug 33089 functioning, and test-148 functioning.
8863
8864         * typemanager.cs (IsSpecialMethod): The correct way of figuring
8865         out if a method is special is to see if it is declared in a
8866         property or event, or whether it is one of the predefined operator
8867         names.   This should fix correctly #36804.
8868
8869 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
8870
8871         The goal here is to remove the dependency on EmptyCast.Peel ().
8872         Killing it completely.
8873
8874         The problem is that currently in a number of places where
8875         constants are expected, we have to "probe" for an EmptyCast, and
8876         Peel, which is not the correct thing to do, as this will be
8877         repetitive and will likely lead to errors. 
8878
8879         The idea is to remove any EmptyCasts that are used in casts that
8880         can be reduced to constants, so we only have to cope with
8881         constants. 
8882
8883         This bug hunt was triggered by Bug 37363 and the desire to remove
8884         the duplicate pattern where we were "peeling" emptycasts to check
8885         whether they were constants.  Now constants will always be
8886         constants.
8887
8888         * ecore.cs: Use an enumconstant here instead of wrapping with
8889         EmptyCast.  
8890
8891         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
8892         throwing me off.  By handling this we can get rid of a few hacks.
8893
8894         * statement.cs (Switch): Removed Peel() code.
8895
8896 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
8897
8898         * class.cs: Location information for error 508
8899
8900         * expression.cs (New.DoResolve): Add a guard against double
8901         resolution of an expression.  
8902
8903         The New DoResolve might be called twice when initializing field
8904         expressions (see EmitFieldInitializers, the call to
8905         GetInitializerExpression will perform a resolve on the expression,
8906         and later the assign will trigger another resolution
8907
8908         This leads to bugs (#37014)
8909
8910         * delegate.cs: The signature for EndInvoke should contain any ref
8911         or out parameters as well.  We were not doing this in the past. 
8912
8913         * class.cs (Field.Define): Do not overwrite the type definition
8914         inside the `volatile' group.  Turns out that volatile enumerations
8915         were changing the type here to perform a validity test, which
8916         broke conversions. 
8917
8918 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
8919
8920         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
8921         and structs, we do not want to load the instance variable
8922
8923         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
8924         enum_type has to be handled like an object reference (implicit
8925         conversions exists from this to object), but the regular IsClass
8926         and IsValueType tests will never return true for this one.
8927
8928         Also we use TypeManager.IsValueType instead of type.IsValueType,
8929         just for consistency with the rest of the code (this is only
8930         needed if we ever use the construct exposed by test-180.cs inside
8931         corlib, which we dont today).
8932
8933 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
8934
8935         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
8936         just InternalCall.
8937
8938 2003-02-09  Martin Baulig  <martin@ximian.com>
8939
8940         * namespace.cs (Namespace..ctor): Added SourceFile argument.
8941         (Namespace.DefineNamespaces): New static public method; this is
8942         called when we're compiling with debugging to add all namespaces
8943         to the symbol file.
8944
8945         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
8946         pass it to the Namespace's .ctor.
8947
8948         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
8949         and MethodBase arguments; pass the namespace ID to the symwriter;
8950         pass the MethodBase instead of the token to the symwriter.
8951         (SymbolWriter.DefineNamespace): New method to add a namespace to
8952         the symbol file.
8953
8954 2003-02-09  Martin Baulig  <martin@ximian.com>
8955
8956         * symbolwriter.cs: New file.  This is a wrapper around
8957         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
8958         methods here in near future.
8959
8960 2003-02-09  Martin Baulig  <martin@ximian.com>
8961
8962         * codegen.cs (EmitContext.Mark): Just pass the arguments to
8963         ILGenerator.MarkSequencePoint() which are actually used by the
8964         symbol writer.
8965
8966 2003-02-09  Martin Baulig  <martin@ximian.com>
8967
8968         * location.cs (SourceFile): New public sealed class.  This
8969         contains the name and an index which is used in the location's token.
8970         (Location): Reserve an appropriate number of bits in the token for
8971         the source file instead of walking over that list, this gives us a
8972         really huge performance improvement when compiling with debugging.
8973
8974         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
8975         `SourceFile' argument instead of a string.
8976         (Driver.ProcessFile): Add all the files via Location.AddFile(),
8977         but don't parse/tokenize here, we need to generate the list of all
8978         source files before we do that.
8979         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
8980         the files.
8981
8982         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
8983         instead of a string.
8984
8985         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
8986         of a string.
8987
8988 2003-02-09  Martin Baulig  <martin@ximian.com>
8989
8990         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
8991         filename on `#line default'.
8992
8993 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
8994
8995         * statement.cs: don't clear the pinned var when the fixed statement
8996         returns from the method (fixes bug#37752).
8997
8998 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
8999
9000         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
9001         to IsValueType.
9002
9003 2003-02-07  Martin Baulig  <martin@ximian.com>
9004
9005         * driver.cs: Removed the `--debug-args' command line argument.
9006
9007         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
9008         automatically by the AsssemblyBuilder.
9009         (CodeGen.InitializeSymbolWriter): We don't need to call any
9010         initialization function on the symbol writer anymore.  This method
9011         doesn't take any arguments.
9012
9013 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
9014
9015         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
9016         from referenced assemblies as well.
9017
9018 2003-02-02  Martin Baulig  <martin@ximian.com>
9019
9020         * class.cs (MethodData.Emit): Generate debugging info for external methods.
9021
9022 2003-02-02  Martin Baulig  <martin@ximian.com>
9023
9024         * class.cs (Constructor.Emit): Open the symbol writer before
9025         emitting the constructor initializer.
9026         (ConstructorInitializer.Emit): Call ec.Mark() to allow
9027         single-stepping through constructor initializers.
9028
9029 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
9030
9031         * class.cs: Handle error 549: do not allow virtual methods in
9032         sealed classes. 
9033
9034 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
9035
9036         * decl.cs: Check access levels when resolving types
9037
9038 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
9039
9040         * statement.cs: Add parameters and locals set in catch blocks that might 
9041         return to set vector
9042
9043 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
9044
9045         * class.cs (Operator): Set the SpecialName flags for operators.
9046
9047         * expression.cs (Invocation.DoResolve): Only block calls to
9048         accessors and operators on SpecialName methods.
9049
9050         (Cast.TryReduce): Handle conversions from char constants.
9051
9052
9053 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
9054
9055         * statement.cs: small memory and time optimization in FlowBranching.
9056
9057 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
9058
9059         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
9060         problem that the last fix but in the other sid (Set).
9061
9062         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
9063         access when there is no indexer in the hierarchy.
9064
9065 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
9066
9067         * class.cs: Combine some if statements.
9068
9069 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9070
9071         * driver.cs: fixed bug #37187.
9072
9073 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
9074
9075         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
9076         any indexer, it's needed to build a list with all the indexers in the
9077         hierarchy (AllGetters), else we have problems. Fixes #35653.
9078
9079 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
9080
9081         * class.cs (MethodData.Define): It is wrong for an interface
9082         implementation to be static in both cases: explicit and implicit.
9083         We were only handling this in one case.
9084
9085         Improve the if situation there to not have negations.
9086
9087         * class.cs (Field.Define): Turns out that we do not need to check
9088         the unsafe bit on field definition, only on usage.  Remove the test.
9089
9090 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9091
9092         * driver.cs: use assembly.Location instead of Codebase (the latest
9093         patch made mcs fail when using MS assemblies).
9094
9095 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
9096
9097         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
9098         get the path to *corlib.dll.
9099
9100 2003-01-21  Nick Drochak <ndrochak@gol.com>
9101
9102         * cs-tokenizer.cs:
9103         * pending.cs:
9104         * typemanager.cs: Remove compiler warnings
9105
9106 2003-01-20  Duncan Mak  <duncan@ximian.com>
9107
9108         * AssemblyInfo.cs: Bump the version number to 0.19.
9109
9110 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9111
9112         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
9113
9114 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
9115
9116         * class.cs (Constructor::Emit): Emit debugging info for constructors.
9117
9118 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
9119
9120         * cs-parser.jay: Small fix: we were not comparing the constructor
9121         name correctly.   Thanks to Zoltan for the initial pointer.
9122
9123 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
9124
9125         * cs-tokenizer.cs: Set file name when specified with #line
9126
9127 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
9128
9129         * cs-parser.jay: Only perform the constructor checks here if we
9130         are named like the class;  This will help provider a better
9131         error.  The constructor path is taken when a type definition is
9132         not found, but most likely the user forgot to add the type, so
9133         report that rather than the constructor error.
9134
9135 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
9136
9137         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
9138         allocations.
9139
9140 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
9141
9142         * cs-parser.jay: Add cleanup call.
9143
9144 2003-01-13  Duncan Mak  <duncan@ximian.com>
9145
9146         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
9147         consistent with other methods.
9148
9149 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
9150
9151         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
9152
9153 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
9154
9155         * attribute.cs: only set GuidAttr to true when we have a
9156         GuidAttribute.
9157
9158 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9159
9160         * ecore.cs:
9161         * expression.cs:
9162         * typemanager.cs: fixes to allow mcs compile corlib with the new
9163         Type.IsSubclassOf fix.
9164
9165 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
9166
9167         * expression.cs (LocalVariableReference.DoResolve): Classify a
9168         constant as a value, not as a variable.   Also, set the type for
9169         the variable.
9170
9171         * cs-parser.jay (fixed_statement): take a type instead of a
9172         pointer_type, so we can produce a better error message later.
9173
9174         * statement.cs (Fixed.Resolve): Flag types that are not pointers
9175         as an error.  
9176
9177         (For.DoEmit): Make inifinite loops have a
9178         non-conditional branch back.
9179
9180         (Fixed.DoEmit): First populate the pinned variables, then emit the
9181         statement, then clear the variables.  Before I was emitting the
9182         code once for each fixed piece.
9183
9184
9185 2003-01-08  Martin Baulig  <martin@ximian.com>
9186
9187         * statement.cs (FlowBranching.MergeChild): A break in a
9188         SWITCH_SECTION does not leave a loop.  Fixes #36155.
9189
9190 2003-01-08  Martin Baulig  <martin@ximian.com>
9191
9192         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
9193         lives in the same number space than `param_map'.  Fixes #36154.
9194
9195 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
9196
9197         * cs-parser.jay (constructor_declaration): Set the
9198         Constructor.ModFlags before probing for it.  This makes the
9199         compiler report 514, 515 and 132 (the code was there, but got
9200         broken). 
9201
9202         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
9203         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
9204         (GotoCase.Resolve): Set `Returns' to ALWAYS.
9205
9206 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
9207
9208         * enum.cs: create the enum static fields using the enum type.
9209
9210 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
9211
9212         * class.cs: don't try to create the ParamBuilder for the return
9213         type if it's not needed (and handle it breaking for the ms runtime
9214         anyway).
9215
9216 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
9217
9218         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
9219
9220 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
9221
9222         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
9223         the command.   This showed up while compiling the JANET source
9224         code, which used \r as its only newline separator.
9225
9226 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
9227
9228         * class.cs (Method.Define): If we are an operator (because it
9229         reuses our code), then set the SpecialName and HideBySig.  #36128
9230
9231 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
9232
9233         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
9234         exception, report error 120 `object reference required'.
9235
9236         * driver.cs: Add --pause option, used during to measure the size
9237         of the process as it goes with --timestamp.
9238
9239         * expression.cs (Invocation.DoResolve): Do not allow methods with
9240         SpecialName to be invoked.
9241
9242 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
9243
9244         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
9245         number before adding it.
9246
9247 2002-12-21  Ravi Pratap  <ravi@ximian.com>
9248
9249         * ecore.cs (StandardImplicitConversion): When in an unsafe
9250         context, we allow conversion between void * to any other pointer
9251         type. This fixes bug #35973.
9252
9253 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
9254
9255         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
9256         is not thrown when extensionless outputs are used 
9257
9258 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9259
9260         * rootcontext.cs: fixed compilation of corlib.
9261
9262 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
9263
9264         * attribute.cs (Attributes.Contains): Add new method.
9265
9266         * class.cs (MethodCore.LabelParameters): if the parameter is an
9267         `out' parameter, check that no attribute `[In]' has been passed.
9268
9269         * enum.cs: Handle the `value__' name in an enumeration.
9270
9271 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
9272
9273         * decl.cs: Added special case to allow overrides on "protected
9274         internal" methods
9275
9276 2002-12-18  Ravi Pratap  <ravi@ximian.com>
9277
9278         * attribute.cs (Attributes.AddAttributeSection): Rename to this
9279         since it makes much more sense.
9280
9281         (Attributes.ctor): Don't require a Location parameter.
9282
9283         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
9284
9285         * attribute.cs (ApplyAttributes): Remove extra Location parameters
9286         since we already have that information per attribute.
9287
9288         * everywhere : make appropriate changes.
9289
9290         * class.cs (LabelParameters): Write the code which actually
9291         applies attributes to the return type. We can't do this on the MS
9292         .NET runtime so we flag a warning in the case an exception is
9293         thrown.
9294
9295 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
9296
9297         * const.cs: Handle implicit null conversions here too.
9298
9299 2002-12-17  Ravi Pratap  <ravi@ximian.com>
9300
9301         * class.cs (MethodCore.LabelParameters): Remove the extra
9302         Type [] parameter since it is completely unnecessary. Instead
9303         pass in the method's attributes so that we can extract
9304         the "return" attribute.
9305
9306 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
9307
9308         * cs-parser.jay (parse): Use Report.Error to flag errors instead
9309         of ignoring it and letting the compile continue.
9310
9311         * typemanager.cs (ChangeType): use an extra argument to return an
9312         error condition instead of throwing an exception.
9313
9314 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
9315
9316         * expression.cs (Unary.TryReduce): mimic the code for the regular
9317         code path.  Perform an implicit cast in the cases where we can
9318         implicitly convert to one of the integral types, and then reduce
9319         based on that constant.   This fixes bug #35483.
9320
9321 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9322
9323         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
9324
9325 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9326
9327         * namespace.cs: fixed bug #35489.
9328
9329 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
9330
9331         * class.cs: Remove some dead code.
9332
9333         * cs-parser.jay: Estimate the number of methods needed
9334         (RootContext.MethodCount);
9335
9336         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
9337         numbers instead of StringBuilders.
9338
9339         * support.cs (PtrHashtable): Add constructor with initial size;
9340         We can now reduce reallocations of the method table.
9341
9342 2002-12-10  Ravi Pratap  <ravi@ximian.com>
9343
9344         * attribute.cs (ApplyAttributes): Keep track of the emitted
9345         attributes on a per-target basis. This fixes bug #35413.
9346
9347 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
9348
9349         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
9350         default to the Windows 1252 encoding.
9351
9352         (UnixParseOption): Support version, thanks to Alp for the missing
9353         pointer. 
9354
9355         * AssemblyInfo.cs: Add nice assembly information.
9356
9357         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
9358         (bug 35169).
9359
9360         * cs-parser.jay: Allow a trailing comma before the close bracked
9361         in the attribute_section production.
9362
9363         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
9364         address of the instance was being taken, I will take this out,
9365         because we take the address of the object immediately here.
9366
9367 2002-12-09  Ravi Pratap  <ravi@ximian.com>
9368
9369         * typemanager.cs (AreMultipleAllowed): Take care of the most
9370         obvious case where attribute type is not in the current assembly -
9371         stupid me ;-)
9372
9373 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
9374
9375         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
9376         definitions, instead of doing that afterwards.  
9377
9378         Also we use a nice little hack, depending on the constructor, we
9379         know if we are a "composed" name or a simple name.  Hence, we
9380         avoid the IndexOf test, and we avoid 
9381
9382         * codegen.cs: Add code to assist in a bug reporter to track down
9383         the source of a compiler crash. 
9384
9385 2002-12-07  Ravi Pratap  <ravi@ximian.com>
9386
9387         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
9388         types have been emitted for a given element and flag an error
9389         if something which does not have AllowMultiple set is used more
9390         than once.
9391
9392         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
9393         attribute types and their corresponding AllowMultiple properties
9394
9395         (AreMultipleAllowed): Check the property for a given type.
9396
9397         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
9398         property in the case we have a TypeContainer.
9399
9400         (Attributes.AddAttribute): Detect duplicates and just skip on
9401         adding them. This trivial fix catches a pretty gross error in our
9402         attribute emission - global attributes were being emitted twice!
9403
9404         Bugzilla bug #33187 is now fixed.
9405
9406 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
9407
9408         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
9409         instead of pp_and).
9410
9411         * expression.cs (Binary.ResolveOperator): I can only use the
9412         Concat (string, string, string) and Concat (string, string,
9413         string, string) if the child is actually a concatenation of
9414         strings. 
9415
9416 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
9417
9418         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
9419         context where we need a 2-character lookahead.
9420
9421         * pending.cs (PendingImplementation): Rework so we can keep track
9422         of interface types all the time, and flag those which were
9423         implemented by parents as optional.
9424
9425 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
9426
9427         * expression.cs (Binary.ResolveOperator): Use
9428         String.Concat(string,string,string) or
9429         String.Concat(string,string,string,string) when possible. 
9430
9431         * typemanager: More helper methods.
9432
9433
9434 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
9435
9436         * pending.cs: remove the bogus return from GetMissingInterfaces()
9437         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
9438
9439 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9440
9441         * namespace.cs: avoid duplicated 'using xxx' being added to
9442         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
9443         when we get more than one 'using' statement for the same namespace.
9444         Report a CS0105 warning for it.
9445
9446 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
9447
9448         * cs-tokenizer.cs (consume_identifier): use read directly, instead
9449         of calling getChar/putback, uses internal knowledge of it.    
9450
9451         (xtoken): Reorder tokenizer so most common patterns are checked
9452         first.  This reduces the compilation time in another 5% (from 8.11s
9453         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
9454
9455         The parsing time is 22% of the compilation in mcs, and from that
9456         64% is spent on the tokenization process.  
9457
9458         I tried using a binary search for keywords, but this is slower
9459         than the hashtable.  Another option would be to do a couple of
9460         things:
9461
9462                 * Not use a StringBuilder, instead use an array of chars,
9463                   with a set value.  Notice that this way we could catch
9464                   the 645 error without having to do it *afterwards*.
9465
9466                 * We could write a hand-parser to avoid the hashtable
9467                   compares altogether.
9468
9469         The identifier consumption process takes 37% of the tokenization
9470         time.  Another 15% is spent on is_number.  56% of the time spent
9471         on is_number is spent on Int64.Parse:
9472
9473                 * We could probably choose based on the string length to
9474                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
9475                   computations. 
9476
9477         Another 3% is spend on wrapping `xtoken' in the `token' function.
9478
9479         Handle 0xa0 as whitespace (#34752)
9480
9481 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
9482
9483         * typemanager.cs (IsCLRType): New routine to tell whether a type
9484         is one of the builtin types.  
9485
9486         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
9487         typecode in more places instead of doing pointer comparissions.
9488         We could leverage some knowledge about the way the typecodes are
9489         laid out.
9490
9491         New code to cache namespaces in assemblies, it is currently not
9492         invoked, to be used soon.
9493
9494         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
9495
9496         * expression.cs (Binary.ResolveOperator): specially handle
9497         strings, and do not perform user-defined operator overloading for
9498         built-in types.
9499
9500 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
9501
9502         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
9503         internalcall as it is a pretty simple operation;  Avoid whenever
9504         possible to call Char.IsLetter.
9505
9506         (consume_identifier): Cut by half the number of
9507         hashtable calls by merging the is_keyword and GetKeyword behavior.
9508
9509         Do not short-circuit, because if we do, we
9510         report errors (ie, #if false && true would produce an invalid
9511         directive error);
9512
9513
9514 2002-11-24  Martin Baulig  <martin@ximian.com>
9515
9516         * expression.cs (Cast.TryReduce): If we're in checked syntax,
9517         check constant ranges and report a CS0221.  Fixes #33186.
9518
9519 2002-11-24  Martin Baulig  <martin@ximian.com>
9520
9521         * cs-parser.jay: Make this work for uninitialized variable
9522         declarations in the `for' initializer.  Fixes #32416.
9523
9524 2002-11-24  Martin Baulig  <martin@ximian.com>
9525
9526         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
9527         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
9528
9529 2002-11-24  Martin Baulig  <martin@ximian.com>
9530
9531         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
9532         argument; if true, we also check for user-defined conversions.
9533         This is only needed if both arguments are of a user-defined type.
9534         Fixes #30443, added test-175.cs.
9535         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
9536
9537         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
9538
9539 2002-11-24  Martin Baulig  <martin@ximian.com>
9540
9541         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
9542         function to get the store opcode.
9543         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
9544         only emit the Ldelema if the store opcode is Stobj.  You must run
9545         both test-34 and test-167 to test this.  Fixes #34529.
9546
9547 2002-11-23  Martin Baulig  <martin@ximian.com>
9548
9549         * ecore.cs (Expression.MemberLookup): Added additional
9550         `qualifier_type' argument which is used when we're being called
9551         from MemberAccess.DoResolve() and null if we're called from a
9552         SimpleName lookup.
9553         (Expression.MemberLookupFailed): New method to report errors; this
9554         does the CS1540 check and reports the correct error message.
9555
9556         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
9557         argument for the CS1540 check and redone the way how we're dealing
9558         with private members.  See the comment in the source code for details.
9559         (FilterWithClosure): Reverted this back to revision 1.197; renamed
9560         `closure_start_type' to `closure_qualifier_type' and check whether
9561         it's not null.  It was not this filter being broken, it was just
9562         being called with the wrong arguments.
9563
9564         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
9565         and pass it the correct `qualifier_type'; this also does the error
9566         handling for us.
9567
9568 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
9569
9570         * expression.cs (Invocation.EmitParams): If the we are dealing
9571         with a non-built-in value type, load its address as well.
9572
9573         (ArrayCreation): Use a a pretty constant instead
9574         of the hardcoded value 2.   Use 6 instead of 2 for the number of
9575         static initializers.  
9576
9577         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
9578         because they are not really value types, just glorified integers. 
9579
9580         * driver.cs: Do not append .exe, the CSC compiler does not do it.
9581
9582         * ecore.cs: Remove redundant code for enumerations, make them use
9583         the same code path as everything else, fixes the casting issue
9584         with enumerations in Windows.Forms.
9585
9586         * attribute.cs: Do only cast to string if it is a string, the
9587         validation happens later.
9588
9589         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
9590         people upgrade their corlibs.
9591
9592         * ecore.cs: Oops, enumerations were not following the entire code path
9593
9594 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
9595
9596         * typemanager.cs (FilterWithClosure): Commented out the test for
9597         1540 in typemanager.cs, as it has problems when accessing
9598         protected methods from a parent class (see test-174.cs). 
9599
9600         * attribute.cs (Attribute.ValidateGuid): new method.
9601         (Attribute.Resolve): Use above.
9602
9603 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
9604
9605         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
9606
9607         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
9608         handling for enumerations, as we only needed the TypeContainer
9609         functionality to begin with (this is required for the fix below to
9610         work for enums that reference constants in a container class for
9611         example). 
9612
9613         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
9614
9615         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
9616         a valid TypeBuilder to perform lookups on.o
9617
9618         * class.cs (InheritableMemberSignatureCompare): Use true in the
9619         call to GetGetMethod and GetSetMethod, because we are comparing
9620         the signature, and we need to get the methods *even* if they are
9621         private. 
9622
9623         (PropertyBase.CheckBase): ditto.
9624
9625         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
9626         GotoCase.Resolve): Use Peel on EmpytCasts.
9627
9628         * ecore.cs (EmptyCast): drop child, add Peel method.
9629
9630 2002-11-17  Martin Baulig  <martin@ximian.com>
9631
9632         * ecore.cs (EmptyCast.Child): New public property.
9633
9634         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
9635         label resolved to an EmptyCast.  Fixes #34162.
9636         (GotoCase.Resolve): Likewise.
9637         (Block.EmitMeta): Likewise.
9638
9639 2002-11-17  Martin Baulig  <martin@ximian.com>
9640
9641         * expression.cs (Invocation.BetterConversion): Prefer int over
9642         uint; short over ushort; long over ulong for integer literals.
9643         Use ImplicitConversionExists instead of StandardConversionExists
9644         since we also need to check for user-defined implicit conversions.
9645         Fixes #34165.  Added test-173.cs.
9646
9647 2002-11-16  Martin Baulig  <martin@ximian.com>
9648
9649         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
9650         with the `true' and `false' literals.  Fixes #33151.
9651
9652 2002-11-16  Martin Baulig  <martin@ximian.com>
9653
9654         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
9655         October 22nd; don't do the cs1540 check for static members.
9656
9657         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
9658         now using our own filter here and doing the cs1540 check again.
9659
9660 2002-11-16  Martin Baulig  <martin@ximian.com>
9661
9662         * support.cs (InternalParameters): Don't crash if we don't have
9663         any fixed parameters.  Fixes #33532.
9664
9665 2002-11-16  Martin Baulig  <martin@ximian.com>
9666
9667         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
9668         when looking up static methods to make this work on Windows.
9669         Fixes #33773.
9670
9671 2002-11-16  Martin Baulig  <martin@ximian.com>
9672
9673         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
9674         a setter rather than using PropertyInfo.CanWrite.
9675
9676 2002-11-15  Nick Drochak  <ndrochak@gol.com>
9677
9678         * class.cs: Allow acces to block member by subclasses. Fixes build
9679         breaker.
9680
9681 2002-11-14  Martin Baulig  <martin@ximian.com>
9682
9683         * class.cs (Constructor.Emit): Added the extern/block check.
9684         Fixes bug #33678.
9685
9686 2002-11-14  Martin Baulig  <martin@ximian.com>
9687
9688         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
9689         iteration while looking for indexers, this is needed because the
9690         indexer may have a different name in our base classes.  Fixed the
9691         error reporting (no indexers at all, not get accessor, no
9692         overloaded match).  Fixes bug #33089.
9693         (IndexerAccess.DoResolveLValue): Likewise.
9694
9695 2002-11-14  Martin Baulig  <martin@ximian.com>
9696
9697         * class.cs (PropertyBase.CheckBase): Make this work for multiple
9698         indexers.  Fixes the first part of bug #33089.
9699         (MethodSignature.InheritableMemberSignatureCompare): Added support
9700         for properties.
9701
9702 2002-11-13  Ravi Pratap  <ravi@ximian.com>
9703
9704         * attribute.cs (Attribute.Resolve): Catch the
9705         NullReferenceException and report it since it isn't supposed to
9706         happen. 
9707
9708 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
9709
9710         * expression.cs (Binary.EmitBranchable): Also handle the cases for
9711         LogicalOr and LogicalAnd that can benefit from recursively
9712         handling EmitBranchable.  The code now should be nice for Paolo.
9713
9714 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
9715
9716         * typemanager.cs (LookupType): Added a negative-hit hashtable for
9717         the Type lookups, as we perform quite a number of lookups on
9718         non-Types.  This can be removed once we can deterministically tell
9719         whether we have a type or a namespace in advance.
9720
9721         But this might require special hacks from our corlib.
9722
9723         * TODO: updated.
9724
9725         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
9726         and double which avoids a conversion from an integer to a double.
9727
9728         * expression.cs: tiny optimization, avoid calling IsConstant,
9729         because it effectively performs the lookup twice.
9730
9731 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
9732
9733         But a bogus return here to keep the semantics of the old code
9734         until the Mono runtime is fixed.
9735
9736         * pending.cs (GetMissingInterfaces): New method used to remove all
9737         the interfaces that are already implemented by our parent
9738         classes from the list of pending methods. 
9739
9740         * interface.cs: Add checks for calls after ResolveTypeExpr.
9741
9742 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
9743
9744         * class.cs (Class.Emit): Report warning 67: event not used if the
9745         warning level is beyond 3.
9746
9747         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
9748         being a NullLiteral.
9749
9750         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
9751         specifiers. 
9752
9753         * class.cs (TypeContainer.GetClassBases): Cover a missing code
9754         path that might fail if a type can not be resolved.
9755
9756         * expression.cs (Binary.Emit): Emit unsigned versions of the
9757         operators. 
9758
9759         * driver.cs: use error 5.
9760
9761 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
9762
9763         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
9764
9765 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
9766
9767         * cs-parser.jay (switch_section): A beautiful patch from Martin
9768         Baulig that fixed 33094.
9769
9770 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
9771
9772         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
9773         Check whether the base is abstract and report an error if so.
9774
9775         * expression.cs (IndexerAccess.DoResolveLValue,
9776         IndexerAccess.DoResolve): ditto. 
9777
9778         (Invocation.DoResolve): ditto.
9779
9780         (Invocation.FullMethodDesc): Improve the report string.
9781
9782         * statement.cs (Block): Eliminate IsVariableDefined as it is
9783         basically just a wrapper for GetVariableInfo.
9784
9785         * ecore.cs (SimpleName): Use new 
9786
9787         * support.cs (ReflectionParamter.ParameterType): We unwrap the
9788         type, as we return the actual parameter ref/unref state on a
9789         different call.
9790
9791 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
9792
9793         * support.cs: Return proper flags REF/OUT fixing the previous
9794         commit.  
9795
9796         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
9797         not used to mean `ref' but `ref or out' in ParameterReference
9798
9799         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
9800         full type signature instead of calling TypeManger.CSharpName
9801         ourselves. 
9802
9803         * support.cs (InternalParameters.ParameterDesc): Do not compare
9804         directly to the modflags, because REF/OUT will actually be bitsets
9805         if set. 
9806
9807         * delegate.cs (VerifyMethod): Check also the modifiers.
9808
9809         * cs-tokenizer.cs: Fix bug where floating point values with an
9810         exponent where a sign was missing was ignored.
9811
9812         * driver.cs: Allow multiple assemblies to be specified in a single
9813         /r: argument
9814
9815 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
9816
9817         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
9818         because identifiers after a parenthesis would end up in this kind
9819         of production, and we needed to desamiguate it for having casts
9820         like:
9821
9822                 (UserDefinedType *) xxx
9823
9824 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
9825
9826         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
9827         we should set on the Bindingflags.NonPublic, but not turn on
9828         private_ok.  private_ok controls whether a Private member is
9829         returned (this is chekced on the filter routine), while the
9830         BindingFlags.NonPublic just controls whether private/protected
9831         will be allowed.   This fixes the problem part of the problem of
9832         private properties being allowed to be used in derived classes.
9833
9834         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
9835         so we can call the children DoResolveLValue method (this will
9836         properly signal errors on lvalue assignments to base properties)
9837
9838         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
9839         getter are null, and we have a property info, we know that this
9840         happened because the lookup failed, so we report an error 122 for
9841         protection level violation.
9842
9843         We also silently return if setter and getter are null in the
9844         resolve functions, this condition only happens if we have flagged
9845         the error before.  This is the other half of the problem. 
9846
9847         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
9848         not have accessibility information, that is why we were returning
9849         true in the filter function in typemanager.cs.
9850
9851         To properly report 122 (property is inaccessible because of its
9852         protection level) correctly, we report this error in ResolveAccess
9853         by failing if both the setter and the getter are lacking (ie, the
9854         lookup failed). 
9855
9856         DoResolve and DoLResolve have been modified to check for both
9857         setter/getter being null and returning silently, the reason being
9858         that I did not want to put the knowledge about this error in upper
9859         layers, like:
9860
9861         int old = Report.Errors;
9862         x = new PropertyExpr (...);
9863         if (old != Report.Errors)
9864                 return null;
9865         else
9866                 return x;
9867
9868         So the property expr is returned, but it is invalid, so the error
9869         will be flagged during the resolve process. 
9870
9871         * class.cs: Remove InheritablePropertySignatureCompare from the
9872         class, as we no longer depend on the property signature to compute
9873         whether it is possible to implement a method or not.
9874
9875         The reason is that calling PropertyInfo.GetGetMethod will return
9876         null (in .NET, in Mono it works, and we should change this), in
9877         cases where the Get Method does not exist in that particular
9878         class.
9879
9880         So this code:
9881
9882         class X { public virtual int A { get { return 1; } } }
9883         class Y : X { }
9884         class Z : Y { public override int A { get { return 2; } } }
9885
9886         Would fail in Z because the parent (Y) would not have the property
9887         defined.  So we avoid this completely now (because the alternative
9888         fix was ugly and slow), and we now depend exclusively on the
9889         method names.
9890
9891         (PropertyBase.CheckBase): Use a method-base mechanism to find our
9892         reference method, instead of using the property.
9893
9894         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
9895         routines are gone now.
9896
9897         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
9898         names, they were incorrectly named.
9899
9900         * cs-tokenizer.cs: Return are more gentle token on failure. 
9901
9902         * pending.cs (PendingImplementation.InterfaceMethod): This routine
9903         had an out-of-sync index variable, which caused it to remove from
9904         the list of pending methods the wrong method sometimes.
9905
9906 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
9907
9908         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
9909         CanWrite, because those refer to this particular instance of the
9910         property, and do not take into account the fact that we can
9911         override single members of a property.
9912
9913         Constructor requires an EmitContext.  The resolution process does
9914         not happen here, but we need to compute the accessors before,
9915         because the resolution does not always happen for properties.
9916
9917         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
9918         subclass, before we did not update this flag, but we did update
9919         bindingflags. 
9920
9921         (GetAccessors): Drop this routine, as it did not work in the
9922         presence of partially overwritten set/get methods. 
9923
9924         Notice that this broke the cs1540 detection, but that will require
9925         more thinking. 
9926
9927 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9928
9929         * class.cs:
9930         * codegen.cs:
9931         * driver.cs: issue a warning instead of an error if we don't support
9932         debugging for the platform. Also ignore a couple of errors that may
9933         arise when trying to write the symbols. Undo my previous patch.
9934
9935 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9936
9937         * driver.cs: ignore /debug switch except for Unix platforms.
9938
9939 2002-10-23  Nick Drochak  <ndrochak@gol.com>
9940
9941         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
9942
9943 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
9944
9945         * driver.cs: Do not make mcs-debug conditional, so we do not break
9946         builds that use it.
9947
9948         * statement.cs (UsageVector.MergeChildren): I would like Martin to
9949         review this patch.  But basically after all the children variables
9950         have been merged, the value of "Breaks" was not being set to
9951         new_breaks for Switch blocks.  I think that it should be set after
9952         it has executed.  Currently I set this to the value of new_breaks,
9953         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
9954         conservative, but I do not understand this code very well.
9955
9956         I did not break anything in the build, so that is good ;-)
9957
9958         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
9959
9960 2002-10-20  Mark Crichton  <crichton@gimp.org>
9961
9962         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
9963
9964 2002-10-20  Nick Drochak  <ndrochak@gol.com>
9965
9966         * cfold.cs: Fixed compile blocker.
9967
9968 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
9969
9970         * driver.cs: I was chekcing the key, not the file.
9971
9972 2002-10-19  Ravi Pratap  <ravi@ximian.com>
9973
9974         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
9975         message that we were generating - we just need to silently return
9976         a null.
9977
9978 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
9979
9980         * class.cs (Event.Define): Change my previous commit, as this
9981         breaks the debugger.  This is a temporary hack, as it seems like
9982         the compiler is generating events incorrectly to begin with.
9983
9984         * expression.cs (Binary.ResolveOperator): Added support for 
9985         "U operator - (E x, E y)"
9986
9987         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
9988         y)".
9989
9990         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
9991         init-only variables, but this path did not take into account that
9992         there might be also instance readonly variables.  Correct this
9993         problem. 
9994
9995         This fixes bug 32253
9996
9997         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
9998         delegates as well.
9999
10000         * driver.cs: Change the extension for modules to `netmodule'
10001
10002         * cs-parser.jay: Improved slightly the location tracking for
10003         the debugger symbols.
10004
10005         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
10006         modifiers that were specified instead of the hardcoded value
10007         (FamAndAssem).  This was basically ignoring the static modifier,
10008         and others.  Fixes 32429.
10009
10010         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
10011         fixed a bug in the process (32476)
10012
10013         * expression.cs (ArrayAccess.EmitAssign): Patch from
10014         hwang_rob@yahoo.ca that fixes bug 31834.3
10015
10016 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
10017
10018         * driver.cs: Make the module extension .netmodule.
10019
10020 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
10021
10022         * driver.cs: Report an error if the resource file is not found
10023         instead of crashing.
10024
10025         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
10026         false, like Emit does.
10027
10028 2002-10-16  Nick Drochak  <ndrochak@gol.com>
10029
10030         * typemanager.cs: Remove unused private member.  Also reported mcs
10031         bug to report this as a warning like csc.
10032
10033 2002-10-15  Martin Baulig  <martin@gnome.org>
10034
10035         * statement.cs (Statement.Emit): Made this a virtual method; emits
10036         the line number info and calls DoEmit().
10037         (Statement.DoEmit): New protected abstract method, formerly knows
10038         as Statement.Emit().
10039
10040         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
10041
10042 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
10043
10044         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
10045         have fixed a remaining problem: not every AddXXXX was adding a
10046         fully qualified name.  
10047
10048         Now everyone registers a fully qualified name in the DeclSpace as
10049         being defined instead of the partial name.  
10050
10051         Downsides: we are slower than we need to be due to the excess
10052         copies and the names being registered this way.  
10053
10054         The reason for this is that we currently depend (on the corlib
10055         bootstrap for instance) that types are fully qualified, because
10056         we dump all the types in the namespace, and we should really have
10057         types inserted into the proper namespace, so we can only store the
10058         basenames in the defined_names array.
10059
10060 2002-10-10  Martin Baulig  <martin@gnome.org>
10061
10062         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
10063         from bug #31834, see the bug report for a testcase which is
10064         miscompiled.
10065
10066 2002-10-10  Martin Baulig  <martin@gnome.org>
10067
10068         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
10069         flow analysis code for this.
10070
10071         * statement.cs (Do, While, For): Tell the flow analysis code about
10072         infinite loops.
10073         (FlowBranching.UsageVector): Added support for infinite loops.
10074         (Block.Resolve): Moved the dead code elimination here and use flow
10075         analysis to do it.
10076
10077 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
10078
10079         * class.cs (Field.Define): Catch cycles on struct type
10080         definitions. 
10081
10082         * typemanager.cs (IsUnmanagedtype): Do not recursively check
10083         fields if the fields are static.  We only need to check instance
10084         fields. 
10085
10086         * expression.cs (As.DoResolve): Test for reference type.
10087
10088         * statement.cs (Using.ResolveExpression): Use
10089         ConvertImplicitRequired, not ConvertImplicit which reports an
10090         error on failture
10091         (Using.ResolveLocalVariableDecls): ditto.
10092
10093         * expression.cs (Binary.ResolveOperator): Report errors in a few
10094         places where we had to.
10095
10096         * typemanager.cs (IsUnmanagedtype): Finish implementation.
10097
10098 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
10099
10100         * expression.cs: Use StoreFromPtr instead of extracting the type
10101         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
10102
10103         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
10104         an enumeration value to a System.Enum, but System.Enum is not a
10105         value type, but an class type, so we need to box.
10106
10107         (Expression.ConvertExplicit): One codepath could return
10108         errors but not flag them.  Fix this.  Fixes #31853
10109
10110         * parameter.cs (Resolve): Do not allow void as a parameter type.
10111
10112 2002-10-06  Martin Baulig  <martin@gnome.org>
10113
10114         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
10115         if it's a class type and not a struct.  Fixes #31815.
10116
10117 2002-10-06  Martin Baulig  <martin@gnome.org>
10118
10119         * statement.cs: Reworked the flow analysis code a bit to make it
10120         usable for dead code elimination.
10121
10122 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10123
10124         * cs-parser.jay: allow empty source files. Fixes bug #31781.
10125
10126 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
10127
10128         * expression.cs (ComposedCast.DoResolveType): A quick workaround
10129         to fix the test 165, will investigate deeper.
10130
10131 2002-10-04  Martin Baulig  <martin@gnome.org>
10132
10133         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
10134         finally blocks actually work.
10135         (Try.Resolve): We don't need to create a sibling for `finally' if
10136         there is no finally block.
10137
10138 2002-10-04  Martin Baulig  <martin@gnome.org>
10139
10140         * class.cs (Constructor.Define): The default accessibility for a
10141         non-default constructor is private, not public.
10142
10143 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
10144
10145         * class.cs (Constructor): Make AllowedModifiers public, add
10146         EXTERN.
10147
10148         * cs-parser.jay: Perform the modifiers test here, as the
10149         constructor for the Constructor class usually receives a zero
10150         because of the way we create it (first we create, later we
10151         customize, and we were never checking the modifiers).
10152
10153         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
10154         is a version of LookupTypeReflection that includes the type-name
10155         cache.  This can be used as a fast path for functions that know
10156         the fully qualified name and are only calling into *.GetType() to
10157         obtain a composed type.
10158
10159         This is also used by TypeManager.LookupType during its type
10160         composition.
10161
10162         (LookupType): We now also track the real type name, as sometimes
10163         we can get a quey for the real type name from things like
10164         ComposedCast.  This fixes bug 31422.
10165
10166         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
10167         complete type fullname, it does not have to go through the type
10168         resolution system to obtain the composed version of the type (for
10169         obtaining arrays or pointers).
10170
10171         (Conditional.Emit): Use the EmitBoolExpression to
10172         generate nicer code, as requested by Paolo.
10173
10174         (ArrayCreation.CheckIndices): Use the patch from
10175         hwang_rob@yahoo.ca to validate the array initializers. 
10176
10177 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
10178
10179         * class.cs (ConstructorInitializer.Emit): simplify code by using
10180         Invocation.EmitCall, and at the same time, fix the bugs in calling
10181         parent constructors that took variable arguments. 
10182
10183         * ecore.cs (Expression.ConvertNumericExplicit,
10184         Expression.ImplicitNumericConversion): Remove the code that
10185         manually wrapped decimal (InternalTypeConstructor call is now gone
10186         as well).
10187
10188         * expression.cs (Cast.TryReduce): Also handle decimal types when
10189         trying to perform a constant fold on the type.
10190
10191         * typemanager.cs (IsUnmanagedtype): Partially implemented.
10192
10193         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
10194         that only turned off an error report, and did nothing else. 
10195
10196 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
10197
10198         * driver.cs: Handle and ignore /fullpaths
10199
10200 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
10201
10202         * expression.cs (Binary.ResolveOperator): Catch the case where
10203         DoNumericPromotions returns true, 
10204
10205         (Binary.DoNumericPromotions): Simplify the code, and the tests.
10206
10207 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
10208
10209         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
10210         report error 70.
10211
10212 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
10213
10214         * ecore.cs (ConvertNumericExplicit): It is not enough that the
10215         conversion exists, but it is also required that the conversion be
10216         performed.  This manifested in "(Type64Enum) 2".  
10217
10218         * class.cs (TypeManager.AddMethod): The fix is not to change
10219         AddEnum, because that one was using a fully qualified name (every
10220         DeclSpace derivative does), but to change the AddMethod routine
10221         that was using an un-namespaced name.  This now correctly reports
10222         the duplicated name.
10223
10224         Revert patch until I can properly fix it.  The issue
10225         is that we have a shared Type space across all namespaces
10226         currently, which is wrong.
10227
10228         Options include making the Namespace a DeclSpace, and merge
10229         current_namespace/current_container in the parser.
10230
10231 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
10232
10233         * cs-parser.jay: Improve error reporting when we get a different
10234         kind of expression in local_variable_type and
10235         local_variable_pointer_type. 
10236
10237         Propagate this to avoid missleading errors being reported.
10238
10239         * ecore.cs (ImplicitReferenceConversion): treat
10240         TypeManager.value_type as a target just like object_type.   As
10241         code like this:
10242
10243         ValueType v = 1;
10244
10245         Is valid, and needs to result in the int 1 being boxed before it
10246         is assigned to the value type v.
10247
10248         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
10249         to validate the enumeration name.
10250
10251         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
10252         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
10253         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
10254
10255         * ecore.cs (TryImplicitIntConversion): When doing an
10256         implicit-enumeration-conversion, check if the type is 64-bits and
10257         perform a conversion before passing to EnumConstant.
10258
10259 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
10260
10261         * decl.cs (Error_AmbiguousTypeReference); New routine used to
10262         report ambiguous type references.  Unlike the MS version, we
10263         report what the ambiguity is.   Innovation at work ;-)
10264
10265         (DeclSpace.FindType): Require a location argument to
10266         display when we display an ambiguous error.
10267
10268         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
10269
10270         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
10271
10272         * expression.cs (EmitDynamicInitializers): Apply patch from
10273         hwang_rob@yahoo.ca that fixes the order in which we emit our
10274         initializers. 
10275
10276 2002-09-21  Martin Baulig  <martin@gnome.org>
10277
10278         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
10279         delegate takes no arguments.
10280
10281 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
10282
10283         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
10284         from integers.
10285
10286         * expression.cs: Extract the underlying type.
10287
10288         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
10289
10290         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
10291
10292 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
10293
10294         * class.cs (TypeContainer.DefineType): We can not use the nice
10295         PackingSize with the size set to 1 DefineType method, because it
10296         will not allow us to define the interfaces that the struct
10297         implements.
10298
10299         This completes the fixing of bug 27287
10300
10301         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
10302         means also structs.  This fixes part of the problem. 
10303         (Expresion.ImplicitReferenceConversionExists): ditto.
10304
10305         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
10306         error if there were no errors reported during the type lookup
10307         process, to avoid duplicates or redundant errors.  Without this
10308         you would get an ambiguous errors plus a type not found.  We have
10309         beaten the user enough with the first error.  
10310
10311         (DeclSparce.FindType): Emit a warning if we have an ambiguous
10312         reference. 
10313
10314         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
10315         during the resolution process, stop the lookup, this avoids
10316         repeated error reports (same error twice).
10317
10318         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
10319
10320         * typemanager.cs (LookupType): Redo the type lookup code to match
10321         the needs of System.Reflection.  
10322
10323         The issue is that System.Reflection requires references to nested
10324         types to begin with a "+" sign instead of a dot.  So toplevel
10325         types look like: "NameSpace.TopLevelClass", and nested ones look
10326         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
10327         levels. 
10328
10329 2002-09-19  Martin Baulig  <martin@gnome.org>
10330
10331         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
10332         says that a method always returns or always throws an exception,
10333         don't report the CS0161.
10334
10335         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
10336         set `Returns = new_returns'.
10337
10338 2002-09-19  Martin Baulig  <martin@gnome.org>
10339
10340         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
10341         to an enum constant, check for a CS0176.
10342
10343 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
10344
10345         * class.cs (TypeContainer.CheckPairedOperators): Now we check
10346         for operators that must be in pairs and report errors.
10347
10348         * ecore.cs (SimpleName.DoResolveType): During the initial type
10349         resolution process, when we define types recursively, we must
10350         check first for types in our current scope before we perform
10351         lookups in the enclosing scopes.
10352
10353         * expression.cs (MakeByteBlob): Handle Decimal blobs.
10354
10355         (Invocation.VerifyArgumentsCompat): Call
10356         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
10357         I thought we were supposed to always call this, but there are a
10358         few places in the code where we dont do it.
10359
10360 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
10361
10362         * driver.cs: Add support in -linkres and -resource to specify the
10363         name of the identifier.
10364
10365 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
10366
10367         * ecore.cs (StandardConversionExists): Sync with the conversion
10368         code: allow anything-* to void* conversions.
10369
10370         (FindMostSpecificSource): Use an Expression argument
10371         instead of a Type, because we might be handed over a Literal which
10372         gets a few more implicit conversions that plain types do not.  So
10373         this information was being lost.
10374
10375         Also, we drop the temporary type-holder expression when not
10376         required.
10377
10378 2002-09-17  Martin Baulig  <martin@gnome.org>
10379
10380         * class.cs (PropertyBase.CheckBase): Don't check the base class if
10381         this is an explicit interface implementation.
10382
10383 2002-09-17  Martin Baulig  <martin@gnome.org>
10384
10385         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
10386         different `IndexerName' attributes.
10387
10388         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
10389         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
10390         virtual CommonResolve().
10391
10392 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
10393
10394         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
10395         and convert that to the UnderlyingType.
10396
10397         * statement.cs (Foreach.Resolve): Indexers are just like variables
10398         or PropertyAccesses.
10399
10400         * cs-tokenizer.cs (consume_string): Track line numbers and columns
10401         inside quoted strings, we were not doing this before.
10402
10403 2002-09-16  Martin Baulig  <martin@gnome.org>
10404
10405         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
10406         resolve it.  This is needed for the definite assignment check of the
10407         instance expression, fixes bug #29846.
10408         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
10409
10410 2002-09-16  Nick Drochak  <ndrochak@gol.com>
10411
10412         * parameter.cs: Fix compile error.  Cannot reference static member
10413         from an instance object.  Is this an mcs bug?
10414
10415 2002-09-14  Martin Baulig  <martin@gnome.org>
10416
10417         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
10418         multiple times.  Fixes bug #30295, added test-166.cs.
10419
10420 2002-09-14  Martin Baulig  <martin@gnome.org>
10421
10422         * statement.cs (Block.Emit): Don't emit unreachable code.
10423         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
10424         `break' statements.
10425         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
10426
10427 2002-09-14  Martin Baulig  <martin@gnome.org>
10428
10429         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
10430         is set.
10431
10432 2002-09-14  Martin Baulig  <martin@gnome.org>
10433
10434         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
10435         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
10436         be false on the ms runtime.
10437
10438 2002-09-13  Martin Baulig  <martin@gnome.org>
10439
10440         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
10441         the CS0038 error message.
10442
10443 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
10444
10445         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
10446         constant inside, return it.
10447
10448 2002-09-12  Martin Baulig  <martin@gnome.org>
10449
10450         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
10451         implicit conversion can be done between enum types.
10452
10453         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
10454         check whether an implicit conversion to the current enum's UnderlyingType
10455         exists and report an error if not.
10456
10457         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
10458         without debugging support.
10459
10460         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
10461         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
10462
10463 2002-09-12  Martin Baulig  <martin@gnome.org>
10464
10465         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
10466
10467         * ecore.cs (IMemberExpr.DeclaringType): New property.
10468         (SimpleName.SimpleNameResolve): Check whether we're accessing a
10469         nonstatic member of an outer type (CS0038).
10470
10471 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
10472
10473         * driver.cs: Activate the using-error detector at warning level
10474         4 (at least for MS-compatible APIs).
10475
10476         * namespace.cs (VerifyUsing): Small buglett fix.
10477
10478         * pending.cs (PendingImplementation): pass the container pointer. 
10479
10480         * interface.cs (GetMethods): Allow for recursive definition.  Long
10481         term, I would like to move every type to support recursive
10482         definitions, not the current ordering mechanism that we have right
10483         now.
10484
10485         The situation is this: Attributes are handled before interfaces,
10486         so we can apply attributes to interfaces.  But some attributes
10487         implement interfaces, we will now handle the simple cases
10488         (recursive definitions will just get an error).  
10489
10490         * parameter.cs: Only invalidate types at the end if we fail to
10491         lookup all types.  
10492
10493 2002-09-09  Martin Baulig  <martin@gnome.org>
10494
10495         * ecore.cs (PropertyExpr.Emit): Also check for
10496         TypeManager.system_int_array_get_length so this'll also work when
10497         compiling corlib.  Fixes #30003.
10498
10499 2002-09-09  Martin Baulig  <martin@gnome.org>
10500
10501         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
10502         and throw an exception if we can't get the type's size.  Fixed #30040,
10503         added test-165.cs.
10504
10505 2002-09-09  Martin Baulig  <martin@gnome.org>
10506
10507         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
10508
10509         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
10510         context.  Fixes bug #30027.
10511
10512         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
10513         virtual functions.  Fixes bug #30043, added test-164.cs.
10514
10515 2002-09-08  Ravi Pratap  <ravi@ximian.com>
10516
10517         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
10518
10519 2002-09-08  Nick Drochak  <ndrochak@gol.com>
10520
10521         * driver.cs: Use an object to get the windows codepage since it's not a
10522         static property.
10523
10524 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
10525
10526         * statement.cs (For.Emit): for infinite loops (test == null)
10527         return whether there is a break inside, not always "true".
10528
10529         * namespace.cs (UsingEntry): New struct to hold the name of the
10530         using definition, the location where it is defined, and whether it
10531         has been used in a successful type lookup.
10532
10533         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
10534         strings.
10535
10536         * decl.cs: ditto.
10537
10538 2002-09-06  Ravi Pratap  <ravi@ximian.com>
10539
10540         * attribute.cs : Fix incorrect code which relied on catching
10541         a NullReferenceException to detect a null being passed in
10542         where an object was expected.
10543
10544 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
10545
10546         * statement.cs (Try): flag the catch variable as assigned
10547
10548         * expression.cs (Cast): Simplified by using ResolveType instead of
10549         manually resolving.
10550
10551         * statement.cs (Catch): Fix bug by using ResolveType.
10552
10553 2002-09-06  Ravi Pratap  <ravi@ximian.com>
10554
10555         * expression.cs (BetterConversion): Special case for when we have
10556         a NullLiteral as the argument and we have to choose between string
10557         and object types - we choose string the way csc does.
10558
10559         * attribute.cs (Attribute.Resolve): Catch the
10560         NullReferenceException and report error #182 since the Mono
10561         runtime no more has the bug and having this exception raised means
10562         we tried to select a constructor which takes an object and is
10563         passed a null.
10564
10565 2002-09-05  Ravi Pratap  <ravi@ximian.com>
10566
10567         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
10568         message (1502, 1503) when we can't locate a method after overload
10569         resolution. This is much more informative and closes the bug
10570         Miguel reported.
10571
10572         * interface.cs (PopulateMethod): Return if there are no argument
10573         types. Fixes a NullReferenceException bug.
10574
10575         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
10576         expressions too. Previously we were checking only in one place for
10577         positional arguments leaving out named arguments.
10578
10579         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
10580         type to the enum type is not allowed. Remove code corresponding to
10581         that.
10582
10583         (ConvertNumericExplicit): Allow explicit conversions from
10584         the underlying type to enum type. This precisely follows the spec
10585         and closes a bug filed by Gonzalo.
10586
10587 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10588
10589         * compiler.csproj:
10590         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
10591
10592 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
10593
10594         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
10595         it was important that we stored the right value after the
10596         reduction in `converted'.
10597
10598 2002-09-04  Martin Baulig  <martin@gnome.org>
10599
10600         * location.cs (Location.SymbolDocument): Use full pathnames for the
10601         source files.
10602
10603 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
10604
10605         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
10606         of the expression resolve mechanism, because that will catch the
10607         SimpleName error failures.
10608
10609         (Conditional): If we can not resolve the
10610         expression, return, do not crash.
10611
10612 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10613
10614         * cs-tokenizer.cs:
10615         (location): display token name instead of its number.
10616
10617 2002-08-28  Martin Baulig  <martin@gnome.org>
10618
10619         * expression.cs (Binary.ResolveOperator): Don't silently return
10620         but return an error if an operator cannot be applied between two
10621         enum types.
10622
10623 2002-08-28  Martin Baulig  <martin@gnome.org>
10624
10625         * class.cs (Constructor.Define): Set the permission attributes
10626         correctly instead of making all constructors public.
10627
10628 2002-08-28  Martin Baulig  <martin@gnome.org>
10629
10630         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
10631         for private members before reporting a CS0103; if we find anything,
10632         it's a CS0122.
10633
10634 2002-08-28  Martin Baulig  <martin@gnome.org>
10635
10636         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
10637         to check whether `closure_start_type == closure_invocation_type',
10638         we also need to check whether `m.DeclaringType == closure_invocation_type'
10639         before bypassing the permission checks.  We might be accessing
10640         protected/private members from the base class.
10641         (TypeManager.RealMemberLookup): Only set private_ok if private
10642         members were requested via BindingFlags.NonPublic.
10643
10644         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
10645
10646         * expression.cs (MemberAccess.ResolveMemberAccess): Set
10647         MethodGroupExpr.IsExplicitImpl if appropriate.
10648         (Invocation.DoResolve): Don't report the CS0120 for explicit
10649         interface implementations.
10650
10651 2002-08-27  Martin Baulig  <martin@gnome.org>
10652
10653         * expression.cs (Invocation.DoResolve): If this is a static
10654         method and we don't have an InstanceExpression, we must report
10655         a CS0120.
10656
10657 2002-08-25  Martin Baulig  <martin@gnome.org>
10658
10659         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
10660         `==' between a valuetype and an object.
10661
10662 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
10663
10664         * ecore.cs (TypeExpr): Provide a ToString method.
10665
10666 2002-08-24  Martin Baulig  <martin@gnome.org>
10667
10668         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
10669         now called proggie.dbg and it's a binary file.
10670
10671 2002-08-23  Martin Baulig  <martin@gnome.org>
10672
10673         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
10674
10675 2002-08-23  Martin Baulig  <martin@gnome.org>
10676
10677         * struct.cs (MyStructInfo.ctor): Make this work with empty
10678         structs; it's not allowed to use foreach() on null.
10679
10680 2002-08-23  Martin Baulig  <martin@gnome.org>
10681
10682         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
10683         writer the full pathname of the generated assembly.
10684
10685 2002-08-23  Martin Baulig  <martin@gnome.org>
10686
10687         * statements.cs (FlowBranching.UsageVector.MergeChildren):
10688         A `finally' block never returns or breaks; improved handling of
10689         unreachable code.
10690
10691 2002-08-23  Martin Baulig  <martin@gnome.org>
10692
10693         * statement.cs (Throw.Resolve): Allow `throw null'.
10694
10695 2002-08-23  Martin Baulig  <martin@gnome.org>
10696
10697         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
10698         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
10699         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
10700         MemberLookup would return a wrong event if this is an explicit
10701         interface implementation and the class has an event with the same
10702         name.
10703
10704 2002-08-23  Martin Baulig  <martin@gnome.org>
10705
10706         * statement.cs (Block.AddChildVariableNames): New public method.
10707         (Block.AddChildVariableName): Likewise.
10708         (Block.IsVariableNameUsedInChildBlock): Likewise.
10709         (Block.AddVariable): Check whether a variable name has already
10710         been used in a child block.
10711
10712         * cs-parser.jay (declare_local_variables): Mark all variable names
10713         from the current block as being used in a child block in the
10714         implicit block.
10715
10716 2002-08-23  Martin Baulig  <martin@gnome.org>
10717
10718         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
10719         find the symbol writer.
10720
10721         * driver.cs: csc also allows the arguments to /define being
10722         separated by commas, not only by semicolons.
10723
10724 2002-08-23  Martin Baulig  <martin@gnome.org>
10725
10726         * interface.cs (Interface.GetMembers): Added static check for events.
10727
10728 2002-08-15  Martin Baulig  <martin@gnome.org>
10729
10730         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
10731         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
10732
10733         * ecore.cs (Expression.MemberLookup): Added documentation and explained
10734         why the MethodData.EmitDestructor() change was necessary.
10735
10736 2002-08-20  Martin Baulig  <martin@gnome.org>
10737
10738         * class.cs (TypeContainer.FindMembers): Added static check for events.
10739
10740         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
10741
10742         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
10743         use Type.GetEvents(), not Type.FindMembers().
10744
10745 2002-08-20  Martin Baulig  <martin@gnome.org>
10746
10747         * decl.cs (MemberCache): Added a special method cache which will
10748         be used for method-only searched.  This ensures that a method
10749         search will return a MethodInfo with the correct ReflectedType for
10750         inherited methods.      
10751
10752 2002-08-20  Martin Baulig  <martin@gnome.org>
10753
10754         * decl.cs (DeclSpace.FindMembers): Made this public.
10755
10756 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10757
10758         * delegate.cs: fixed build on windows.
10759         [FIXME:  Filed as bug #29150: MCS must report these errors.]
10760
10761 2002-08-19  Ravi Pratap  <ravi@ximian.com>
10762
10763         * ecore.cs (StandardConversionExists): Return a false
10764         if we are trying to convert the void type to anything else
10765         since that is not allowed.
10766
10767         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
10768         we flag error 70 in the event an event is trying to be accessed
10769         directly from outside the declaring type.
10770
10771 2002-08-20  Martin Baulig  <martin@gnome.org>
10772
10773         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
10774         MemberCache from typemanager.cs to decl.cs.
10775
10776 2002-08-19  Martin Baulig  <martin@gnome.org>
10777
10778         * class.cs (TypeContainer): Implement IMemberContainer.
10779         (TypeContainer.DefineMembers): Create the MemberCache.
10780         (TypeContainer.FindMembers): Do better BindingFlags checking; only
10781         return public members if BindingFlags.Public was given, check
10782         whether members are static.
10783
10784 2002-08-16  Martin Baulig  <martin@gnome.org>
10785
10786         * decl.cs (DeclSpace.Define): Splitted this in Define and
10787         DefineMembers.  DefineMembers is called first and initializes the
10788         MemberCache.
10789
10790         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
10791         DefineMembers() on all our DeclSpaces.
10792
10793         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
10794         but call DefineMembers() on all nested interfaces.  We call their
10795         Define() in our new Define() function.
10796
10797         * interface.cs (Interface): Implement IMemberContainer.
10798         (Interface.Define): Moved all code except the attribute stuf to
10799         DefineMembers().
10800         (Interface.DefineMembers): Initialize the member cache.
10801
10802         * typemanager.cs (IMemberFinder): Removed this interface, we don't
10803         need this anymore since we can use MemberCache.FindMembers directly.
10804
10805 2002-08-19  Martin Baulig  <martin@gnome.org>
10806
10807         * typemanager.cs (MemberCache): When creating the cache for an
10808         interface type, add all inherited members.
10809         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
10810         to `out bool used_cache' and documented it.
10811         (TypeManager.MemberLookup): If we already used the cache in the first
10812         iteration, we don't need to do the interfaces check.
10813
10814 2002-08-19  Martin Baulig  <martin@gnome.org>
10815
10816         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
10817         here from IMemberFinder and don't implement this interface anymore.
10818         (DeclSpace.MemberCache): Moved here from IMemberFinder.
10819
10820         * typemanager.cs (IMemberFinder): This interface is now only used by
10821         classes which actually support the member cache.
10822         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
10823         since we only put DeclSpaces into this Hashtable.
10824         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
10825         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
10826
10827 2002-08-16  Martin Baulig  <martin@gnome.org>
10828
10829         * typemanager.cs (ICachingMemberFinder): Removed.
10830         (IMemberFinder.MemberCache): New property.
10831         (TypeManager.FindMembers): Merged this with RealFindMembers().
10832         This function will never be called from TypeManager.MemberLookup()
10833         so we can't use the cache here, just the IMemberFinder.
10834         (TypeManager.MemberLookup_FindMembers): Check whether the
10835         IMemberFinder has a MemberCache and call the cache's FindMembers
10836         function.
10837         (MemberCache): Rewrote larger parts of this yet another time and
10838         cleaned it up a bit.
10839
10840 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
10841
10842         * driver.cs (LoadArgs): Support quoting.
10843
10844         (Usage): Show the CSC-like command line arguments.
10845
10846         Improved a few error messages.
10847
10848 2002-08-15  Martin Baulig  <martin@gnome.org>
10849
10850         * typemanager.cs (IMemberContainer.Type): New property.
10851         (IMemberContainer.IsInterface): New property.
10852
10853         The following changes are conditional to BROKEN_RUNTIME, which is
10854         defined at the top of the file.
10855
10856         * typemanager.cs (MemberCache.MemberCache): Don't add the base
10857         class'es members, but add all members from TypeHandle.ObjectType
10858         if we're an interface.
10859         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
10860         is the current type.
10861         (MemberCache.CacheEntry.Container): Removed this field.
10862         (TypeHandle.GetMembers): Include inherited members.
10863
10864 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10865
10866         * typemanager.cs: fixed compilation and added a comment on a field that
10867         is never used.
10868
10869 2002-08-15  Martin Baulig  <martin@gnome.org>
10870
10871         * class.cs (ConstructorInitializer.Resolve): In the
10872         Expression.MemberLookup call, use the queried_type as
10873         invocation_type.
10874
10875         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
10876         declared' attribute, it's always true.
10877         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
10878         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
10879         temporary wrapper for FindMembers which tells MemberLookup whether
10880         members from the base classes are included in the return value.
10881         This will go away soon.
10882         (TypeManager.MemberLookup): Use this temporary hack here; once the
10883         new MemberCache is completed, we don't need to do the DeclaredOnly
10884         looping here anymore since the MemberCache will take care of this.
10885         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
10886         (MemberCache): When creating the MemberCache for a class, get
10887         members from the current class and all its base classes.
10888         (MemberCache.CacheEntry.Container): New field.  This is a
10889         temporary hack until the Mono runtime is fixed to distinguish
10890         between ReflectedType and DeclaringType.  It allows us to use MCS
10891         with both the MS runtime and the unfixed Mono runtime without
10892         problems and without accecting performance.
10893         (MemberCache.SearchMembers): The DeclaredOnly looping from
10894         TypeManager.MemberLookup is now done here.      
10895
10896 2002-08-14  Martin Baulig  <martin@gnome.org>
10897
10898         * statement.cs (MyStructInfo.MyStructInfo): Don't call
10899         Type.GetFields on dynamic types but get the fields from the
10900         corresponding TypeContainer.
10901         (MyStructInfo.GetStructInfo): Added check for enum types.
10902
10903         * typemanager.cs (MemberList.IsSynchronized): Implemented.
10904         (MemberList.SyncRoot): Implemented.
10905         (TypeManager.FilterWithClosure): No need to check permissions if
10906         closure_start_type == closure_invocation_type, don't crash if
10907         closure_invocation_type is null.
10908
10909 2002-08-13  Martin Baulig  <martin@gnome.org>
10910
10911         Rewrote TypeContainer.FindMembers to use a member cache.  This
10912         gives us a speed increase of about 35% for the self-hosting MCS
10913         build and of about 15-20% for the class libs (both on GNU/Linux).
10914
10915         * report.cs (Timer): New class to get enhanced profiling.  This
10916         whole class is "TIMER" conditional since it remarkably slows down
10917         compilation speed.
10918
10919         * class.cs (MemberList): New class.  This is an IList wrapper
10920         which we're now using instead of passing MemberInfo[]'s around to
10921         avoid copying this array unnecessarily.
10922         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
10923         (ICachingMemberFinder, IMemberContainer): New interface.
10924         (TypeManager.FilterWithClosure): If `criteria' is null, the name
10925         has already been checked, otherwise use it for the name comparision.
10926         (TypeManager.FindMembers): Renamed to RealMemberFinder and
10927         provided wrapper which tries to use ICachingMemberFinder.FindMembers
10928         if possible.  Returns a MemberList, not a MemberInfo [].
10929         (TypeHandle): New class, implements IMemberContainer.  We create
10930         one instance of this class per type, it contains a MemberCache
10931         which is used to do the member lookups.
10932         (MemberCache): New class.  Each instance of this class contains
10933         all members of a type and a name-based hash table.
10934         (MemberCache.FindMembers): This is our new member lookup
10935         function.  First, it looks up all members of the requested name in
10936         the hash table.  Then, it walks this list and sorts out all
10937         applicable members and returns them.
10938
10939 2002-08-13  Martin Baulig  <martin@gnome.org>
10940
10941         In addition to a nice code cleanup, this gives us a performance
10942         increase of about 1.4% on GNU/Linux - not much, but it's already
10943         half a second for the self-hosting MCS compilation.
10944
10945         * typemanager.cs (IMemberFinder): New interface.  It is used by
10946         TypeManager.FindMembers to call FindMembers on a TypeContainer,
10947         Enum, Delegate or Interface.
10948         (TypeManager.finder_to_member_finder): New PtrHashtable.
10949         (TypeManager.finder_to_container): Removed.
10950         (TypeManager.finder_to_delegate): Removed.
10951         (TypeManager.finder_to_interface): Removed.
10952         (TypeManager.finder_to_enum): Removed.
10953
10954         * interface.cs (Interface): Implement IMemberFinder.
10955
10956         * delegate.cs (Delegate): Implement IMemberFinder.
10957
10958         * enum.cs (Enum): Implement IMemberFinder.
10959
10960         * class.cs (TypeContainer): Implement IMemberFinder.
10961
10962 2002-08-12  Martin Baulig  <martin@gnome.org>
10963
10964         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
10965
10966 2002-08-12  Martin Baulig  <martin@gnome.org>
10967
10968         * ecore.cs (ITypeExpression): New interface for expressions which
10969         resolve to a type.
10970         (TypeExpression): Renamed to TypeLookupExpression.
10971         (Expression.DoResolve): If we're doing a types-only lookup, the
10972         expression must implement the ITypeExpression interface and we
10973         call DoResolveType() on it.
10974         (SimpleName): Implement the new ITypeExpression interface.
10975         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
10976         hack, the situation that we're only looking up types can't happen
10977         anymore when this method is called.  Moved the type lookup code to
10978         DoResolveType() and call it.
10979         (SimpleName.DoResolveType): This ITypeExpression interface method
10980         is now doing the types-only lookup.
10981         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
10982         (ResolveFlags): Added MaskExprClass.
10983
10984         * expression.cs (MemberAccess): Implement the ITypeExpression
10985         interface.
10986         (MemberAccess.DoResolve): Added support for a types-only lookup
10987         when we're called via ITypeExpression.DoResolveType().
10988         (ComposedCast): Implement the ITypeExpression interface.
10989
10990         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
10991         Expression.Resolve() with ResolveFlags.Type instead.
10992
10993 2002-08-12  Martin Baulig  <martin@gnome.org>
10994
10995         * interface.cs (Interface.Define): Apply attributes.
10996
10997         * attribute.cs (Attribute.ApplyAttributes): Added support for
10998         interface attributes.
10999
11000 2002-08-11  Martin Baulig  <martin@gnome.org>
11001
11002         * statement.cs (Block.Emit): Only check the "this" variable if we
11003         do not always throw an exception.
11004
11005         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
11006         whether the property has a set accessor.
11007
11008 2002-08-11  Martin Baulig  <martin@gnome.org>
11009
11010         Added control flow analysis support for structs.
11011
11012         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
11013         with control flow analysis turned off.
11014         (IVariable): New interface.
11015         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
11016         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
11017         (FieldExpr.DoResolve): Resolve the instance expression with flow
11018         analysis turned off and do the definite assignment check after the
11019         resolving when we know what the expression will resolve to.
11020
11021         * expression.cs (LocalVariableReference, ParameterReference):
11022         Implement the new IVariable interface, only call the flow analysis
11023         code if ec.DoFlowAnalysis is true.
11024         (This): Added constructor which takes a Block argument.  Implement
11025         the new IVariable interface.
11026         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
11027         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
11028         This does the definite assignment checks for struct members.
11029
11030         * class.cs (Constructor.Emit): If this is a non-static `struct'
11031         constructor which doesn't have any initializer, call
11032         Block.AddThisVariable() to tell the flow analysis code that all
11033         struct elements must be initialized before control returns from
11034         the constructor.
11035
11036         * statement.cs (MyStructInfo): New public class.
11037         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
11038         argument to this indexer.  If non-zero, check an individual struct
11039         member, not the whole struct.
11040         (FlowBranching.CheckOutParameters): Check struct members.
11041         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
11042         overloaded versions of these methods which take an additional
11043         `int field_idx' argument to check struct members.
11044         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
11045         overloaded versions of these methods which take an additional
11046         `string field_name' argument to check struct member.s
11047         (VariableInfo): Implement the IVariable interface.
11048         (VariableInfo.StructInfo): New public property.  Returns the
11049         MyStructInfo instance of the variable if it's a struct or null.
11050         (Block.AddThisVariable): New public method.  This is called from
11051         Constructor.Emit() for non-static `struct' constructor which do
11052         not have any initializer.  It creates a special variable for the
11053         "this" instance variable which will be checked by the flow
11054         analysis code to ensure that all of the struct's fields are
11055         initialized before control returns from the constructor.
11056         (UsageVector): Added support for struct members.  If a
11057         variable/parameter is a struct with N members, we reserve a slot
11058         in the usage vector for each member.  A struct is considered fully
11059         initialized if either the struct itself (slot 0) or all its
11060         members are initialized.
11061
11062 2002-08-08  Martin Baulig  <martin@gnome.org>
11063
11064         * driver.cs (Driver.MainDriver): Only report an error CS5001
11065         if there were no compilation errors.
11066
11067         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
11068         `UnsafeContext' property to determine whether the parent is in
11069         unsafe context rather than checking the parent's ModFlags:
11070         classes nested in an unsafe class are unsafe as well.
11071
11072 2002-08-08  Martin Baulig  <martin@gnome.org>
11073
11074         * statement.cs (UsageVector.MergeChildren): Distinguish between
11075         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
11076         we return.  Added test17() and test18() to test-154.cs.
11077
11078 2002-08-08  Martin Baulig  <martin@gnome.org>
11079
11080         * typemanager.cs (TypeManager.FilterWithClosure): If we have
11081         Family access, make sure the invoking type isn't a subclass of the
11082         queried type (that'd be a CS1540).
11083
11084         * ecore.cs (Expression.MemberLookup): Added overloaded version of
11085         this method which takes an additional `Type invocation_type'.
11086
11087         * expression.cs (BaseAccess.DoResolve): Use the base type as
11088         invocation and query type.
11089         (MemberAccess.DoResolve): If the lookup failed and we're about to
11090         report a CS0122, try a lookup with the ec.ContainerType - if this
11091         succeeds, we must report a CS1540.
11092
11093 2002-08-08  Martin Baulig  <martin@gnome.org>
11094
11095         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
11096         (MethodGroupExpr): Implement the IMemberExpr interface.
11097
11098         * expression (MemberAccess.ResolveMemberAccess): No need to have
11099         any special code for MethodGroupExprs anymore, they're now
11100         IMemberExprs.   
11101
11102 2002-08-08  Martin Baulig  <martin@gnome.org>
11103
11104         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
11105         Family, FamANDAssem and FamORAssem permissions.
11106         (TypeManager.IsSubclassOrNestedChildOf): New public method.
11107
11108 2002-08-08  Martin Baulig  <martin@gnome.org>
11109
11110         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
11111         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
11112         or loop block.
11113
11114 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
11115
11116         * driver.cs: implemented /resource option to embed managed resources.
11117
11118 2002-08-07  Martin Baulig  <martin@gnome.org>
11119
11120         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
11121         (FieldBase.HasFieldInitializer): New public property.
11122         (FieldBase.GetInitializerExpression): New public method.  Resolves and
11123         returns the field initializer and makes sure it is only resolved once.
11124         (TypeContainer.EmitFieldInitializers): Call
11125         FieldBase.GetInitializerExpression to get the initializer, this ensures
11126         that it isn't resolved multiple times.
11127
11128         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
11129         the resolving process (SimpleName/MemberLookup) that we're currently
11130         emitting a field initializer (which must not access any instance members,
11131         this is an error CS0236).
11132
11133         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
11134         argument, if the `IsFieldInitializer' flag is set, we must report and
11135         error CS0236 and not an error CS0120.   
11136
11137 2002-08-07  Martin Baulig  <martin@gnome.org>
11138
11139         * ecore.cs (IMemberExpr): New public interface.
11140         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
11141         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
11142         if the expression is an IMemberExpr.
11143
11144         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
11145         to be null, implicitly default to `this' if we're non-static in
11146         this case.  Simplified the code a lot by using the new IMemberExpr
11147         interface.  Also fixed bug #28176 here.
11148
11149 2002-08-06  Martin Baulig  <martin@gnome.org>
11150
11151         * cs-parser.jay (SimpleLookup): Removed.  We need to create
11152         ParameterReferences during semantic analysis so that we can do a
11153         type-only search when resolving Cast, TypeOf and SizeOf.
11154         (block): Pass the `current_local_parameters' to the Block's
11155         constructor.
11156
11157         * class.cs (ConstructorInitializer): Added `Parameters parameters'
11158         argument to the constructor.
11159         (ConstructorInitializer.Resolve): Create a temporary implicit
11160         block with the parameters.
11161
11162         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
11163         references here if we aren't doing a type-only search.
11164
11165         * statement.cs (Block): Added constructor which takes a
11166         `Parameters parameters' argument.
11167         (Block.Parameters): New public property.
11168
11169         * support.cs (InternalParameters.Parameters): Renamed `parameters'
11170         to `Parameters' and made it public readonly.
11171
11172 2002-08-06  Martin Baulig  <martin@gnome.org>
11173
11174         * ecore.cs (Expression.Warning): Made this public as well.
11175
11176         * report.cs (Report.Debug): Print the contents of collections.
11177
11178 2002-08-06  Martin Baulig  <martin@gnome.org>
11179
11180         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
11181         used to tell Resolve() which kinds of expressions it may return.
11182         (Expression.Resolve): Added overloaded version of this method which
11183         takes a `ResolveFlags flags' argument.  This can be used to tell
11184         Resolve() which kinds of expressions it may return.  Reports a
11185         CS0118 on error.
11186         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
11187         ResolveFlags.SimpleName.
11188         (Expression.Error118): Added overloaded version of this method which
11189         takes a `ResolveFlags flags' argument.  It uses the flags to determine
11190         which kinds of expressions are allowed.
11191
11192         * expression.cs (Argument.ResolveMethodGroup): New public method.
11193         Resolves an argument, but allows a MethodGroup to be returned.
11194         This is used when invoking a delegate.
11195
11196         * TODO: Updated a bit.
11197
11198 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11199
11200         Fixed compilation with csc.
11201
11202         * ecore.cs: Expression.Error made public. Is this correct? Should
11203         Warning be made public too?
11204
11205         * expression.cs: use ea.Location instead of ea.loc.
11206         [FIXME:  Filed as bug #28607: MCS must report these errors.]
11207
11208 2002-08-06  Martin Baulig  <martin@gnome.org>
11209
11210         * ecore.cs (Expression.loc): Moved the location here instead of
11211         duplicating it in all derived classes.
11212         (Expression.Location): New public property.
11213         (Expression.Error, Expression.Warning): Made them non-static and
11214         removed the location argument.
11215         (Expression.Warning): Added overloaded version which takes an
11216         `int level' argument.
11217         (Expression.Error118): Make this non-static and removed the
11218         expression and location arguments.
11219         (TypeExpr): Added location argument to the constructor.
11220
11221         * expression.cs (StaticCallExpr): Added location argument to
11222         the constructor.
11223         (Indirection, PointerArithmetic): Likewise.
11224         (CheckedExpr, UnCheckedExpr): Likewise.
11225         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
11226         (StringPtr): Likewise.
11227
11228
11229 2002-08-05  Martin Baulig  <martin@gnome.org>
11230
11231         * expression.cs (BaseAccess.DoResolve): Actually report errors.
11232
11233         * assign.cs (Assign.DoResolve): Check whether the source
11234         expression is a value or variable.
11235
11236         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
11237         while resolving the corresponding blocks.
11238
11239         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
11240         an error, don't silently return null.
11241
11242         * statement.cs (Block.AddVariable): Do the error reporting here
11243         and distinguish between CS0128 and CS0136.
11244         (Block.DoResolve): Report all unused labels (warning CS0164).
11245         (LabeledStatement): Pass the location to the constructor.
11246         (LabeledStatement.HasBeenReferenced): New property.
11247         (LabeledStatement.Resolve): Set it to true here.
11248
11249         * statement.cs (Return.Emit): Return success even after reporting
11250         a type mismatch error (CS0126 or CS0127), this is what csc does and
11251         it avoids confusing the users with any consecutive errors.
11252
11253 2002-08-05  Martin Baulig  <martin@gnome.org>
11254
11255         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
11256
11257         * const.cs (Const.LookupConstantValue): Catch circular definitions.
11258
11259         * expression.cs (MemberAccess.DoResolve): Silently return if an
11260         error has already been reported.
11261
11262         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
11263         error has already been reported.
11264
11265 2002-08-05  Martin Baulig  <martin@gnome.org>
11266
11267         * statement.cs (UsageVector): Only initialize the `parameters'
11268         vector if we actually have any "out" parameters.
11269
11270 2002-08-05  Martin Baulig  <martin@gnome.org>
11271
11272         * expression.cs (Binary.ResolveOperator): When combining delegates,
11273         they must have the same type.
11274
11275 2002-08-05  Martin Baulig  <martin@gnome.org>
11276
11277         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
11278         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
11279         work with the ms runtime and we also don't need it: if we're a
11280         PropertyBuilder and not in the `indexer_arguments' hash, then we
11281         are a property and not an indexer.
11282
11283         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
11284         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
11285         since the latter one doesn't work with the ms runtime.
11286
11287 2002-08-03  Martin Baulig  <martin@gnome.org>
11288
11289         Fixed bugs #27998 and #22735.
11290
11291         * class.cs (Method.IsOperator): New public field.
11292         (Method.CheckBase): Report CS0111 if there's already a method
11293         with the same parameters in the current class.  Report CS0508 when
11294         attempting to change the return type of an inherited method.
11295         (MethodData.Emit): Report CS0179 if a method doesn't have a body
11296         and it's not marked abstract or extern.
11297         (PropertyBase): New abstract base class for Property and Indexer.
11298         (PropertyBase.CheckBase): Moved here from Property and made it work
11299         for indexers.
11300         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
11301         the same so we can reuse it there.
11302         (Property, Indexer): Derive from PropertyBase.
11303         (MethodSignature.inheritable_property_signature_filter): New delegate
11304         to find properties and indexers.
11305
11306         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
11307         argument and improved error reporting.
11308
11309         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
11310         EmptyReadOnlyParameters and made it a property.
11311
11312         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
11313         version of this method which takes a `PropertyInfo indexer'.
11314         (TypeManager.RegisterIndexer): New method.
11315
11316         * class.cs: Added myself as author of this file :-)
11317
11318 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11319
11320         * class.cs: fixed compilation on windoze.
11321
11322 2002-08-03  Martin Baulig  <martin@gnome.org>
11323
11324         * interface.cs (Interface.GetInterfaceBases): Check whether all
11325         base interfaces are at least as accessible than the current one.
11326
11327         * class.cs (TypeContainer.GetClassBases): Check whether base types
11328         are at least as accessible than the current type.
11329         (TypeContainer.AsAccessible): Implemented and made non-static.
11330         (MemberBase.CheckParameters): Report errors if the accessibility
11331         checks fail.
11332
11333         * delegate.cs (Delegate.Delegate): The default visibility is
11334         internal for top-level types and private for nested types.
11335         (Delegate.Define): Report errors if the accessibility checks fail.
11336
11337         * enum.cs (Enum.Enum): The default visibility is internal for
11338         top-level types and private for nested types.
11339         (Enum.DefineType): Compute the correct visibility.
11340
11341         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
11342         function which takes a `bool is_toplevel' instead of a TypeContainer.
11343
11344         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
11345         builtin type.
11346
11347 2002-08-02  Martin Baulig  <martin@gnome.org>
11348
11349         * expression.cs (LocalVariableReferenc): Added constructor which
11350         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
11351         (LocalVariableReference.IsReadOnly): New property.
11352         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
11353         variable is readonly, use our own readonly flag to do this; you can
11354         use the new constructor to get a writable reference to a read-only
11355         variable.
11356
11357         * cs-parser.jay (foreach_statement, using_statement): Get a writable
11358         reference to the local variable.
11359
11360 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
11361
11362         * rootcontext.cs (ResolveCore): Also include System.Exception
11363
11364         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
11365         we reach an EmptyStatement.
11366
11367         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
11368         is also fine.
11369
11370         * expression.cs (Binary.ResolveOperator): Check error result in
11371         two places.
11372
11373         use brtrue/brfalse directly and avoid compares to null.
11374
11375 2002-08-02  Martin Baulig  <martin@gnome.org>
11376
11377         * class.cs (TypeContainer.Define): Define all nested interfaces here.
11378         Fixes bug #28407, added test-155.cs.
11379
11380 2002-08-01  Martin Baulig  <martin@gnome.org>
11381
11382         * class.cs (Event.EmitDefaultMethod): Make this work with static
11383         events.  Fixes #28311, added verify-3.cs.
11384
11385 2002-08-01  Martin Baulig  <martin@gnome.org>
11386
11387         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
11388         `is_disposable' fields.
11389         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
11390         `hm.is_disposable' if we're using the collection pattern.
11391         (Foreach.EmitCollectionForeach): Use the correct type for the
11392         enumerator's local variable, only emit the try/finally block if
11393         necessary (fixes #27713).
11394
11395 2002-08-01  Martin Baulig  <martin@gnome.org>
11396
11397         * ecore.cs (Expression.report118): Renamed to Error118 and made
11398         it public static.
11399
11400         * statement.cs (Throw.Resolve): Check whether the expression is of
11401         the correct type (CS0118) and whether the type derives from
11402         System.Exception (CS0155).
11403         (Catch.Resolve): New method.  Do the type lookup here and check
11404         whether it derives from System.Exception (CS0155).
11405         (Catch.CatchType, Catch.IsGeneral): New public properties.
11406
11407         * typemanager.cs (TypeManager.exception_type): Added.
11408
11409 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
11410
11411         * driver.cs: Updated About function.
11412
11413 2002-07-31  Martin Baulig  <martin@gnome.org>
11414
11415         Implemented Control Flow Analysis.
11416
11417         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
11418         (EmitContext.CurrentBranching): Added.
11419         (EmitContext.StartFlowBranching): Added.
11420         (EmitContext.EndFlowBranching): Added.
11421         (EmitContext.KillFlowBranching): Added.
11422         (EmitContext.IsVariableAssigned): Added.
11423         (EmitContext.SetVariableAssigned): Added.
11424         (EmitContext.IsParameterAssigned): Added.
11425         (EmitContext.SetParameterAssigned): Added.
11426         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
11427         Added control flow analysis stuff here.
11428
11429         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
11430         resolve the expression as lvalue.
11431         (LocalVariableReference.DoResolve): Check whether the variable has
11432         already been assigned.
11433         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
11434         the parameter as assigned here.
11435         (ParameterReference.DoResolve): Check whether the parameter has already
11436         been assigned.
11437         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
11438         expression as lvalue.
11439
11440         * statement.cs (FlowBranching): New class for the flow analysis code.
11441         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
11442         (LabeledStatement.IsDefined): New public property.
11443         (LabeledStatement.AddUsageVector): New public method to tell flow
11444         analyis that the label may be reached via a forward jump.
11445         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
11446         flow analysis.
11447         (VariableInfo.Number): New public field.  This is used by flow analysis
11448         to number all locals of a block.
11449         (Block.CountVariables): New public property.  This is the number of
11450         local variables in this block (including the locals from all parent
11451         blocks).
11452         (Block.EmitMeta): Number all the variables.
11453
11454         * statement.cs: Added flow analysis support to all classes.
11455
11456 2002-07-31  Martin Baulig  <martin@gnome.org>
11457
11458         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
11459         To get debugging messages, compile mcs with /define:MCS_DEBUG and
11460         then use this argument.
11461
11462         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
11463
11464         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
11465         use this to specify /define options.
11466
11467 2002-07-29  Martin Baulig  <martin@gnome.org>
11468
11469         * statement.cs (Fixed): Moved all code that does variable lookups
11470         and resolvings from Emit to Resolve.
11471
11472         * statement.cs (For): Moved all code that does variable lookups
11473         and resolvings from Emit to Resolve.
11474
11475         * statement.cs (Using): Moved all code that does variable lookups
11476         and resolvings from Emit to Resolve.
11477
11478 2002-07-29  Martin Baulig  <martin@gnome.org>
11479
11480         * attribute.cs (Attribute.Resolve): Explicitly catch a
11481         System.NullReferenceException when creating the
11482         CustromAttributeBuilder and report a different warning message.
11483
11484 2002-07-29  Martin Baulig  <martin@gnome.org>
11485
11486         * support.cs (ParameterData.ParameterName): Added method to
11487         get the name of a parameter.
11488
11489         * typemanager.cs (TypeManager.IsValueType): New public method.
11490
11491 2002-07-29  Martin Baulig  <martin@gnome.org>
11492
11493         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
11494         is a flag which specifies that it's either ref or out.
11495         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
11496         the out parameter to `out Parameter.Modifier mod', also set the
11497         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
11498
11499         * support.cs (InternalParameters.ParameterModifier): Distinguish
11500         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
11501         Parameter.Modifier.ISBYREF flag if it's either ref or out.
11502
11503         * expression.cs (Argument.GetParameterModifier): Distinguish
11504         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
11505         Parameter.Modifier.ISBYREF flag if it's either ref or out.
11506
11507 2002-07-29  Martin Baulig  <martin@gnome.org>
11508
11509         * expression.cs (ParameterReference.ParameterReference): Added
11510         `Location loc' argument to the constructor.
11511
11512         * cs-parser.jay: Pass location to ParameterReference.
11513
11514 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
11515
11516         * statement.cs (Try): Initialize the location.
11517
11518         * cs-parser.jay: pass location to Try.
11519
11520         * expression.cs (Unary.Reduce): Change the prototype to return
11521         whether a constant fold could be performed or not.  The result is
11522         returned in an out parameters.  In the case of Indirection and
11523         AddressOf, we want to perform the full tests.
11524
11525 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
11526
11527         * statement.cs (Statement.Emit): Flag dead code.
11528
11529 2002-07-27  Andrew Birkett  <andy@nobugs.org>
11530
11531         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
11532
11533 2002-07-27  Martin Baulig  <martin@gnome.org>
11534
11535         * class.cs (MethodData.Define): Put back call to
11536         TypeManager.AddMethod(), accidentally commented this out.
11537
11538         * report.cs (Debug): New public method to print debugging information,
11539         this is `[Conditional ("DEBUG")]'.
11540
11541 2002-07-26  Martin Baulig  <martin@gnome.org>
11542
11543         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
11544         (switch_statement): Push the current_block to the switch_stack and
11545         pop it again when we're done with the switch.
11546         (switch_section): The new block is a child of the current_block.
11547         Fixes bug #24007, added test-152.cs.
11548
11549 2002-07-27  Martin Baulig  <martin@gnome.org>
11550
11551         * expression.cs (Invocation.EmitArguments): When calling a varargs
11552         function with only its fixed arguments, we need to pass an empty
11553         array.
11554
11555 2002-07-27  Martin Baulig  <martin@gnome.org>
11556
11557         Mono 0.13 has been released.
11558
11559 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
11560
11561         * driver.cs: Rename --resource to --linkres, because that is what
11562         we do currently, we dont support --resource yet.
11563
11564         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
11565
11566 2002-07-25  Martin Baulig  <martin@gnome.org>
11567
11568         * class.cs (MethodData): New public class.  This is a `method builder'
11569         class for a method or one accessor of a Property/Indexer/Event.
11570         (MethodData.GetMethodFlags): Moved here from MemberBase.
11571         (MethodData.ApplyAttributes): Likewise.
11572         (MethodData.ApplyObsoleteAttribute): Likewise.
11573         (MethodData.ApplyConditionalAttribute): Likewise.
11574         (MethodData.ApplyDllImportAttribute): Likewise.
11575         (MethodData.CheckAbstractAndExternal): Likewise.
11576         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
11577         (MethodData.Emit): Formerly known as Method.Emit().
11578         (MemberBase): Moved everything which was specific to a single
11579         accessor/method to MethodData.
11580         (Method): Create a new MethodData and call Define() and Emit() on it.
11581         (Property, Indexer, Event): Create a new MethodData objects for each
11582         accessor and call Define() and Emit() on them.
11583
11584 2002-07-25  Martin Baulig  <martin@gnome.org>
11585
11586         Made MethodCore derive from MemberBase to reuse the code from there.
11587         MemberBase now also checks for attributes.
11588
11589         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
11590         (MemberBase.GetMethodFlags): Moved here from class Method and marked
11591         as virtual.
11592         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
11593         `CallingConventions cc' and `Attributes opt_attrs' arguments.
11594         (MemberBase.ApplyAttributes): New virtual method; applies the
11595         attributes to a method or accessor.
11596         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
11597         (MemberBase.ApplyConditionalAttribute): Likewise.
11598         (MemberBase.ApplyDllImportAttribute): Likewise.
11599         (MemberBase.CheckAbstractAndExternal): Likewise.
11600         (MethodCore.ParameterTypes): This is now a property instead of a
11601         method, it's initialized from DoDefineParameters().
11602         (MethodCore.ParameterInfo): Removed the set accessor.
11603         (MethodCore.DoDefineParameters): New protected virtual method to
11604         initialize ParameterTypes and ParameterInfo.
11605         (Method.GetReturnType): We can now simply return the MemberType.
11606         (Method.GetMethodFlags): Override the MemberBase version and add
11607         the conditional flags.
11608         (Method.CheckBase): Moved some code from Define() here, call
11609         DoDefineParameters() here.
11610         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
11611         here to avoid some larger code duplication.
11612         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
11613         ensure that abstract and external accessors don't declare a body.
11614
11615         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
11616         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
11617         lookup in the attribute's parent classes, so we need to abort as soon
11618         as we found the first match.
11619         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
11620         the attribute has no arguments.
11621
11622         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
11623         of a Method.
11624
11625 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11626
11627         * cs-parser.jay: reverted previous patch.
11628
11629 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11630
11631         * cs-parser.jay: fixed bug #22119.
11632
11633 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11634
11635         * attribute.cs: fixed compilation. The error was:
11636         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
11637         be assigned to before control leaves the current method."
11638         [FIXME:  Filed as bug #28186: MCS must report this error.]
11639
11640 2002-07-25  Martin Baulig  <martin@gnome.org>
11641
11642         * attribute.cs (Attribute.Conditional_GetConditionName): New static
11643         method to pull the condition name ouf of a Conditional attribute.
11644         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
11645         the obsolete message and error flag out of an Obsolete attribute.
11646
11647         * class.cs (Method.GetMethodFlags): New public method to get the
11648         TypeManager.MethodFlags for this method.
11649         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
11650         private methods.
11651         (Method.Define): Get and apply the Obsolete and Conditional attributes;
11652         if we're overriding a virtual function, set the new private variable
11653         `parent_method'; call the new TypeManager.AddMethod().
11654
11655         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
11656         the MethodBuilder and the Method in a PtrHashtable.
11657         (TypeManager.builder_to_method): Added for this purpose.
11658         (TypeManager.MethodFlags): Added IsObsoleteError.
11659         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
11660         Obsolete and Conditional arguments in MethodBuilders.  If we discover
11661         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
11662         the message from the attribute.
11663
11664 2002-07-24  Martin Baulig  <martin@gnome.org>
11665
11666         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
11667         preprocessor directives, ensure that the argument to #define/#undef is
11668         exactly one identifier and that it's actually an identifier.
11669
11670         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
11671         did not work ....
11672
11673 2002-07-24  Martin Baulig  <martin@gnome.org>
11674
11675         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
11676         initialize it to TypeManager.object_type in the constructor.
11677         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
11678         of the `hm.get_current' method if we're using the collection pattern.
11679         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
11680         for the explicit conversion to make it work when we're using the collection
11681         pattern and the `Current' property has a different return type than `object'.
11682         Fixes #27713.
11683
11684 2002-07-24  Martin Baulig  <martin@gnome.org>
11685
11686         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
11687         does not match, but don't report any errors.  This method is called in
11688         order for all methods in a MethodGroupExpr until a matching method is
11689         found, so we don't want to bail out if the first method doesn't match.
11690         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
11691         matches, report the 123.  Fixes #28070.
11692
11693 2002-07-24  Martin Baulig  <martin@gnome.org>
11694
11695         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
11696         TypeManager.TypeToCoreType() to the top of the method so the
11697         following equality checks will work.  Fixes #28107.
11698
11699 2002-07-24  Martin Baulig  <martin@gnome.org>
11700
11701         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
11702         operand is of type uint, and the other operand is of type sbyte,
11703         short or int, the operands are converted to type long." -
11704         Actually do what this comment already told us.  Fixes bug #28106,
11705         added test-150.cs.
11706
11707 2002-07-24  Martin Baulig  <martin@gnome.org>
11708
11709         * class.cs (MethodBase): New abstract class.  This is now a base
11710         class for Property, Indexer and Event to avoid some code duplication
11711         in their Define() and DefineMethods() methods.
11712         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
11713         generic methods for Define() and DefineMethods().
11714         (FieldBase): Derive from MemberBase, not MemberCore.
11715         (Property): Derive from MemberBase, not MemberCore.
11716         (Property.DefineMethod): Moved all the code from this method to the
11717         new MethodBase.DefineAccessor(), just call it with appropriate
11718         argumetnts.
11719         (Property.Define): Call the new Property.DoDefine(), this does some
11720         sanity checks and we don't need to duplicate the code everywhere.
11721         (Event): Derive from MemberBase, not MemberCore.
11722         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
11723         accessors, this will also make them work with interface events.
11724         (Indexer): Derive from MemberBase, not MemberCore.
11725         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
11726         (Indexer.Define): Use the new MethodBase functions.
11727
11728         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
11729         argument to the constructor.
11730         (Interface.FindMembers): Added support for interface events.
11731         (Interface.PopluateEvent): Implemented.
11732
11733         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
11734
11735 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
11736
11737         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
11738         but this is required to check for a method name being the same as
11739         the containing class.  
11740
11741         Handle this now.
11742
11743 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11744
11745         * interface.cs: initialize variable.
11746
11747 2002-07-23  Martin Baulig  <martin@gnome.org>
11748
11749         Implemented the IndexerName attribute in interfaces.
11750
11751         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
11752         name if this is an explicit interface implementation.
11753         (Indexer.InterfaceIndexerName): New public variable.  If we're
11754         implementing an interface indexer, this is the IndexerName in that
11755         interface.  Otherwise, it's the IndexerName.
11756         (Indexer.DefineMethod): If we're implementing interface indexer,
11757         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
11758         and Pending.ImplementIndexer methods.
11759         (Indexer.Define): Also define the PropertyBuilder if we're
11760         implementing an interface indexer and this is neither an explicit
11761         interface implementation nor do the IndexerName match the one in
11762         the interface.
11763
11764         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
11765         If a method is defined here, then we always need to create a proxy
11766         for it.  This is used when implementing interface indexers.
11767         (Pending.IsInterfaceIndexer): New public method.
11768         (Pending.ImplementIndexer): New public method.
11769         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
11770         This is used when implementing interface indexers to define a proxy
11771         if necessary.
11772         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
11773         define a proxy if necessary.
11774
11775         * interface.cs (Interface.IndexerName): New public variable.
11776         (Interface.PopulateIndexer): Set the IndexerName.
11777         (Interface.DefineIndexers): New private method.  Populate all the
11778         indexers and make sure their IndexerNames match.
11779
11780         * typemanager.cs (IndexerPropertyName): Added support for interface
11781         indexers.
11782
11783 2002-07-22  Martin Baulig  <martin@gnome.org>
11784
11785         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
11786         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
11787         ret if HasReturnLabel.
11788         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
11789         variables.
11790
11791         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
11792         and set the ec.LoopBeginTryCatchLevel.
11793         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
11794         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
11795         the current ec.TryCatchLevel, the branch goes out of an exception
11796         block.  In this case, we need to use Leave and not Br.
11797
11798 2002-07-22  Martin Baulig  <martin@gnome.org>
11799
11800         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
11801         block unless the block does not always return or it is contained in
11802         another try { ... } catch { ... } block.  Fixes bug #26506.
11803         Added verify-1.cs to the test suite.
11804
11805 2002-07-22  Martin Baulig  <martin@gnome.org>
11806
11807         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
11808         then we do not always return.  Fixes bug #24985.
11809
11810 2002-07-22  Martin Baulig  <martin@gnome.org>
11811
11812         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
11813         lookup on a per-class level; ie. walk up the class hierarchy until we
11814         found at least one applicable method, then choose the best among them.
11815         Fixes bug #24463 and test-29.cs.
11816
11817 2002-07-22  Martin Baulig  <martin@gnome.org>
11818
11819         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
11820         return types of the methods.  The return type is not part of the
11821         signature and we must not check it to make the `new' modifier work.
11822         Fixes bug #27999, also added test-147.cs.
11823         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
11824
11825         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
11826         on the method's return type.
11827
11828 2002-07-21  Martin Baulig  <martin@gnome.org>
11829
11830         * assign.cs: Make this work if the rightmost source is a constant and
11831         we need to do an implicit type conversion.  Also adding a few more tests
11832         to test-38.cs which should have caught this.
11833
11834         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
11835         target in the makefile for this.  The makefile.gnu is primarily intended
11836         for end-users who don't want to debug the compiler.
11837
11838 2002-07-21  Martin Baulig  <martin@gnome.org>
11839
11840         * assign.cs: Improved the Assign class so it can now handle embedded
11841         assignments (X = Y = Z = something).  As a side-effect this'll now also
11842         consume less local variables.  test-38.cs now passes with MCS, added
11843         a few new test cases to that test.
11844
11845 2002-07-20  Martin Baulig  <martin@gnome.org>
11846
11847         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
11848         instructions.  Fixes bug #27977, also added test-146.cs.
11849
11850 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11851
11852         * cs-tokenizer.cs: fixed getHex ().
11853
11854 2002-07-19  Martin Baulig  <martin@gnome.org>
11855
11856         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
11857         not Type.GetType() to lookup the array type.  This is needed when
11858         we're constructing an array of a user-defined type.
11859         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
11860         single-dimensional arrays, but also for single-dimensial arrays of
11861         type decimal.
11862
11863 2002-07-19  Martin Baulig  <martin@gnome.org>
11864
11865         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
11866         this function is called, it's not allowed to share LocalBuilders
11867         among ILGenerators.
11868
11869 2002-07-19  Martin Baulig  <martin@gnome.org>
11870
11871         * expression.cs (Argument.Resolve): Report an error 118 when trying
11872         to pass a type as argument.
11873
11874 2002-07-18  Martin Baulig  <martin@gnome.org>
11875
11876         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
11877         Conv_R_Un for the signed `long' type.
11878
11879 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
11880
11881         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
11882         `expr' for the temporary result, as that will fail if we do
11883         multiple resolves on the same expression.
11884
11885 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
11886
11887         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
11888         ec.TypeContainer for looking up aliases. 
11889
11890         * class.cs (TypeContainer): Remove LookupAlias from here.
11891
11892         * decl.cs (DeclSpace); Move here.
11893
11894 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
11895
11896         * class.cs (FindMembers): Only call filter if the constructor
11897         bulider is not null.
11898
11899         Also handle delegates in `NestedTypes' now.  Now we will perform
11900         type lookups using the standard resolution process.  This also
11901         fixes a bug.
11902
11903         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
11904         This uses Expressions (the limited kind that can be parsed by the
11905         tree) instead of strings.
11906
11907         * expression.cs (ComposedCast.ToString): Implement, used to flag
11908         errors since now we have to render expressions.
11909
11910         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
11911         FormArrayType. 
11912
11913         * ecore.cs (SimpleName.ToString): ditto.
11914
11915         * cs-parser.jay: Instead of using strings to assemble types, use
11916         Expressions to assemble the type (using SimpleName, ComposedCast,
11917         MemberAccess).  This should fix the type lookups in declarations,
11918         because we were using a different code path for this.
11919
11920         * statement.cs (Block.Resolve): Continue processing statements
11921         even when there is an error.
11922
11923 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
11924
11925         * class.cs (Event.Define): Also remove the `remove' method from
11926         the list of pending items.
11927
11928         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
11929         generate more compact code. 
11930
11931 2002-07-17  Martin Baulig  <martin@gnome.org>
11932
11933         * const.cs (Const.LookupConstantValue): Add support for constant
11934         `unchecked' and `checked' expressions.
11935         Also adding test case test-140.cs for this.
11936
11937 2002-07-17  Martin Baulig  <martin@gnome.org>
11938
11939         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
11940         check whether mi.ReturnType implements the IEnumerator interface; the
11941         `==' and the IsAssignableFrom() will fail in this situation.
11942
11943 2002-07-16  Ravi Pratap  <ravi@ximian.com>
11944
11945         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
11946         here too.
11947
11948 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11949
11950         * expression.cs: fixed bug #27811.
11951
11952 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
11953
11954         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
11955         Molaro: when we are a ref, the value already contains a pointer
11956         value, do not take the address of it.
11957
11958 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
11959         * removed mb-parser.jay and mb-tokenizer.cs
11960
11961 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
11962
11963         * expression.cs: check against the building corlib void type.
11964
11965 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
11966
11967         * ecore.cs: fix for valuetype static readonly fields: when 
11968         initializing them, we need their address, not the address of a copy.
11969
11970 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
11971
11972         * typemanager.cs: register also enum_type in corlib.
11973
11974 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
11975
11976         * class.cs: allow calling this (but not base) initializers in structs.
11977
11978 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
11979
11980         * ecore.cs: make sure we compare against the building base types
11981         in GetTypeSize ().
11982
11983 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
11984
11985         * typemanager.cs: fix TypeToCoreType() to handle void and object
11986         (corlib gets no more typerefs after this change).
11987
11988 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
11989
11990         * expression.cs (ArrayCreation.EmitArrayArguments): use
11991         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
11992
11993         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
11994         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
11995         array indexes, the runtime actually forbids them.
11996
11997         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
11998         for array arguments here.
11999
12000         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
12001         instead of the default for ValueTypes.
12002
12003         (New.DoEmit): Use IsValueType instead of
12004         IsSubclassOf (value_type)
12005         (New.DoResolve): ditto.
12006         (Invocation.EmitCall): ditto.
12007
12008         * assign.cs (Assign): ditto.
12009
12010         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
12011         Statements *are* currently doing part of their resolution during
12012         Emit.  
12013
12014         Expressions do always resolve during resolve, but statements are
12015         only required to propagate resolution to their children.
12016
12017 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
12018
12019         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
12020
12021         (LoadAssembly): Do not add the dll if it is already specified
12022
12023         (MainDriver): Add the System directory to the link path at the end,
12024         after all the other -L arguments. 
12025
12026         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
12027         wrong opcode for loading bytes and bools (ldelem.i1 instead of
12028         ldelem.u1) and using the opposite for sbytes.
12029
12030         This fixes Digger, and we can finally run it.
12031
12032         * driver.cs (UnixParseOption): Move the option parsing here.  
12033         (CSCParseOption): Implement CSC-like parsing of options.
12034
12035         We now support both modes of operation, the old Unix way, and the
12036         new CSC-like way.  This should help those who wanted to make cross
12037         platform makefiles.
12038
12039         The only thing broken is that /r:, /reference: and /lib: are not
12040         implemented, because I want to make those have the same semantics
12041         as the CSC compiler has, and kill once and for all the confussion
12042         around this.   Will be doing this tomorrow.
12043
12044         * statement.cs (Unsafe.Resolve): The state is checked during
12045         resolve, not emit, so we have to set the flags for IsUnsfe here.
12046
12047 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
12048
12049         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
12050         not catch the Error_ObjectRefRequired in SimpleName (as it is
12051         possible to have a class/instance variable name that later gets
12052         deambiguated), we have to check this here.      
12053
12054 2002-07-10  Ravi Pratap  <ravi@ximian.com>
12055
12056         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
12057         make static and put into Expression.
12058
12059         (Event.Define): Register the private field of the event with the 
12060         TypeManager so that GetFieldFromEvent can get at it.
12061
12062         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
12063         keep track of the private field associated with an event which
12064         has no accessors.
12065
12066         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
12067         private field.
12068
12069         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
12070
12071 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
12072
12073         * expression.cs (Binary.EmitBranchable): this routine emits the
12074         Binary expression in a branchable context.  This basically means:
12075         we need to branch somewhere, not just get the value on the stack.
12076
12077         This works together with Statement.EmitBoolExpression.
12078
12079         * statement.cs (Statement.EmitBoolExpression): Use
12080         EmitBranchable. 
12081
12082 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
12083
12084         * statement.cs (For): Reduce the number of jumps in loops.
12085
12086         (For): Implement loop inversion for the For statement.
12087
12088         (Break): We can be breaking out of a Try/Catch controlled section
12089         (foreach might have an implicit try/catch clause), so we need to
12090         use Leave instead of Br.
12091
12092         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
12093         now).  If the instace expression supports IMemoryLocation, we use
12094         the AddressOf method from the IMemoryLocation to extract the
12095         address instead of emitting the instance.
12096
12097         This showed up with `This', as we were emitting the instance
12098         always (Emit) instead of the Address of This.  Particularly
12099         interesting when This is a value type, as we dont want the Emit
12100         effect (which was to load the object).
12101
12102 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
12103
12104         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
12105
12106         * statement.cs (Checked): Set the CheckedState during the resolve
12107         process too, as the ConvCast operations track the checked state on
12108         the resolve process, and not emit.
12109
12110         * cs-parser.jay (namespace_member_declaration): Flag that we have
12111         found a declaration when we do.  This is used to flag error 1529
12112
12113         * driver.cs: Report ok when we display the help only.
12114
12115 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
12116
12117         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
12118
12119 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
12120
12121         * cs-tokenizer.cs (define): We also have to track locally the
12122         defines.  AllDefines is just used for the Conditional Attribute,
12123         but we also need the local defines for the current source code. 
12124
12125 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
12126
12127         * statement.cs (While, For, Do): These loops can exit through a
12128         Break statement, use this information to tell whether the
12129         statement is the last piece of code.
12130
12131         (Break): Flag that we break.
12132
12133         * codegen.cs (EmitContexts): New `Breaks' state variable.
12134
12135 2002-07-03  Martin Baulig  <martin@gnome.org>
12136
12137         * class.cs (TypeContainer.MethodModifiersValid): Allow override
12138         modifiers in method declarations in structs.  Otherwise, you won't
12139         be able to override things like Object.Equals().
12140
12141 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
12142
12143         * class.cs (Method, Property, Indexer): Do not allow the public
12144         modifier to be used in explicit interface implementations.
12145
12146         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
12147         override modifiers in method declarations in structs
12148
12149 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
12150
12151         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
12152         integer or real overflow, report an error
12153
12154 2002-07-02  Martin Baulig  <martin@gnome.org>
12155
12156         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
12157         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
12158         to tell the runtime about our newly created System.Object and
12159         System.ValueType types.
12160
12161 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
12162
12163         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
12164         struct instead of Ldarg/Starg.
12165
12166 2002-07-02  Martin Baulig  <martin@gnome.org>
12167
12168         * expression.cs (Indirection.Indirection): Call
12169         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
12170
12171 2002-07-02  Martin Baulig  <martin@gnome.org>
12172
12173         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
12174         ValueType, call TypeManager.TypeToCoreType() on it.
12175         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
12176         the OpCodes.Newarr argument.
12177
12178 2002-07-02  Martin Baulig  <martin@gnome.org>
12179
12180         * expression.cs (Invocation.EmitCall): When compiling corlib,
12181         replace all calls to the system's System.Array type to calls to
12182         the newly created one.
12183
12184         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
12185         System.Array methods.
12186         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
12187         from the system's System.Array type which must be replaced.
12188
12189 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
12190
12191         * typemanager.cs: load unverifiable_code_ctor so we can build
12192         corlib using the correct type. Avoid using GetTypeCode() with
12193         TypeBuilders.
12194         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
12195         TypeManager.object_type to allow building corlib.
12196
12197 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
12198
12199         * ecore.cs: handle System.Enum separately in LoadFromPtr().
12200
12201 2002-07-01  Martin Baulig  <martin@gnome.org>
12202
12203         * class.cs: Make the last change actually work, we need to check
12204         whether `ifaces != null' to avoid a crash.
12205
12206 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
12207
12208         * class.cs: when we build structs without fields that implement
12209         interfaces, we need to add the interfaces separately, since there is
12210         no API to both set the size and add the interfaces at type creation
12211         time.
12212
12213 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
12214
12215         * expression.cs: the dimension arguments to the array constructors
12216         need to be converted if they are a long.
12217
12218 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
12219
12220         * class.cs: don't emit ldarg.0 if there is no parent constructor
12221         (fixes showstopper for corlib).
12222
12223 2002-06-29  Martin Baulig  <martin@gnome.org>
12224
12225         MCS now compiles corlib on GNU/Linux :-)
12226
12227         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
12228         ie. check for MethodImplOptions.InternalCall.
12229
12230         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
12231         and TypeManager.attribute_type are null, so we must explicitly check
12232         whether parent is not null to find out whether it's an attribute type.
12233         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
12234         and SetBuilder, not only if the property is neither abstract nor external.
12235         This is necessary to set the MethodImplOptions on the accessor methods.
12236         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
12237         SetBuilder, see Property.Emit().
12238
12239         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
12240         populate "System.Object", "System.ValueType" and "System.Attribute" since
12241         they've already been populated from BootCorlib_PopulateCoreTypes().
12242
12243 2002-06-29  Martin Baulig  <martin@gnome.org>
12244
12245         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
12246         is the NullLiteral, we also need to make sure that target_type is not
12247         an enum type.   
12248
12249 2002-06-29  Martin Baulig  <martin@gnome.org>
12250
12251         * rootcontext.cs (RootContext.ResolveCore): We must initialize
12252         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
12253         before calling BootstrapCorlib_ResolveDelegate ().
12254
12255 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12256
12257         * statement.cs: fixed build-breaker. All tests passed ok.
12258
12259 2002-06-27  Martin Baulig  <martin@gnome.org>
12260
12261         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
12262         for System.Decimal when compiling corlib.
12263
12264 2002-06-27  Martin Baulig  <martin@gnome.org>
12265
12266         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
12267         switch blocks which contain nothing but a default clause.
12268
12269 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
12270
12271        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
12272
12273 2002-06-27  Martin Baulig  <martin@gnome.org>
12274
12275         * ecore.cs (PropertyExpr.PropertyExpr): Call
12276         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
12277
12278         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
12279         is already a TypeBuilder.
12280
12281 2002-06-27  Martin Baulig  <martin@gnome.org>
12282
12283         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
12284         `target_type == TypeManager.array_type', not IsAssignableFrom() in
12285         the "from an array-type to System.Array" case.  This makes it work
12286         when compiling corlib.
12287
12288 2002-06-27  Martin Baulig  <martin@gnome.org>
12289
12290         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
12291         non-static PropertyExpr, set its InstanceExpression.  This makes
12292         the `ICollection.Count' property work in System/Array.cs.
12293
12294 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
12295
12296         * driver.cs: Made error handling more consistent.  Errors now
12297         tracked by Report class, so many methods which used to return int
12298         now return void.  Main() now prints success/failure and 
12299         errors/warnings message.
12300
12301         Renamed '--probe' compiler argument to '--expect-error'.  Removed
12302         the magic number return values (123 and 124).  Now, if the
12303         expected error occurs, the compiler exits with success (exit value
12304         0).  If the compilation completes without seeing that particular
12305         error, the compiler exits with failure (exit value 1).  The
12306         makefile in mcs/errors has been changed to handle the new behaviour.
12307
12308         * report.cs: Made 'expected error' number a property and renamed
12309         it from 'Probe' to 'ExpectedError'.
12310
12311         * genericparser.cs: Removed error handling support, since it is
12312         now all done by Report class.
12313
12314         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
12315         class, so parse() no longer returns an int.
12316
12317         * namespace.cs: Use Report.Error instead of GenericParser.error
12318
12319 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
12320
12321         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
12322         TypeContainer.AddOperator): At the front of the list put the
12323         explicit implementations, so they get resolved/defined first. 
12324
12325 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
12326
12327         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
12328         interface type is implemented by this TypeContainer.  Used during
12329         explicit interface implementation.
12330
12331         (Property.Define, Indexer.Define, Method.Define): Validate that
12332         the given interface in the explicit implementation is one of the
12333         base classes for the containing type.
12334
12335         Also if we are explicitly implementing an interface, but there is
12336         no match in the pending implementation table, report an error.
12337
12338         (Property.Define): Only define the property if we are
12339         not explicitly implementing a property from an interface.  Use the
12340         correct name also for those properties (the same CSC uses,
12341         although that is really not needed).
12342
12343         (Property.Emit): Do not emit attributes for explicitly implemented
12344         properties, as there is no TypeBuilder.
12345
12346         (Indexer.Emit): ditto.
12347
12348         Hiding then means that we do not really *implement* a pending
12349         implementation, which makes code fail.
12350
12351 2002-06-22  Martin Baulig  <martin@gnome.org>
12352
12353         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
12354         the return value of Object.GetType().  [FIXME: we need to do this whenever
12355         we get a type back from the reflection library].
12356
12357 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
12358
12359         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
12360
12361 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
12362
12363         * attribute.cs: Return null if we can not look up the type.
12364
12365         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
12366         the interface types found.
12367
12368         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
12369         interface types found.
12370
12371         * typemanager.cs (GetInterfaces): Make this routine returns alll
12372         the interfaces and work around the lame differences between
12373         System.Type and System.Reflection.Emit.TypeBuilder in the results
12374         result for GetInterfaces.
12375
12376         (ExpandInterfaces): Given an array of interface types, expand and
12377         eliminate repeated ocurrences of an interface.  This expands in
12378         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
12379         be IA, IB, IC.
12380
12381 2002-06-21  Martin Baulig  <martin@gnome.org>
12382
12383         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
12384         on System.Enum.
12385
12386 2002-06-21  Martin Baulig  <martin@gnome.org>
12387
12388         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
12389         and called with one of the core types, return the corresponding typebuilder for
12390         that type.
12391
12392         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
12393         element type.
12394
12395 2002-06-21  Martin Baulig  <martin@gnome.org>
12396
12397         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
12398         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
12399         (Expression.ConvertReferenceExplicit): Likewise.
12400
12401         * expression.cs (ElementAccess.DoResolve): Likewise.
12402         (ElementAccess.DoResolveLValue): Likewise.
12403
12404 2002-06-10  Martin Baulig  <martin@gnome.org>
12405
12406         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
12407         add the "value" parameter to the parameter list.
12408
12409         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
12410         to our caller.
12411
12412 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
12413
12414         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
12415         the argument to an int, uint, long or ulong, per the spec.  Also
12416         catch negative constants in array creation.
12417
12418 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
12419
12420         * class.cs: do not allow the same interface to appear twice in
12421         the definition list.
12422
12423 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
12424
12425         * ecore.cs: don't use ldlen with System.Array.
12426
12427 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
12428
12429         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
12430
12431 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
12432
12433         * modifiers.cs: produce correct field attributes for protected
12434         internal. Easy fix so miguel can work on ther harder stuff:-)
12435
12436 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
12437
12438         * pending.cs: New file.  Move the code from class.cs here.
12439         Support clearning the pending flag for all methods (when not doing
12440         explicit interface implementation).
12441
12442 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
12443
12444         * rootcontext.cs: added a couple more types needed to bootstrap.
12445
12446 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
12447
12448         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
12449         constructor in the type, instead of any constructor in the type
12450         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
12451         a bug in the Mono runtime when applying the params attribute). 
12452
12453 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
12454         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
12455
12456 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
12457
12458         * expression.cs (Unary.ResolveOperator): Use TypeManager
12459         to resolve the type.
12460
12461 2002-06-13  Ravi Pratap  <ravi@ximian.com>
12462
12463         * cs-parser.jay (enum_member_declaration): Pass in the attributes
12464         attached.
12465
12466         * enum.cs (AddEnumMember): Add support to store the attributes associated 
12467         with each member too.
12468
12469         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
12470         field builders too - this takes care of the enum member case.
12471
12472 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
12473
12474         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
12475         address-of operator on both value types and pointers.
12476
12477 2002-06-10  Martin Baulig  <martin@gnome.org>
12478
12479         * interface.cs (Interface.PopulateIndexer): Add the indexer's
12480         PropertyBuilder to the `property_builders' list.
12481
12482         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
12483         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
12484         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
12485         find any indexers which are inherited from an interface.
12486
12487 2002-06-09  Martin Baulig  <martin@gnome.org>
12488
12489         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
12490         the same type as the constant if necessary.  There's also a test-130.cs
12491         for this.
12492
12493         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
12494
12495         * typemanager.cs (TypeManager.ChangeType): Previously known as
12496         Enum.ChangeEnumType().
12497
12498 2002-06-09  Martin Baulig  <martin@gnome.org>
12499
12500         * expression.cs (Cast.TryReduce): Added support for consts.
12501
12502 2002-06-08  Ravi Pratap  <ravi@ximian.com>
12503
12504         * class.cs (Accessor): Hold attributes information so we can pass
12505         it along.
12506
12507         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
12508         Modify to pass in attributes attached to the methods.
12509
12510         (add_accessor_declaration, remove_accessor_declaration): Ditto.
12511
12512         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
12513         to handle the Accessor kind :-)
12514
12515         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
12516
12517 2002-06-08  Martin Baulig  <martin@gnome.org>
12518
12519         * expression.cs (Unary.TryReduceNegative): Added support for
12520         ULongConstants.
12521
12522 2002-06-08  Martin Baulig  <martin@gnome.org>
12523
12524         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
12525         name can't be found in the `defined_names' - the caller will do a
12526         MemberLookup in this case and thus find methods in System.Enum
12527         such as Enum.IsDefined().
12528
12529 2002-06-08  Martin Baulig  <martin@gnome.org>
12530
12531         * enum.cs (Enum.ChangeEnumType): This is a custom version of
12532         Convert.ChangeType() which works with TypeBuilder created types.
12533         (Enum.LookupEnumValue, Enum.Define): Use it here.
12534
12535         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
12536         `TypeBuilder.BaseType != null' check.
12537         (TypeContainer.FindMembers): Only lookup parent members if we
12538         actually have a parent.
12539         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
12540         (ConstructorInitializer.Resolve): Likewise.
12541
12542         * interface.cs (Interface.FindMembers): Added
12543         `TypeBuilder.BaseType != null' check.
12544
12545         * rootcontext.cs (RootContext.ResolveCore): Added
12546         "System.Runtime.CompilerServices.IndexerNameAttribute" to
12547         classes_second_stage.
12548
12549         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
12550         debug_type and trace_type when compiling with --nostdlib.       
12551
12552 2002-06-07  Martin Baulig  <martin@gnome.org>
12553
12554         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
12555         (AddField): Set it to true when adding a non-static field.
12556         (DefineType): Use `have_nonstatic_fields' to find out whether we
12557         have non-static fields, not `Fields != null'.
12558
12559 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
12560
12561         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
12562         dereferencing a null on the static-field code path)
12563
12564 2002-05-30  Martin Baulig  <martin@gnome.org>
12565
12566         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
12567         to take command line arguments.  Use reflection to call the new
12568         custom `Initialize' function on the symbol writer and pass it the
12569         command line arguments.
12570
12571         * driver.cs (--debug-args): New command line argument to pass command
12572         line arguments to the symbol writer.
12573
12574 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
12575
12576         * assign.cs (DoResolve): Forgot to do the implicit conversion to
12577         the target type for indexers and properties.  Thanks to Joe for
12578         catching this.
12579
12580 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
12581
12582         * typemanager.cs (MethodFlags): returns the method flags
12583         (Obsolete/ShouldIgnore) that control warning emission and whether
12584         the invocation should be made, or ignored. 
12585
12586         * expression.cs (Invocation.Emit): Remove previous hack, we should
12587         not do this on matching a base type, we should do this based on an attribute
12588
12589         Only emit calls to System.Diagnostics.Debug and
12590         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
12591         on the command line.
12592
12593         * rootcontext.cs: Global settings for tracing and debugging.
12594
12595         * cs-tokenizer.cs (define): New utility function to track
12596         defines.   Set the global settings for TRACE and DEBUG if found.
12597
12598 2002-05-25  Ravi Pratap  <ravi@ximian.com>
12599
12600         * interface.cs (Populate*): Pass in the TypeContainer as well as
12601         the DeclSpace as parameters so that we can create EmitContexts and
12602         then use that to apply attributes etc.
12603
12604         (PopulateMethod, PopulateEvent, PopulateProperty)
12605         (PopulateIndexer): Apply attributes everywhere.
12606
12607         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
12608         etc.
12609
12610         (ApplyAttributes): Update accordingly.
12611
12612         We now apply interface attributes for all members too.
12613
12614 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
12615
12616         * class.cs (Indexer.Define); Correctly check if we are explicit
12617         implementation (instead of checking the Name for a ".", we
12618         directly look up if the InterfaceType was specified).
12619
12620         Delay the creation of the PropertyBuilder.
12621
12622         Only create the PropertyBuilder if we are not an explicit
12623         interface implementation.   This means that explicit interface
12624         implementation members do not participate in regular function
12625         lookups, and hence fixes another major ambiguity problem in
12626         overload resolution (that was the visible effect).
12627
12628         (DefineMethod): Return whether we are doing an interface
12629         implementation. 
12630
12631         * typemanager.cs: Temporary hack until we get attributes in
12632         interfaces (Ravi is working on that) and we get IndexerName
12633         support in interfaces.
12634
12635         * interface.cs: Register the indexers as properties.
12636
12637         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
12638         warning, I have verified that this is a bug in the .NET runtime
12639         (JavaScript suffers of the same problem).
12640
12641         * typemanager.cs (MemberLookup): When looking up members for
12642         interfaces, the parent of an interface is the implicit
12643         System.Object (so we succeed in searches of Object methods in an
12644         interface method invocation.  Example:  IEnumerable x;  x.ToString
12645         ()) 
12646
12647 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
12648
12649         * class.cs (Event): Events should also register if they do
12650         implement the methods that an interface requires.
12651
12652         * typemanager.cs (MemberLookup); use the new GetInterfaces
12653         method. 
12654
12655         (GetInterfaces): The code used to lookup interfaces for a type is
12656         used in more than one place, factor it here. 
12657
12658         * driver.cs: Track the errors at the bottom of the file, we kept
12659         on going.
12660
12661         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
12662         instance if the method we are calling is static!
12663
12664 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
12665
12666         * attribute.cs (ApplyAttributes): Make this function filter out
12667         the IndexerName attribute (as that attribute in reality is never
12668         applied) and return the string constant for the IndexerName
12669         attribute. 
12670
12671         * class.cs (TypeContainer.Emit): Validate that all the indexers
12672         have the same IndexerName attribute, and if so, set the
12673         DefaultName attribute on the class. 
12674
12675         * typemanager.cs: The return value might contain other stuff (not
12676         only methods).  For instance, consider a method with an "Item"
12677         property and an Item method.
12678
12679         * class.cs: If there is a problem with the parameter types,
12680         return. 
12681
12682 2002-05-24  Ravi Pratap  <ravi@ximian.com>
12683
12684         * ecore.cs (ImplicitConversionExists): Wrapper function which also
12685         looks at user defined conversion after making a call to 
12686         StandardConversionExists - we need this for overload resolution.
12687
12688         * expression.cs : Update accordingly the various method calls.
12689
12690         This fixes 2 bugs filed against implicit user defined conversions 
12691
12692 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
12693
12694         * statement.cs: Track the result of the assignment.
12695
12696 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
12697
12698         * expression.cs (MemberAccess): Improved error reporting for
12699         inaccessible members.
12700
12701 2002-05-22  Martin Baulig  <martin@gnome.org>
12702
12703         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
12704         itself with debugging support.
12705
12706 2002-05-22  Martin Baulig  <martin@gnome.org>
12707
12708         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
12709         Removed, this isn't needed anymore.
12710
12711 2002-05-20  Martin Baulig  <martin@gnome.org>
12712
12713         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
12714         be underlying type for an enum.
12715
12716 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
12717
12718         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
12719         that splits out the loading of just the core types.
12720
12721         * rootcontext.cs (ResolveCore): Split the struct resolution in
12722         two, so we can load the enumeration underlying types before any
12723         enums are used.
12724
12725         * expression.cs (Is): Bandaid until we fix properly Switch (see
12726         bug #24985 for details).
12727
12728         * typemanager.cs (ImplementsInterface): The hashtable will contain
12729         a null if there are no interfaces implemented.
12730
12731 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
12732
12733         * cs-parser.jay (indexer_declarator): It is fine to have array
12734         parameters
12735
12736 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
12737
12738         * typemanager.cs: (RegisterBuilder): New function used to register
12739         TypeBuilders that implement interfaces.  Since
12740         TypeBuilder.GetInterfaces (as usual) does not work with lame
12741         Reflection.Emit. 
12742         (AddUserType): register interfaces.
12743
12744         (ImplementsInterface): Use the builder_to_ifaces hash if we are
12745         dealing with TypeBuilder.  Also, arrays are showing up as
12746         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
12747         methods can not be invoked on them!
12748
12749         * ecore.cs (ExplicitReferenceConversionExists): Made public.
12750         (ImplicitReferenceConversionExists): Split out from
12751         StandardConversionExists. 
12752
12753         * expression.cs (As): We were only implementing one of the three
12754         cases for the as operator.  We now implement them all.
12755         (Is): Implement the various other cases for Is as well.
12756
12757         * typemanager.cs (CACHE): New define used to control if we want or
12758         not the FindMembers cache.  Seems to have a negative impact on
12759         performance currently
12760
12761         (MemberLookup): Nested types have full acess to
12762         enclosing type members
12763
12764         Remove code that coped with instance/static returns for events, we
12765         now catch this in RealFindMembers.
12766
12767         (RealFindMembers): only perform static lookup if the instance
12768         lookup did not return a type or an event.  
12769
12770 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
12771
12772         * assign.cs (CompoundAssign): We pass more semantic information
12773         now to Compound Assignments than we did before: now we have all
12774         the information at hand, and now we resolve the target *before* we
12775         do the expression expansion, which allows the "CacheValue" method
12776         to have the effect we intended (before, a [x] += 1 would generate
12777         two differen ArrayAccess expressions from the ElementAccess,
12778         during the resolution process).
12779
12780         (CompoundAssign.DoResolve): Resolve target and original_source here.
12781
12782 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
12783
12784         * expression.cs (ArrayAccess): dropped debugging information. 
12785
12786         * typemanager.cs: Small bug fix: I was always returning i_members,
12787         instead of one of i_members or s_members (depending on which had
12788         the content).
12789
12790         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
12791         method is invoked before any code generation takes place, and it
12792         is a mechanism to inform that the expression will be invoked more
12793         than once, and that the method should use temporary values to
12794         avoid having side effects
12795
12796         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
12797
12798         * ecore.cs (Expression.CacheTemporaries): Provide empty default
12799         implementation.
12800
12801         * expression.cs (Indirection, ArrayAccess): Add support for
12802         CacheTemporaries in these two bad boys. 
12803
12804         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
12805         ldobj or ldind_ref.  
12806         (StoreFromPtr): Handle stobj as well.
12807
12808         * expression.cs (UnaryMutator): Share more code.
12809
12810         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
12811         down: I was not tracking the Filter function as well, which
12812         was affecting the results of the cache.
12813
12814 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
12815
12816         * attribute.cs: Remove the hack to handle the CharSet property on
12817         StructLayouts. 
12818
12819 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
12820
12821         * attribute.cs (DoResolve): More uglyness, we now only try to
12822         resolve the attribute partially, to extract the CharSet
12823         information (only if we are a StructLayout attribute).  Otherwise 
12824
12825         (GetExtraTypeInfo): Add some code to conditionally kill in the
12826         future this.   I am more and more convinced that the .NET
12827         framework has special code to handle the attribute setting on
12828         certain elements.
12829
12830         * expression.cs (IsParamsMethodApplicable): Revert my previous
12831         foreach change here, it was wrong.
12832
12833 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
12834
12835         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
12836         (pp_expr): do not abort on unknown input, just return.
12837         (eval): abort if there are pending chars.
12838
12839         * attribute.cs (Attribute.Resolve): Positional parameters are
12840         optional.  Deal with that case.
12841
12842         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
12843         the Ansi/Unicode/Auto information for the type.
12844
12845         (TypeContainer.DefineType): instantiate the EmitContext here, as
12846         we will be using it during the type definition (to resolve
12847         attributes) and during the emit phase.
12848
12849         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
12850         to pull type information out of the attributes
12851
12852         (Attribute.Resolve): track the constructor builder, and allow for
12853         multiple invocations (structs and classes will use this).
12854
12855         * ecore.cs (MemberLookupFinal): new version with all the
12856         parameters customizable.
12857
12858         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
12859         constructors.  Return if the result value is null (as the error
12860         would have been flagged already by MemberLookupFinal)
12861
12862         Do not allow instances of abstract classes or interfaces to be
12863         created.
12864
12865         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
12866         We have to compare the assembly property here when dealing with
12867         FamANDAssem and Assembly access modifiers, because we might be
12868         creating an assembly from *modules* (that means that we are not
12869         getting TypeBuilders for types defined in other modules that are
12870         part of this assembly).
12871
12872         (Method.Emit): If the method is marked abstract and has a body,
12873         emit an error. 
12874
12875         (TypeContainer.DefineMembers): If both the defined member and the
12876         parent name match are methods, then do not emit any warnings: let
12877         the Method.Define routine take care of flagging warnings.  But if
12878         there is a mismatch (method overrides something else, or method is
12879         overriwritten by something, then emit warning).
12880
12881         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
12882         set to null, this means `do not check for the return type on the
12883         signature'. 
12884
12885         (Method.Define): set the return type for the method signature to
12886         null, so that we get methods with the same name and parameters and
12887         different return types.  This is used to flag warning 114 (you are
12888         hiding a method, and you probably want to use the new/override
12889         keywords instead).
12890
12891         * typemanager.cs (MemberLookup): Implemented proper access
12892         control, closing a long standing set of bug reports.  The problem
12893         was that the Framework only has two bits: Public and NonPublic,
12894         and NonPublic includes private and protected methods, but we need
12895         to enforce the FamANDAssem, FamOrAssem and Family. 
12896
12897 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
12898
12899         * statement.cs (GotoCase): Return true: Ammounts to giving up
12900         knowledge on whether we return or not, and letting the other case
12901         be responsible for it.
12902
12903 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
12904
12905         * driver.cs: Do not load directories for each file processed, only
12906         do it if there is a pattern.
12907
12908         * ecore.cs: Report readonly assigns here as well, as we might have
12909         been resolved only by MemberAccess.
12910
12911         (SimpleName.SimpleNameResolve): Also be useful for LValue
12912         resolution.   We need this to propagate assign to local readonly variables
12913
12914         * typemanager.cs: Use a ptrhashtable for the criteria, because we
12915         do not want to reuse potential criteria memory.
12916
12917         * class.cs (MyEventBuilder): Set reflected_type;
12918
12919         * ecore.cs (Constantify): Added support for constifying bools.
12920
12921         (RootContext.LookupType): Added a cache for values looked up in
12922         the declaration space.
12923
12924         * typemanager.cs (FindMembers): Now is a front-end to
12925         RealFindMembers, and provides a two-level hashtable-based cache to
12926         the request.  
12927
12928         15% performance improvement: from 22.5 to 19.2 seconds.
12929
12930         * expression.cs (IsParamsMethodApplicable): use foreach.
12931         (Invocation.DoResolve): ditto.
12932         (New.DoResolve): ditto.
12933         (ArrayCreation.DoResolve): ditto.
12934
12935         * ecore.cs (FindMostEncompassingType): use foreach.
12936
12937         * delegate.cs (NewDelegate.DoResolve): Use foreach
12938
12939         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
12940         (RemoveMethods): use foreach.
12941
12942         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
12943         nested foreach statements instead of for, and also break out of
12944         the inner loop once a match is found.
12945
12946         (Invocation.OverloadResolve): Use foreach, simplify the code. 
12947
12948 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
12949
12950         * cfold.cs (BinaryFold): During an enumeration evaluation context,
12951         we actually unwrap the expression to allow for extra information
12952         to be extracted. 
12953
12954         * expression.cs: Use Shr_Un on unsigned operations. 
12955
12956 2002-05-08  Ravi Pratap  <ravi@ximian.com>
12957
12958         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
12959         applicable operators was not being considered correctly. This closes
12960         the bug Miguel reported.
12961
12962 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
12963
12964         * attribute.cs: check that the type derives from System.Attribute
12965         and report the correct error in that case (moved the duplicate code to
12966         its own method, too).
12967
12968 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
12969
12970         * attribute.cs: lookup attribute type name as the spec says: first the
12971         bare attribute name and then name + "Attribute" (nant compiles with
12972         mcs after this fix).
12973
12974 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
12975
12976         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
12977         Because of the way we parse things, we should try to see if a
12978         UIntConstant can fit in an integer.
12979
12980 2002-05-07  Ravi Pratap  <ravi@ximian.com>
12981
12982         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
12983         when we are in an explicit context.
12984
12985         (ConvertReferenceExplicit): When converting from Iface type S to Class
12986         T make sure the rules are implemented as an OR.
12987
12988         * parameter.cs (ParameterType): Make it a property for now although the
12989         purpose really isn't anything immediate.
12990
12991         * expression.cs (Is*Applicable): Do better checking on the parameter type
12992         of a ref/out parameter. The ones from the system assemblies are already 
12993         marked with the correct type so we don't need to do any correction.
12994
12995         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
12996         the object type is standard too so include that.
12997
12998 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
12999
13000         * ecore.cs (StandardConversionExists): Augment with missing code:
13001         deal with IntConstant, LongConstants and Enumerations.
13002
13003         * assign.cs: Report the error, instead of failing silently
13004
13005         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
13006         typecontainer that they are declared, because the
13007         typecontainer/namespace will have the list of using clauses that
13008         need to be applied.
13009
13010         Assembly Attributes were escaping the normal registration
13011         mechanism. 
13012
13013         (EmitCode): Apply attributes within an EmitContext that represents
13014         the container they were declared on.
13015
13016         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
13017
13018 2002-05-06  Ravi Pratap  <ravi@ximian.com>
13019
13020         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
13021         Revamp completely - make much cleaner as we now operate only
13022         on a set of Types.
13023
13024         (FindMostSpecificSource, FindMostSpecificTarget): New methods
13025         to implement the logic detailed in the spec more correctly.
13026
13027         (UserDefinedConversion): Update accordingly.
13028
13029 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
13030
13031         * statement.cs: Return flow analysis information up.
13032
13033         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
13034         and the default.
13035
13036         (token): Do not consume an extra character before calling
13037         decimal_digits.
13038
13039 2002-05-06  Piers Haken <piersh@friskit.com>
13040
13041         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
13042
13043 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
13044
13045         * class.cs (Constructor.Emit): Set the IsStatic flag in the
13046         EmitContext during the instance constructor initializer
13047         resolution, to stop access to instance variables.
13048
13049         This is mandated by the spec, last paragraph of the `constructor
13050         initializers' section. 
13051
13052 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
13053
13054         * cs-parser.jay, class.cs (Accessor): new class used to represent
13055         an accessor (get or set).  In the past we used `null' to represent
13056         a missing accessor.  But this is ambiguous because there was no
13057         way to tell in abstract indexers/properties if one of them was
13058         specified.
13059
13060         Now there is a way of addressing that.
13061
13062         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
13063         instead of FindMembers.
13064
13065         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
13066         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
13067
13068         * attribute.cs: Treat indexers and properties as the same in terms
13069         of applying attributes
13070
13071         * ecore.cs (FindMostEncompassedType): Use statically initialized
13072         EmptyExpressions()s like we do elsewhere to avoid creating useless
13073         objects (and we take this out of the tight loop).
13074
13075         (GetConversionOperators): Move the code to extract the actual
13076         operators to a separate routine to clean things up.
13077
13078 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
13079
13080         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
13081         events are always registered FieldBuilders.
13082
13083         * class.cs (FieldBase): New class shared by Fields 
13084
13085         * delegate.cs: If we are a toplevel delegate, use our full name.
13086         If we are a nested delegate, then only use our tail name.
13087
13088 2002-05-02  Ravi Pratap  <ravi@ximian.com>
13089
13090         * expression.cs (IsApplicable): Ensure that we add the "&" to
13091         ref/out types before comparing it with the type of the argument.
13092
13093         (IsParamsMethodApplicable): Ditto.
13094
13095         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
13096         silly me ;-)
13097
13098         * delegate.cs : Handle the case when we have more than one applicable
13099         method. Flag an error only when we finish checking all.
13100
13101 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
13102
13103         * expression.cs: Add support for boolean static initializers.
13104
13105 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
13106
13107         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
13108
13109         * parameter.cs (ComputeParameterTypes,
13110         ComputeAndDefineParameterTypes): Better error handling: now we
13111         clear the `types' cache if we fail during any of the type lookups.
13112         We also return the status code correctly to our caller
13113
13114         * delegate.cs: If we fail to define a delegate, abort the extra
13115         steps. 
13116
13117         * expression.cs (Binary.ResolveOperator): for
13118         operator==(object,object) and operator !=(object, object) we also
13119         have to verify that there is an implicit conversion from one to
13120         the other.
13121
13122         (ArrayAccess.DoResolve): Array Access can operate on
13123         non-variables. 
13124
13125 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
13126
13127         * assign.cs (CompoundAssign): A new class used as a "flag" that
13128         the assignment actually is happening as part of a compound
13129         assignment operator.
13130
13131         During compound assignment, a few new rules exist to enable things
13132         like:
13133
13134         byte b |= 1 + 2
13135
13136         From the spec:
13137
13138         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
13139         to the type of x) if y is implicitly convertible to the type of x,
13140         and the operator is a builtin operator and the return type of the
13141         operator is explicitly convertible to the type of x. 
13142
13143         * rootcontext.cs: Reset warning level to 2.  4 catches various
13144         "interesting" features in mcs, we must clean this up at some
13145         point, but currently am trying to kill other bugs ;-)
13146
13147         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
13148         in container classes as well.  
13149
13150         * expression.cs (Binary.ResolveOperator): Handle string case
13151         before anything else (as operator overloading does emit an error
13152         before doing anything else).
13153
13154         This code could go away when we move to a table driven model, but
13155         i could not come up with a good plan last night.
13156
13157 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
13158
13159         * typemanager.cs (CSharpName): reimplementation using regex.
13160         * class.cs: added null check for fields in Emit
13161         * rootcontext.cs: set warninglevel to 4
13162
13163 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
13164
13165         * typemanager.cs (CSharpName): reimplemented with Lupus
13166         suggestion.
13167
13168 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
13169
13170         * statement.cs (If): correclty implement Resolve, because we were
13171         not catching sem errors in there.  The same process is needed
13172         everywhere else. 
13173         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
13174
13175
13176         (Statement.Warning_DeadCodeFound): Factorize code.
13177         (While): Report dead code here too.
13178
13179         (Statement): Added Resolve virtual method to allow
13180         for resolution split from the emit code.
13181
13182 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
13183
13184         * statement.cs (EmitBoolExpression): No longer try to resolve the
13185         expression here.    
13186         (MakeBoolean): New utility function that resolve, implicitly
13187         converts to boolean and tags the expression. 
13188
13189
13190         (If, Do): Implement dead code elimination.
13191         (While): Implement loop inversion
13192
13193         (Do, While, For, If): Resolve the expression prior to calling our
13194         code generation.
13195
13196 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
13197
13198         * class.cs:
13199           - added method Report28 (warning: program has more than one entry point)
13200           - added method IsEntryPoint, implements paragraph 10.1 of the spec
13201           - modified method Method.Define, the part at the end of the method
13202
13203         * rootcontext.cs: added static public Location EntryPointLocation;
13204           
13205         * ../errors/cs0028.cs : Add test case for the above warning.              
13206
13207         * typemanager.cs:
13208           - modified method CSharpName to allow arrays of primitive type to
13209             be printed nicely (e.g. instead of System.Int32[][] it now prints
13210             int[][])
13211           - added method CSharpSignature: returns the signature of a method
13212             in string format to be used in reporting errors, warnings, etc.
13213
13214         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
13215         with String.Empty.
13216
13217 2002-04-26  Ravi Pratap  <ravi@ximian.com>
13218
13219         * delegate.cs (Define): Fix extremely silly bug where I was
13220         setting the type of the 'object' parameter of the BeginInvoke
13221         method to System.IAsyncResult instead of System.Object ;-)
13222
13223 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
13224
13225         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
13226         here. 
13227
13228         (Constructor.Emit): return if we fail to initialize the
13229         constructor.  Another door closed!  
13230
13231         * expression.cs (New.DoResolve): Improve error message (from -6 to
13232         1501).  Use DeclaredOnly lookup to find the exact constructor.
13233
13234         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
13235         loop.  This is useful.
13236
13237         * cs-parser.jay: Adjust the default parameters so that destructors
13238         have the proper signature.
13239
13240 2002-04-26  Martin Baulig  <martin@gnome.org>
13241
13242         * driver.cs (LoadAssembly): If `assembly' contains any characters
13243         which are only valid in path names and not in assembly names
13244         (currently slash, backslash and point), use Assembly.LoadFrom ()
13245         instead of Assembly.Load () on the `assembly' (before iteration
13246         over the link_paths).
13247
13248 2002-04-26  Martin Baulig  <martin@gnome.org>
13249
13250         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
13251
13252 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
13253
13254         * class.cs (Property): use the new typemanager.MemberLookup
13255
13256         (TypeContainer.MemberLookup): Implement using the
13257         TypeManager.MemberLookup now. 
13258
13259         * typemanager.cs: Make MemberLookup a function of the TypeManager,
13260         and return MemberInfos, so that these can be used without an
13261         EmitContext (what we had before).
13262
13263 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
13264
13265         * expression.cs: Fix the case where the argument to params if the
13266         type of the params.  I omitted handling this before.   Fixed
13267
13268 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
13269
13270         * driver.cs: Call BootCorlib_PopulateCoreType
13271
13272         * class.cs (Property.CheckBase): Check for properties only, not
13273         for all members. 
13274
13275         * interface.cs: Temporary hack: try/catch around the
13276         CustomAttributeBuilder, because I am getting an exception that I
13277         do not understand.
13278
13279         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
13280         types whose definitions are required to be there (attributes are
13281         defined before standard types).
13282
13283         Compute definitions as we boot the various types, as they are used
13284         immediately (value_type class will need object_type, but if we do
13285         not initialize object_type, we will pass a null, which will let
13286         the runtime pick the System.Object from the existing corlib, which
13287         is not what we want).
13288
13289 2002-04-22  Patrik Torstensson <totte@labs2.com>
13290
13291         * cs-tokenizer.cs: fixed a number of trim() issues.
13292
13293 2002-04-22  Ravi Pratap  <ravi@ximian.com>
13294
13295         * expression.cs (Argument.Type): Ensure that we return the correct
13296         type when we have out or ref parameters [in which case we 
13297         append a "&"].
13298
13299 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
13300
13301         * class.cs (Property, Indexer): Allow extern modifier in there. 
13302
13303         * typemanager.cs (InitBaseTypes): Initializes object_type and
13304         value_type, since those will be used early on during the bootstrap
13305         process to compile corlib.
13306
13307         (InitCoreTypes): Move code from here to InitBaseTypes.
13308
13309 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
13310
13311         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
13312         single-dimension arrays as using the ldlen opcode.  
13313
13314         Daniel Lewis discovered this optimization.  
13315
13316         * typemanager.cs: Add signature for System.Array::get_Length
13317
13318 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13319
13320         * statement.cs: report the error when the foreach does not apply to an
13321         array nor a collection.
13322
13323 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
13324
13325         * expression.cs: Add implicit conversions to the operator ~.
13326
13327         * constant.cs (DecimalConstant.Emit): Emit decimal value.
13328
13329         * typemanager.cs: Locate the decimal constructor.
13330
13331 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13332
13333         * attribute.cs: use the new property of TypeOf.
13334         * expression.cs: added 'get' property around typearg.
13335
13336         These changes fix a build breaker reported by NickD. Is this the
13337         correct way to fix?  If not, please, revert my changes and make it
13338         work :-).
13339
13340 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
13341
13342         * attribute.cs: Add support for typeof in attribute invocations.
13343         I am not sure that this is right though.
13344
13345 2002-04-14  Duncan Mak  <duncan@ximian.com>
13346
13347         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
13348         Binary.Operator.Division case.
13349
13350 2002-04-13  Ravi Pratap  <ravi@ximian.com>
13351
13352         * class.cs (DefineType): Ensure that we do a proper check on
13353         attribute types and also register it with the TypeManager.
13354
13355         (TypeContainer.Targets): The default for attribute types is
13356         AttributeTargets.All.
13357
13358         * attribute.cs (ApplyAttributes): Registering the attribute type
13359         is done elsewhere, not when we discover we have a Usage attribute.
13360
13361 2002-04-12  Ravi Pratap  <ravi@ximian.com>
13362
13363         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
13364         and get rid of is_delegate parameter.
13365
13366         * everywhere : update.
13367
13368 2002-04-12  Ravi Pratap  <ravi@ximian.com>
13369
13370         * cs-parser.jay (compilation_unit): Revamp completely to use
13371         some new ideas that I got from Rhys' grammar to solve the problems
13372         with assembly level attributes.
13373
13374         (outer_declaration): New grammar production.
13375
13376         (attribute_sections): Add.
13377
13378         (opt_attributes): Base on attribute_sections
13379
13380         (namespace_declaration): Allow opt_attributes to tackle the case
13381         when we have assembly level attributes - we are clever in this
13382         regard now ;-)
13383
13384         * attribute.cs (ApplyAttributes): Do not worry about assembly 
13385         attributes in the non-global context.
13386
13387         * rootcontext.cs (AddGlobalAttributes): Go back to using this
13388         instead of SetGlobalAttributes.
13389
13390         * class.cs, rootcontext.cs : Ensure we define and generate 
13391         attribute types before anything else.
13392
13393         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
13394         and flag the new error -20 for the case when the attribute type
13395         does not have valid targets specified. csc does not catch this.
13396
13397         * ../errors/errors.txt : update for error # -20
13398
13399 2002-04-11  Ravi Pratap  <ravi@ximian.com>
13400
13401         * support.cs (InternalParameters.ParameterModifier): Do some null
13402         checking and return sane values.
13403
13404         * class.cs (Method.Define): If we are a PInvoke method, ensure
13405         that we are static and extern. Report error # 601
13406
13407         * ../errors/cs0601.cs : Add test case for the above error.
13408
13409 2002-04-07  Ravi Pratap  <ravi@ximian.com>
13410
13411         * rootcontext.cs (attribute_types): We need to keep type of
13412         all attribute types separately and emit code for them first.
13413
13414         (RegisterAttribute) : Implement.
13415
13416         * class.cs (DefineType): Check if the current Type is a custom
13417         attribute type and register it accordingly.
13418
13419         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
13420         adding the first attribute twice and rename to
13421
13422         (SetGlobalAttributes): this.
13423
13424         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
13425         lookups.
13426
13427         * attribute.cs (ApplyAttributes): Take an additional argument telling us
13428         if we are processing global arguments. Hmm, I am unsure of this.
13429
13430 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13431
13432         * expression.cs: added static array of strings to avoid calling
13433         Enum.ToString () for Operator in Binary. Significant recover of
13434         performance.
13435
13436 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
13437
13438         * class.cs (FindMembers): Allow the Builders of the various
13439         members to be null.  If they are skip them.  This only happens
13440         during the PInvoke declaration.
13441
13442 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
13443
13444         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
13445         failure, so we do not keep going afterwards.
13446
13447         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
13448         wanted to pass `false' as the `is_delegate' argument.  If this is
13449         the case, why not use delegate_type == null to mean `is_delegate =
13450         false' and anything else as is_delegate = true.
13451
13452 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
13453
13454         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
13455         code for the section, not the beginning of the tests.
13456
13457 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
13458
13459         * cfold.cs: Handle operator + (Enum x, Underlying x) 
13460
13461         * expression.cs (Binary): same.  Warn about errors where we have
13462         Enum/Enum in operator + as well.
13463
13464 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
13465
13466         * statement.cs:
13467                 - added support for switch(bool)
13468                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
13469                 - add TableSwitchEmit() to handle table-based switch statements
13470
13471 2002-04-05  Ravi Pratap  <ravi@ximian.com>
13472
13473         * expression.cs (Invocation.OverloadResolve): Factor out code which
13474         does parameter compatibility checking with arguments so that we can 
13475         re-use the code even from Delegate.VerifyApplicability
13476
13477         (VerifyArgumentsCompat): Move above code here.
13478
13479         * delegate.cs (VerifyApplicability): Get rid of duplicate code
13480         and instead make a call to the above method.
13481
13482 2002-03-31  Ravi Pratap  <ravi@ximian.com>
13483
13484         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
13485         We use it to keep track of classes which are attribute types.
13486
13487 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
13488
13489         * delegate.cs (Delegate.Define): Correctly define the types in the
13490         presence of fixed and array parameters.
13491
13492         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
13493         doing FindMembers.
13494
13495         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
13496         include NonPublic after the first iteration.
13497
13498         * class.cs (Indexer.CheckBase): Only check if both parents are
13499         non-null. 
13500
13501         * cs-parser.jay (accessor_body): If empty, set to null.
13502
13503         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
13504         same code path here to resolve constants names that we did have in
13505         MemberAccess.DoResolve.  There is too much code duplicated here.
13506
13507 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
13508
13509         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
13510
13511         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
13512         to MakeUnionSet.
13513
13514         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
13515         tokens, numbers and strings.
13516
13517         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
13518         parenthesis.
13519
13520         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
13521         asyncronous parameters and the regular parameters.  
13522
13523         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
13524         specify the target directory.
13525
13526         * expression.cs: (This.DoResolve): Simplify
13527         (As.Emit): Optimize, do not generate IsInst if the expression is
13528         always of the given type.
13529
13530         (Is.DoResolve): Bug fix, we were reporting both always/never for
13531         the is expression.
13532
13533         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
13534         creating too many unnecessary arrays.
13535
13536 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
13537
13538         * class.cs (EmitFieldInitializer): Use Assign expression to assign
13539         fields instead of rolling our own initializer.   Takes care of all
13540         implicit conversions, and drops unnecessary static checks/argument.
13541
13542 2002-03-31  Dick Porter  <dick@ximian.com>
13543
13544         * driver.cs: use the GetDirectories() return values properly, and
13545         use "/" as path separator.
13546
13547 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
13548
13549         * expression.cs (Unary): Optimize - - expr into expr.
13550         (Binary): Optimize a + (-b) into a -b.
13551
13552         * codegen.cs (CodeGen): Made all methods static.
13553
13554 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
13555
13556         * rootcontext.cs: 
13557
13558         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
13559         TypeBuilder property.
13560
13561         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
13562         instead. 
13563
13564         * tree.cs: Removed the various RecordXXXX, and replaced with a
13565         single RecordDecl.  Removed all the accessor methods, and just
13566         left a single access point Type 
13567
13568         * enum.cs: Rename DefineEnum to DefineType.
13569
13570         * decl.cs: New abstract method `DefineType' used to unify the
13571         Defines for Enumerations, Interfaces, TypeContainers and
13572         Delegates.
13573
13574         (FindType): Moved LookupInterfaceOrClass here.  Moved the
13575         LookupBaseClasses method that used to live in class.cs and
13576         interface.cs here, and renamed to FindType.
13577
13578         * delegate.cs: Implement DefineType.  Take advantage of the
13579         refactored pattern for locating the parent builder without taking
13580         the parent_builder argument (which we know does not work if we are
13581         nested, and triggering a toplevel definition).
13582
13583 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
13584
13585         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
13586         accessibility of a member has changed during override and report
13587         an error if so.
13588
13589         * class.cs (Method.Define, Property.Define): Only complain on
13590         overrides if the method is private, any other accessibility is
13591         fine (and since we just checked the permission is the same, we are
13592         good to go).
13593
13594         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
13595         and elif are processed always.  The other pre-processing
13596         directives are only processed if we are "taking" the path
13597
13598 2002-03-29  Martin Baulig  <martin@gnome.org>
13599
13600         * class.cs (Method.Emit): Only emit symbolic debugging info if the
13601         current location is not Null.
13602
13603         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
13604         a separate method so we can profile it.
13605
13606         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
13607         `span.Seconds' are just seconds, but no minutes or hours.
13608         (MainDriver): Profile the CodeGen.SaveSymbols calls.
13609
13610 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
13611
13612         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
13613         Remove the gratuitous set of Final:
13614
13615                                 // If an interface implementation, then we can set Final.
13616                                 if (((flags & MethodAttributes.Abstract) == 0) &&
13617                                     implementing.DeclaringType.IsInterface)
13618                                         flags |= MethodAttributes.Final;
13619
13620         I do not know what I was smoking when I used that.
13621
13622
13623         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
13624         step into fixing the name resolution issues for delegates and
13625         unifying the toplevel name resolution.
13626
13627 2002-03-28  Martin Baulig  <martin@gnome.org>
13628
13629         * class.cs (Method.Emit): If we have a symbol writer, call its
13630         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
13631         tell it about the current method.
13632
13633         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
13634         writer that we're going to emit the first byte of IL code for a new
13635         statement (a new source line).
13636         (EmitContext.EmitTopBlock): If we have a symbol writer, call
13637         EmitContext.Mark() before emitting any code.
13638
13639         * location.cs (SymbolDocument): Return null when we're Null.
13640
13641         * statement.cs (Statement): Moved the `Location loc' variable here.
13642         (Statement.EmitBoolExpression): If we have a symbol writer, call
13643         ec.Mark() before emitting any code to tell it that we're at the
13644         beginning of a new statement.
13645         (StatementExpression): Added `Location' argument to the constructor.
13646         (Block): Added public readonly variable `StartLocation' and public
13647         variable `EndLocation'.  The latter is to be set using SetEndLocation().
13648         (Block): Added constructor which takes a start and end location.
13649         (Block.SetEndLocation): New method. This sets the end location.
13650         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
13651         local variables we create.
13652         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
13653         each statement and do also mark the begin and end of the block.
13654
13655         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
13656         tell it the current lexer.Location, use Location.Null for the end of the
13657         block.
13658         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
13659         current block, set its end location using SetEndLocation().
13660         (statement_expression): StatementExpression constructor now takes the
13661         lexer.Location as additional argument.
13662         (for_statement, declare_local_variables): Likewise.
13663         (declare_local_variables): When creating a new implicit block, use the
13664         new Block constructor and pass it the lexer.Location.
13665
13666 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
13667
13668         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
13669         members also on the parent interfaces recursively.
13670
13671 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
13672
13673         * report.cs: Use new formats, since Gonzalo finished the missing
13674         bits. 
13675
13676         * expression.cs (Binary.ResolveOperator): added missing operator|
13677         operator& and operator^ for bool/bool.
13678
13679         * cs-parser.jay: CheckDef now takes a Location argument that is
13680         used to report errors more precisly (instead of reporting the end
13681         of a definition, we try to track something which is a lot closer
13682         to the source of the problem).
13683
13684         * cs-tokenizer.cs: Track global token use, so we can properly flag
13685         the use of #define/#undef after the first token has been seen.
13686
13687         Also, rename the reportXXXX to Error_DescriptiveName
13688
13689         * decl.cs (DeclSpace.IsTopLevel): Move property here from
13690         TypeContainer, so that Enum and Interface can use this too.
13691
13692         * class.cs (TypeContainer.LookupInterfaceOrClass,
13693         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
13694         `builder' argument.  Typically this was used to pass the parent
13695         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
13696         the definition).  
13697
13698         The problem is that a nested class could trigger the definition of
13699         a toplevel class, and the builder would be obviously wrong in that
13700         case. 
13701
13702         So we drop this argument, and we compute dynamically the
13703         TypeBuilder/ModuleBuilder (the correct information was available
13704         to us anyways from DeclSpace.Parent)
13705
13706         * interface.cs (Interface.DefineInterface): Drop builder
13707         parameter cleanup like class.cs
13708
13709         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
13710         like class.cs
13711
13712         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
13713         values. 
13714
13715         (Try.Emit): Propagate the returns value from the statement.
13716
13717         (Return.Emit): Even if we are leavning 
13718
13719         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
13720
13721         * modifiers.cs: Fix the computation of MethodAttributes flags.
13722
13723 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
13724
13725         * driver.cs: allow compilation of files that start with '/'.
13726         Add a default case when checking the argument of --target.
13727
13728 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
13729
13730         * interface.cs: Implement the same search algorithm for types in
13731         the interface code.
13732
13733         * delegate.cs: Do not allow multiple definition.
13734
13735         * Recovered ChangeLog that got accidentally amputated
13736
13737         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
13738
13739         * rootcontext.cs: Load manually enum to allow core classes to
13740         contain enumerations.
13741
13742         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
13743         Update to new static methods in TypeManager.
13744
13745         * typemanager.cs (GetMethod, GetConstructor): Use our
13746         implementation of FindMembers to find the members, since during
13747         corlib compilation, the types are TypeBuilders and GetMethod and
13748         GetConstructor do not work.
13749
13750         Make all methods in TypeManager static.
13751
13752         (InitCodeHelpers): Split the functionality from
13753         the InitCodeTypes function.
13754
13755         * driver.cs: Call InitCodeHelpers after we have populated the
13756         types. 
13757
13758         * cs-parser.jay (delegate_declaration): we did not used to compute
13759         the delegate name correctly for void delegates.
13760
13761 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
13762
13763         * rootcontext.cs (RootContext): Init the interface_resolve_order
13764         and type_container_resolve_order always.
13765
13766         (ResolveCore, BootstrapCorlib_ResolveClass,
13767         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
13768         compiler when compiling with --nostdlib
13769
13770         * class.cs (TypeContainer.DefineType): Check that our parent is
13771         not null.  This test is most important when we are bootstraping
13772         the core types.
13773
13774         * codegen.cs: Split out the symbol writing code.
13775
13776 2002-03-25  Martin Baulig  <martin@gnome.org>
13777
13778         * driver.cs (-g): Made -g an alias for --debug.
13779
13780 2002-03-24  Martin Baulig  <martin@gnome.org>
13781
13782         * codegen.cs (SymbolWriter): New public variable. Returns the
13783         current symbol writer.
13784         (CodeGen): Added `bool want_debugging_support' argument to the
13785          constructor. If true, tell the ModuleBuild that we want debugging
13786         support and ask it for the ISymbolWriter.
13787         (Save): If we have a symbol writer, call it's Close() method after
13788         saving the assembly.
13789
13790         * driver.c (--debug): New command line argument to create a
13791         debugger information file.
13792
13793         * location.cs (SymbolDocument): New public property. Returns an
13794         ISymbolDocumentWriter object for the current source file or null
13795         if we don't have a symbol writer.
13796
13797 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
13798
13799         * driver.cs (LoadAssembly): Correctly return when all the paths
13800         have been tried and not before.
13801
13802         * statement.cs (Switch.Emit): return the actual coverage for this
13803         statement (returns/not-returns)
13804
13805         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
13806         switch of the statement if we are the last switch section.  That
13807         kills two problems: try/catch problems (we used to emit an empty
13808         nop at the end) and switch statements where all branches would
13809         return. 
13810
13811 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
13812
13813         * driver.cs: Add default assemblies (the equivalent to the
13814         Microsoft CSC.RSP file)
13815
13816         * cs-tokenizer.cs: When updating `cols and setting it to zero,
13817         also update tokens_seen and set it to false.
13818
13819         * driver.cs: Implement --recurse for Mike.
13820
13821         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
13822         correctly splitting out the paths.
13823
13824 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
13825
13826         * interface.cs (Interface.PopulateProperty): Instead of using
13827         `parent' as the declaration space for the set parameters, use
13828         `this' 
13829
13830         * support.cs (InternalParameters): InternalParameters constructor
13831         takes a DeclSpace instead of a TypeContainer.
13832
13833         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
13834         types are being initialized, load the address of it before calling
13835         the function.  
13836
13837         (New): Provide a mechanism to disable the generation of local
13838         value type temporaries when the caller will be providing us with
13839         an address to store it.
13840
13841         (ArrayCreation.EmitDynamicInitializers): Use it.
13842
13843 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
13844
13845         * expression.cs (Invocation.EmitArguments): Only probe for array
13846         property if there is more than one argument.  Sorry about that.
13847
13848         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
13849         empty param arrays.
13850
13851         * class.cs (Method.LabelParameters): Fix incorrect code path that
13852         prevented the `ParamArrayAttribute' from being applied to the
13853         params attribute.
13854
13855 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
13856
13857         * support.cs (ReflectionParameters): Correctly compute whether the
13858         last argument is a params array.  Fixes the problem with
13859         string.Split ('a')
13860
13861         * typemanager.cs: Make the assemblies array always be non-null
13862         (empty, but non-null)
13863
13864         * tree.cs (RecordDecl): New function that abstracts the recording
13865         of names.  This reports error 101, and provides a pointer to the
13866         previous declaration.  Fixes a crash in the compiler.
13867
13868         * cs-parser.jay (constructor_declaration): Update to new grammar,
13869         and provide a constructor_body that can be empty.
13870
13871 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
13872
13873         * driver.cs: Add support for --resources.
13874
13875         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
13876         Make all types for the various array helper methods be integer.
13877
13878         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
13879         CheckState to ConvCast.
13880
13881         (ConvCast): Now it takes a `checked' state argument, to avoid
13882         depending on the emit context for the conversion, and just using
13883         the resolve time setting.
13884
13885         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
13886         instead of Invocation.EmitArguments.  We do not emit the original
13887         arguments, instead we emit those which have been converted to
13888         unsigned int expressions.
13889
13890         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
13891
13892         * codegen.cs: ditto.
13893
13894         * expression.cs (LocalVariableReference): Drop the use of the
13895         Store function that depended on the variable index.
13896
13897         * statement.cs (VariableInfo): Drop the `Idx' property from this
13898         class, as this is not taking into account the indexes for
13899         temporaries tat we generate during the execution, getting the
13900         indexes wrong.
13901
13902         * class.cs: First emit class initializers, then call the parent
13903         constructor. 
13904
13905         * expression.cs (Binary): Fix opcode emision.
13906         (UnaryMutator.EmitCode): Support checked code generation
13907
13908         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
13909         matches for events for both the Static and Instance scans,
13910         pointing to the same element.   Fix that.
13911
13912 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
13913
13914         * rootcontext.cs (ResolveTree): Always set the
13915         interface_resolve_order, because nested interfaces will be calling
13916         into us.
13917
13918         * class.cs (GetInterfaceOrClass): Track the same resolution
13919         process used by TypeManager.LookupType.  This fixes the nested
13920         type lookups in class declarations (separate path from
13921         LookupType). 
13922
13923         (TypeContainer.DefineType): Also define nested interfaces.
13924         (TypeContainer.RegisterOrder): New public function used to
13925         register the order in which child interfaces need to be closed.
13926
13927         Nested interfaces need to be closed after their parents have been
13928         created. 
13929
13930         * interface.cs (InterfaceAttr): Put all the logic for computing
13931         the interface attribute here. 
13932
13933         (DefineInterface): Register our interface order with the
13934         RootContext or with the TypeContainer depending on the case.
13935
13936 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
13937
13938         * cs-parser.jay: rework foreach statement to work with the new
13939         changes to the policy on SimpleNames.
13940
13941         * report.cs: support Stacktrace on warnings as well.
13942
13943         * makefile: drop --unsafe and /unsafe from the compile.
13944
13945 2002-03-13  Ravi Pratap  <ravi@ximian.com>
13946
13947         * ecore.cs (StandardConversionExists): Modify to take an Expression
13948         as the first parameter. Ensure we do null -> reference type conversion
13949         checking.
13950
13951         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
13952         temporary Expression objects.
13953
13954 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
13955
13956         * interface.cs: workaround bug in method overloading resolution
13957         (there is already a bugzilla bug for it).
13958
13959 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
13960
13961         We could also solve this problem by having a separate path for
13962         performing type lookups, instead of DoResolve, we could have a
13963         ResolveType entry point, and only participating pieces of the
13964         production (simplename, deref, array) would implement this. 
13965
13966         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
13967         signal SimpleName to only resolve type names and not attempt to
13968         resolve anything else.
13969
13970         * expression.cs (Cast): Set the flag.
13971
13972         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
13973
13974         * class.cs: Only report 108 if there is no `new' modifier.
13975
13976         * cs-parser.jay: rework foreach statement to work with the new
13977         changes to the policy on SimpleNames.
13978         
13979         * report.cs: support Stacktrace on warnings as well.
13980
13981         * makefile: drop --unsafe and /unsafe from the compile.
13982
13983 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
13984
13985         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
13986         lookups here, instead of doing that at parse time.  This means
13987         that our grammar will not introduce `LocalVariableReferences' as
13988         expressions at this point.  That solves the problem of code like
13989         this:
13990
13991         class X {
13992            static void Main ()
13993            { int X = 1;
13994             { X x = null }}}
13995
13996         This is only half the fix.  The full fix requires parameters to
13997         also be handled in this way.
13998
13999         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
14000         makes the use more obvious of the DeclSpace.  The
14001         ec.TypeContainer.TypeBuilder is now only used to pull the
14002         TypeBuilder for it.
14003
14004         My theory is that I can get rid of the TypeBuilder completely from
14005         the EmitContext, and have typecasts where it is used (from
14006         DeclSpace to where it matters).  
14007
14008         The only pending problem is that the code that implements Aliases
14009         is on TypeContainer, and probably should go in DeclSpace.
14010
14011         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
14012         lookups here, instead of doing that at parse time.  This means
14013         that our grammar will not introduce `LocalVariableReferences' as
14014         expressions at this point.  That solves the problem of code like
14015         this:
14016
14017         class X {
14018            static void Main ()
14019            { int X = 1;
14020             { X x = null }}}
14021
14022         This is only half the fix.  The full fix requires parameters to
14023         also be handled in this way.
14024
14025         * class.cs (Property.DefineMethod): When implementing an interface
14026         method, set newslot, when implementing an abstract method, do not
14027         set the flag (before we tried never setting it, or always setting
14028         it, which is the difference).
14029         (Indexer.DefineMethod): same.
14030         (Method.DefineMethod): same.
14031
14032         * ecore.cs: Only set the status used flag if we get back a Field.
14033
14034         * attribute.cs: Temporary hack, so Paolo can keep working.
14035
14036 2002-03-08  Ravi Pratap  <ravi@ximian.com>
14037
14038         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
14039         the unmanaged type in the case we have a MarshalAs attribute.
14040
14041         (Resolve): Handle the case when we are parsing the special MarshalAs
14042         attribute [we need to store the unmanaged type to use later]
14043
14044         * typemanager.cs (marshal_as_attr_type): Built in type for the 
14045         MarshalAs Attribute.
14046
14047         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
14048         on parameters and accordingly set the marshalling info.
14049
14050 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
14051
14052         * class.cs: Optimizing slightly by removing redundant code after
14053         we switched to the `NoTypes' return value.
14054         (Property.DefineMethod): use NoTypes here too.
14055
14056         This fixes the bug I introduced in my last batch of changes.
14057
14058 2002-03-05  Ravi Pratap  <ravi@ximian.com>
14059
14060         * tree.cs (RecordEnum): Add. We now keep track of enums too.
14061
14062         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
14063         Enums since those are types too. 
14064
14065         * cs-parser.jay (enum_declaration): Record enums as we parse them.
14066
14067         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
14068         thanks to a call during the lookup process.
14069
14070 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
14071
14072         * statement.cs (Foreach): Lots of work to accomodate a particular
14073         kind of foreach statement that I had not kept in mind.  It is
14074         possible to have foreachs on classes that provide a GetEnumerator
14075         method that return objects that implement the "pattern" for using
14076         a foreach, there is no need to support GetEnumerator
14077         specifically. 
14078
14079         This is needed to compile nant.
14080
14081         * decl.cs: Only report 114 if the member is not `Finalize' and if
14082         the warning level is at least 2.
14083
14084         * class.cs: Moved the compare function from Method to
14085         MethodSignature. 
14086
14087         (MethodSignature.InheritableMemberSignatureCompare): Add new
14088         filter function that is used to extract inheritable methods from a
14089         class. 
14090
14091         (Method.Define): Use the new `inheritable_method_signature_filter'
14092         delegate
14093
14094         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
14095         command. 
14096
14097 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
14098
14099         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
14100
14101         * cs-parser.jay: Add opt_semicolon to the interface declaration.
14102
14103         * expression.cs: Pass location information to
14104         ConvertImplicitStandard. 
14105
14106         * class.cs: Added debugging code to track return values from
14107         interfaces. 
14108
14109 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
14110
14111         * expression.cs (Is.DoResolve): If either side of the `is' is an
14112         interface, do not flag the warning.
14113
14114         * ecore.cs (ImplicitReferenceConversion): We need a separate test
14115         for interfaces
14116
14117         * report.cs: Allow for --fatal to be used with --probe.
14118
14119         * typemanager.cs (NoTypes): Move the definition for the empty Type
14120         array here. 
14121
14122         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
14123         properties. 
14124         (TypeContainer.DefineProxy): New function used to proxy to parent
14125         implementations when implementing interfaces.
14126         (TypeContainer.ParentImplements): used to lookup if our parent
14127         implements a public function that is required by an interface.
14128         (TypeContainer.VerifyPendingMethods): Hook this up.
14129
14130         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
14131         `modules' and `assemblies' arraylists into arrays.  We only grow
14132         these are the very early start up of the program, so this improves
14133         the speedof LookupType (nicely measured).
14134
14135         * expression.cs (MakeByteBlob): Replaced unsafe code with
14136         BitConverter, as suggested by Paolo.
14137
14138         * cfold.cs (ConstantFold.Binary): Special case: perform constant
14139         folding of string concatenation, but if either side is a string,
14140         and the other is not, then return null, and let the runtime use
14141         the concatenation on the string plus the object (using
14142         `Object.ToString'). 
14143
14144 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
14145
14146         Constant Folding has been implemented now.
14147
14148         * expression.cs (Unary.Reduce): Do not throw an exception, catch
14149         the error instead on types that are not supported in one's
14150         complement. 
14151
14152         * constant.cs (Constant and all children): New set of functions to
14153         perform implict and explicit conversions.
14154
14155         * ecore.cs (EnumConstant): Implement the new functions to perform
14156         conversion by proxying to the child expression.
14157
14158         * codegen.cs: (ConstantCheckState): Constant evaluation has its
14159         own separate setting that can not be turned off from the command
14160         line using --unchecked or --checked and is only controlled using
14161         the checked/unchecked statements and expressions.  This setting is
14162         used by the constant folder to flag errors.
14163
14164         * expression.cs (CheckedExpr, UncheckedExpr): Set the
14165         ConstantCheckState as well.   
14166
14167         During Resolve, they also have to flag the state, because the
14168         constant folder runs completely in the Resolve phase.
14169
14170         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
14171         well.
14172
14173 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
14174
14175         * cfold.cs: New file, this file contains the constant folder.
14176
14177         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
14178         argument to track whether we are using the resulting address to
14179         load or store a value and provide better error messages. 
14180
14181         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
14182         new AddressOf arguments.
14183
14184         * statement.cs (Foreach.EmitCollectionForeach): Update
14185
14186         * expression.cs (Argument.Emit): Call AddressOf with proper
14187         arguments to track usage.
14188
14189         (New.DoEmit): Call AddressOf with new arguments.
14190
14191         (Unary.Emit): Adjust AddressOf call.
14192
14193 2002-03-01  Ravi Pratap  <ravi@ximian.com>
14194
14195         * cs-parser.jay (member_access): Change the case for pre-defined types
14196         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
14197         this suggestion.
14198
14199         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
14200         a method body.
14201
14202         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
14203         essentially like methods and apply attributes like MethodImplOptions to them too.
14204
14205         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
14206         not being null.
14207
14208         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
14209         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
14210         is the DeclSpace.
14211
14212         * Update code everywhere accordingly.
14213
14214         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
14215
14216         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
14217
14218 2002-02-28  Ravi Pratap  <ravi@ximian.com>
14219
14220         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
14221         try performing lookups against those instead of jumping straight into using
14222         the 'using' clauses.
14223
14224         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
14225
14226         (LookupType): Perform lookups in implicit parents too.
14227
14228         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
14229         sequence as RootContext.LookupType. 
14230
14231         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
14232         the various cases of namespace lookups into this method.
14233
14234 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
14235
14236         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
14237         in positional arguments)
14238
14239         * class.cs (Operator): Update the AllowedModifiers to contain
14240         extern. 
14241
14242         * cs-parser.jay: Update operator declaration to allow for the
14243         operator body to be empty.
14244
14245         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
14246         values. 
14247
14248 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
14249
14250         * class.cs (Method.Emit): Label parameters.
14251
14252         * driver.cs: Return 1 or 0 as the program exit code.
14253
14254 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
14255
14256         * expression.cs: Special case the `null' object when trying to
14257         auto-compute the type, as anything can be explicitly converted to
14258         that. 
14259
14260         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
14261         spotting this Paolo.
14262
14263         (Expression.ImplicitNumericConversion): Perform comparissions of
14264         the type using the underlying type in the case of an enumeration
14265         rather than using the enumeration type for the compare.
14266
14267         Cope with the underlying == type case, which is not possible to
14268         catch before. 
14269
14270         (Expression.ConvertNumericExplicit): Perform comparissions of
14271         the type using the underlying type in the case of an enumeration
14272         rather than using the enumeration type for the compare.
14273
14274         * driver.cs: If the user does not supply an extension, assume .exe
14275
14276         * cs-parser.jay (if_statement): Rewrote so that we can track the
14277         location for the if statement.
14278
14279         * expression.cs (Binary.ConstantFold): Only concat strings when
14280         the operation is "+", not everything ;-)
14281
14282         * statement.cs (Statement.EmitBoolExpression): Take a location
14283         argument. 
14284         (If, While, Do): Track location.
14285
14286         * expression.cs (Binary.ResolveOperator): In the object + string
14287         case, I was missing a call to ConvertImplicit
14288
14289 2002-02-25  Ravi Pratap  <ravi@ximian.com>
14290
14291         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
14292         Location arguments. Ensure we use RootContext.LookupType to do our work
14293         and not try to do a direct Type.GetType and ModuleBuilder.GetType
14294
14295         * interface.cs (PopulateMethod): Handle the type of the parameter being
14296         null gracefully.
14297
14298         * expression.cs (Invocation.BetterFunction): Handle the case when we 
14299         have a params method with no fixed arguments and a call is made with no
14300         arguments.
14301
14302 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
14303
14304         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
14305         the verbatim-string-literal
14306
14307         * support.cs (InternalParameters.ParameterModifier): handle null
14308         fixed parameters.
14309         (InternalParameters.ParameterType): ditto.
14310
14311         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
14312         duplicating the name of the variable parameter.
14313         (GetParameterByName): Fix bug where we were not looking up array
14314         paramters if they were the only present (thanks Paolo!).
14315         (GetParameterInfo): We only have an empty set of types if both
14316         fixed and array are set to null.
14317         (GetParameterInfo-idx): Handle FixedParameter == null
14318
14319         * cs-parser.jay: Handle the case where there is no catch
14320         statements (missing null test).
14321
14322 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
14323
14324         * driver.cs (MainDriver): Be conservative on our command line
14325         handling.
14326
14327         Catch DirectoryNotFoundException when calling GetFiles.
14328
14329         (SplitPathAndPattern): Used to split the input specification into
14330         a path and a pattern that we can feed to Directory.GetFiles.
14331
14332 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
14333
14334         * statement.cs (Fixed): Implement the last case of the Fixed
14335         statement (string handling).
14336
14337         * expression.cs (StringPtr): New class used to return a char * to
14338         a string;  Used by the Fixed statement.
14339
14340         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
14341
14342         * expression.cs (Binary.ResolveOperator): Remove redundant
14343         MemberLookup pn parent type.
14344         Optimize union call, we do not need a union if the types are the same.
14345         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
14346         type.
14347
14348         Specialize the use of MemberLookup everywhere, instead of using
14349         the default settings. 
14350
14351         (StackAlloc): Implement stackalloc keyword.
14352
14353         * cs-parser.jay: Add rule to parse stackalloc.
14354
14355         * driver.cs: Handle /h, /help, /?
14356
14357         * expression.cs (MakeByteBlob): Removed the hacks we had in place
14358         before we supported unsafe code.
14359
14360         * makefile: add --unsafe to the self compilation of mcs.
14361
14362 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
14363
14364         * expression.cs (PointerArithmetic): New class that is used to
14365         perform pointer arithmetic.
14366         (Binary.Resolve): Handle pointer arithmetic
14367         Handle pointer comparission.
14368         (ArrayPtr): Utility expression class that is used to take the
14369         address of an array.
14370
14371         (ElementAccess): Implement array access for pointers
14372
14373         * statement.cs (Fixed): Implement fixed statement for arrays, we
14374         are missing one more case before we are done.
14375
14376         * expression.cs (Indirection): Implement EmitAssign and set the
14377         ExprClass to Variable.  This allows pointer dereferences to be
14378         treated as variables, and to have values assigned to them.
14379
14380         * ecore.cs (Expression.StoreFromPtr): New utility function to
14381         store values dereferencing.
14382
14383 2002-02-20  Ravi Pratap  <ravi@ximian.com>
14384
14385         * expression.cs (Binary.ResolveOperator): Ensure that we are
14386         not trying to operate on a void type - this fixes the reported
14387         bug.
14388
14389         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
14390         the parent implementation is sealed.
14391
14392         * ../errors/cs0239.cs : Add.
14393
14394         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
14395
14396         * typemanager.cs (unverifiable_code_type): Corresponds to 
14397         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
14398         which have unsafe code in them.
14399
14400         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
14401         unsafe context.
14402
14403 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
14404
14405         * cs-tokenizer.cs: Add support for @"litreal strings"
14406
14407         Make tokenizer accept pre-processor directives
14408         on any column (remove the old C-like limitation). 
14409
14410         * rootcontext.cs (EmitCode): Emit any global attributes.
14411         (AddGlobalAttributes): Used to keep track of assembly attributes. 
14412
14413         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
14414
14415         * cs-parser.jay: Add support for global attributes.  
14416
14417 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
14418
14419         * expression.cs (Indirection): New helper class.  Unary will
14420         create Indirection classes to be able to implement the
14421         IMemoryLocation interface on it.
14422
14423 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
14424
14425         * cs-parser.jay (fixed_statement): reference the right statement.
14426
14427         * statement.cs (Fixed.Emit): Finish implementing the fixed
14428         statement for the &x case.
14429
14430 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
14431
14432         * class.cs (Property.Define, Method.Define): Remove newslot when
14433         `implementing'.  
14434
14435         * modifiers.cs: My use of NewSlot when `Abstract' was set was
14436         wrong.  NewSlot should only be used if the `new' keyword is present.
14437
14438         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
14439         locating our system dir.  Sorry about this.
14440
14441 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
14442
14443         * driver.cs (GetSystemDir): Compute correctly the location of our
14444         system assemblies.  I was using the compiler directory instead of
14445         the library directory.
14446
14447 2002-02-13  Ravi Pratap  <ravi@ximian.com>
14448
14449         * expression.cs (BetterFunction): Put back in what Miguel commented out
14450         since it is the correct fix. The problem is elsewhere ;-)
14451
14452         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
14453         parameters of the parms method are themselves compatible or not !
14454
14455         (StandardConversionExists): Fix very dangerous bug where we were forgetting
14456         to check that a class implements an interface before saying that an implicit
14457         conversion was allowed. Use ImplementsInterface to do the checking.
14458
14459 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
14460
14461         * class.cs (Method.Define): Track whether we are an explicit
14462         implementation or not.  And only call DefineMethodOverride if we
14463         are an explicit implementation.
14464
14465         (Property.DefineMethod): Ditto.
14466
14467 2002-02-11  Ravi Pratap  <ravi@ximian.com>
14468
14469         * expression.cs (BetterFunction): Catch hideous bug which was
14470          preventing us from detecting ambiguous calls due to implicit casts i.e
14471         cs0121.
14472
14473 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
14474
14475         * support.cs (Pair): Remove un-needed method.  I figured why I was
14476         getting the error in cs-parser.jay, the variable in a foreach loop
14477         is readonly, and the compiler does not really treat this as a variable.
14478
14479         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
14480         instead of EQUALS in grammar.  
14481
14482         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
14483
14484         * expression.cs (Unary.DoResolve): Check whether the argument is
14485         managed or not.
14486
14487 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
14488
14489         * support.cs: Api for Pair to set a value.  Despite the fact that
14490         the variables are public the MS C# compiler refuses to compile
14491         code that accesses the field if the variable is part of a foreach
14492         statement. 
14493
14494         * statement.cs (Fixed): Begin implementation of the fixed
14495         statement.
14496
14497         (Block.AddVariable): Return the VariableInfo on success and null
14498         on failure instead of true/false. 
14499
14500         * cs-parser.jay (foreach): Catch errors on variables already
14501         defined (we were ignoring this value before) and properly unwind
14502         the block hierarchy
14503
14504         (fixed_statement): grammar for the fixed statement.
14505
14506 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
14507
14508         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
14509         pointer types to be incretemented.
14510
14511         (SizeOf): Implement.
14512
14513         * cs-parser.jay (pointer_member_access): Implement
14514         expr->IDENTIFIER production.
14515
14516         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
14517         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
14518         on safe contexts.
14519
14520         (Unary): Implement indirection.
14521
14522         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
14523         use in non-unsafe context).
14524
14525         (SimpleName.DoResolve): Check for pointers in field access on safe
14526         contexts. 
14527
14528         (Expression.LoadFromPtr): Factor the load-indirect code in this
14529         function.  This was duplicated in UnboxCast and ParameterReference
14530
14531 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
14532
14533         * expression.cs (ComposedCast): report an error if a pointer cast
14534         is used in a safe region.
14535
14536         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
14537         pointer type casts in unsafe context.
14538
14539         * codegen.cs (EmitContext): Set up IsUnsafe.
14540
14541         * cs-parser.jay (non_expression_type): Add productions for pointer
14542         casts. 
14543
14544         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
14545         code.  We should not use force into static mode if the method is
14546         not virtual.  Fixes bug in MIS
14547
14548         * statement.cs (Do.Emit, While.Emit, For.Emit,
14549         Statement.EmitBoolExpression): Add support to Do and While to
14550         propagate infinite loop as `I do return' semantics.
14551
14552         Improve the For case to also test for boolean constants.
14553
14554         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
14555         to the list of attributes we can add.
14556
14557         Remove `EmitContext' argument.
14558
14559         * class.cs (Method.Define): Apply parameter attributes.
14560         (Constructor.Define): Apply parameter attributes.
14561         (MethodCore.LabelParameters): Move here the core of labeling
14562         parameters. 
14563
14564         * support.cs (ReflectionParameters.ParameterModifier,
14565         InternalParameters.ParameterModifier): Use IsByRef on the type and
14566         only return the OUT bit for these parameters instead of in/out/ref
14567         flags.
14568
14569         This is because I miss-understood things.  The ParameterInfo.IsIn
14570         and IsOut represent whether the parameter has the [In] and [Out]
14571         attributes set.  
14572
14573 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
14574
14575         * ecore.cs (FieldExpr.Emit): Release temporaries.
14576
14577         * assign.cs (LocalTemporary.Release): new function.
14578
14579         * codegen.cs (EmitContext.GetTemporaryStorage,
14580         EmitContext.FreeTemporaryStorage): Rework the way we deal with
14581         temporary storage.  Now we can "put back" localbuilders when we
14582         are done with them
14583
14584 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
14585
14586         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
14587         need to make a copy of the variable to generate verifiable code.
14588
14589 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
14590
14591         * driver.cs: Compute dynamically the system directory.
14592
14593         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
14594         Slower, but more generally useful.  Used by the abstract
14595         registering implementation. 
14596
14597         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
14598         the rules for the special rule on Type/instances.  First check if
14599         we have the same name, and if so, try that special static path
14600         rather than the instance path.
14601
14602 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
14603
14604         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
14605         for, while and if.
14606
14607         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
14608         Enum, ValueType, Delegate or Array for non-corlib compiles.
14609
14610         * cs-tokenizer.cs: Catch long identifiers (645)
14611
14612         * typemanager.cs (IndexerPropetyName): Ravi never tested this
14613         piece of code.
14614
14615         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
14616         fix, we were returning too early, so we were not registering
14617         pending methods from abstract classes.
14618
14619         Do not register pending methods if the class is abstract.
14620
14621         * expression.cs (Conditional.DoResolve): Report circular implicit
14622         conversions when we neecd to compute it for conditional
14623         expressions. 
14624
14625         (Is.DoResolve): If the expression is always of the provided type,
14626         flag warning 183.  If the expression can not ever be of the
14627         provided type flag warning 184.
14628
14629         * class.cs: Catch 169 as well.
14630
14631         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
14632         read. 
14633
14634 2002-01-18  Nick Drochak  <ndrochak@gol.com>
14635
14636         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
14637
14638 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
14639
14640         * interface.cs: (PopulateMethod): Check for pointers being defined
14641         only if the unsafe context is active.
14642         (PopulateProperty): ditto.
14643         (PopulateIndexer): ditto.
14644
14645         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
14646         specified.  If pointers are present, make sure that they are
14647         present in an unsafe context.
14648         (Constructor, Constructor.Define): ditto.
14649         (Field, Field.Define): ditto.
14650         (Property, Property.Define): ditto.
14651         (Event, Event.Define): ditto.
14652
14653         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
14654         hashtable if there are classes or structs defined.
14655
14656         * expression.cs (LocalVariableReference.DoResolve): Simplify this
14657         code, as the constant resolution moved.
14658
14659         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
14660         the metadata, so we can flag error 133. 
14661
14662         * decl.cs (MemberCore.UnsafeOK): New function to test that a
14663         pointer is being declared in an unsafe context.
14664
14665 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
14666
14667         * modifiers.cs (Modifiers.Check): Require a Location argument.
14668         Report error 227 for Unsafe use.
14669
14670         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
14671
14672         * statement.cs (For.Emit): If the test is null, then report that
14673         we do `return', as we wont reach anything afterwards.
14674
14675         (Switch.SwitchGoverningType): Track the expression that matched
14676         the conversion.
14677
14678         * driver.cs: Allow negative numbers as an error code to flag.
14679
14680         * cs-parser.jay: Handle 1551.
14681
14682         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
14683
14684 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
14685
14686         * cs-parser.jay: Report 1518 (type declaration can only contain
14687         class, struct, interface, enum or delegate)
14688
14689         (switch_label): Report 1523 (keywords `case' or `default' must
14690         preced code)
14691
14692         (opt_switch_sections): Report 1522 (empty switch)
14693
14694         * driver.cs: Report 1515 (response file specified multiple times)
14695         Report 1516 (Source file specified multiple times).
14696
14697         * expression.cs (Argument.Resolve): Signal 1510
14698
14699         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
14700         access not allowed in static code)
14701
14702 2002-01-11  Ravi Pratap  <ravi@ximian.com>
14703
14704         * typemanager.cs (IsPointerType): Utility method which we are going
14705         to need a lot.
14706
14707         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
14708         the object type, so we take care of that.
14709
14710         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
14711
14712         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
14713         added to non-params parameters :-)
14714
14715         * typemanager.cs (CSharpName): Include 'void' type too. 
14716
14717         (void_ptr_type): Include in the set of core types.
14718
14719         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
14720         duplicating code.
14721
14722         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
14723         an unsafe context.
14724
14725         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
14726         completely forgotten about it.
14727
14728 2002-01-10  Ravi Pratap  <ravi@ximian.com>
14729
14730         * cs-parser.jay (pointer_type): Add. This begins our implementation
14731         of parsing rules for unsafe code.
14732
14733         (unsafe_statement): Implement.
14734
14735         (embedded_statement): Modify to include the above.
14736
14737         * statement.cs (Unsafe): Implement new class for unsafe blocks.
14738
14739         * codegen.cs (EmitContext.InUnsafe): Add. This determines
14740         if the current context is an unsafe one.
14741
14742         * cs-parser.jay (local_variable_pointer_type): Since local variable types
14743         are handled differently, we need separate rules for them.
14744
14745         (local_variable_declaration): Update to use local_variable_pointer_type
14746         to allow variable declarations of unmanaged pointer types.
14747
14748         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
14749         in unsafe contexts.
14750
14751         * ../errors/cs0214.cs : Add.
14752
14753 2002-01-16  Nick Drochak  <ndrochak@gol.com>
14754
14755         * makefile: remove 'response' file when cleaning.
14756
14757 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
14758
14759         * cs-parser.jay: Report 1524.
14760
14761 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
14762
14763         * typemanager.cs (RegisterMethod): drop checking if we have
14764         registered this from here
14765
14766 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
14767
14768         * class.cs (Method.EmitDestructor): Implement calling our base
14769         destructor. 
14770
14771         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
14772         value of InFinally.
14773
14774         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
14775         this routine and will wrap the call in a try/catch block.  Deal
14776         with the case.
14777
14778 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
14779
14780         * ecore.cs (Expression.MemberLookup): instead of taking a
14781         parameter `same_type' that was used to tell whether we could
14782         access private members we compute our containing type from the
14783         EmitContext.
14784
14785         (FieldExpr): Added partial support for volatile fields.  This does
14786         not work for volatile fields exposed from assemblies, as I can not
14787         figure out how to extract the modreq from it.
14788
14789         Updated all the source files to use this.
14790
14791         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
14792         because it is referenced by MemberLookup very often. 
14793
14794 2002-01-09  Ravi Pratap  <ravi@ximian.com>
14795
14796         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
14797         TypeBuilder.GetCustomAttributes to retrieve what we need.
14798
14799         Get rid of redundant default_member_attr_type as this is the same as
14800         default_member_type which already exists.
14801
14802         * interface.cs, attribute.cs : Update accordingly.
14803
14804 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
14805
14806         * typemanager.cs: Enable IndexerPropertyName again.  It does not
14807         work for TYpeBuilders though.  Ravi, can you please fix this?
14808
14809         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
14810
14811         * expression.cs (Argument.Emit): Handle the case of ref objects
14812         being passed to ref functions;  
14813
14814         (ParameterReference.EmitLoad): Loads the content of the pointer
14815         without dereferencing.
14816
14817 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
14818
14819         * cs-tokenizer.cs: Implemented the pre-processing expressions.
14820
14821 2002-01-08  Ravi Pratap  <ravi@ximian.com>
14822
14823         * class.cs (Indexer.DefineMethod): Incorporate the interface
14824         type in the name of the method if we are doing explicit interface
14825         implementation.
14826
14827         * expression.cs (ConversionExists): Remove as it is completely obsolete.
14828
14829         (BetterConversion): Fix extremely trivial bug where we were referring to
14830         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
14831         again !
14832
14833         * ../errors/bug16.cs : Add although we have fixed it.
14834
14835 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
14836
14837         * expression.cs (BaseIndexer): Begin implementation.
14838
14839         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
14840
14841         * cs-parser.jay (indexer_declarator): Use qualified_identifier
14842         production directly to remove a shift/reduce, and implement
14843         explicit interface implementation.
14844
14845         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
14846         after a floating point suffix.
14847
14848         * expression.cs (DoNumericPromotions): Improved the conversion for
14849         uint/uint.  If we have a constant, we avoid doing a typecast to a
14850         larger type.
14851
14852         * class.cs (Indexer): Implement explicit interface implementation
14853         for indexers.
14854
14855 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
14856
14857         * class.cs: make the default instance constructor public and hidebysig.
14858
14859 2001-01-03  Ravi Pratap  <ravi@ximian.com>
14860
14861         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
14862         so we can call it from elsewhere.
14863
14864         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
14865         we emit it internally if the class has a defined indexer; otherwise the user
14866         emits it by decorating the class definition with the DefaultMemberAttribute.
14867
14868         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
14869         attribute is not used on a type which defines an indexer.
14870
14871         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
14872         character when we skip whitespace.
14873
14874         * ../errors/cs0646.cs : Add.
14875
14876 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
14877
14878         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
14879         again. 
14880
14881         * makefile: Add practical target `mcs3.exe' which builds the third
14882         generation compiler. 
14883
14884         * expression.cs (New): Fix structures constructor calling.
14885
14886         * class.cs (Property, Method, Indexer): Emit Final flag on the
14887         method if we are an interface implementation and we are not
14888         abstract. 
14889
14890         * ecore.cs (PropertyExpr): New public field `IsBase', tells
14891         whether this property is referencing a `base' method.
14892
14893         * expression.cs (Invocation.EmitCall): take an extra argument:
14894         is_base, this is used to determine whether the `call' or
14895         `callvirt' opcode should be used.
14896
14897
14898         * delegate.cs: update EmitCall.
14899
14900         * class.cs (Method.Define): Set NewSlot for the cases where we are
14901         not implementing an interface method.
14902
14903         (Property.Define): ditto.
14904
14905 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
14906
14907         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
14908         'r'.  Allows mcs to parse itself fully.
14909
14910 2002-01-02  Ravi Pratap  <ravi@ximian.com>
14911
14912         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
14913         of the number of initializers that require the InitializeArray method.
14914
14915         (CheckIndices): Store the Expression in all cases - not the plain value. Also
14916         update the above field where necessary.
14917
14918         (MakeByteBlob): Update accordingly.
14919
14920         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
14921         greater than 2.
14922
14923         (EmitDynamicInitializers): Update in accordance with the new optimization.
14924
14925         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
14926         same OpCode applies.
14927
14928         * cs-parser.jay : Fix some glaring errors I introduced.
14929
14930 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
14931
14932         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
14933         so that we can check for name clashes there too.
14934
14935         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
14936         for interface indexers.
14937
14938         * interfaces.cs (Define): Emit the default member attribute.
14939
14940         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
14941         variable was being referred to while setting the value ;-)
14942
14943 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
14944
14945         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
14946         byte-by-byte information when we know the data is zero.
14947
14948         Make the block always a multiple of 4, because
14949         DefineInitializedData has a bug.
14950
14951         * assign.cs: Fix, we should assign from the temporary, not from
14952         the source. 
14953
14954         * expression.cs (MakeByteBlob): Fix my incorrect code.
14955
14956 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
14957
14958         * typemanager.cs (EnumToUnderlying): This function is used to get
14959         the underlying type from an enumeration, because it does not
14960         always work. 
14961
14962         * constant.cs: Use the I4_S form for values between -128 and 127.
14963
14964         * statement.cs (Block.LookupLabel): Looks up a label.
14965         (Block): Drop support for labeled blocks.
14966
14967         (LabeledStatement): New kind of statement that represents a label
14968         only.
14969
14970         (Goto): Finally implement this bad boy.
14971
14972         * cs-parser.jay: Update to reflect new mechanism to implement
14973         labels.
14974
14975 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
14976
14977         * codegen.cs (EmitContext.This): a codegen property that keeps the
14978         a single instance of this instead of creating many different this
14979         instances. 
14980
14981         * delegate.cs (Delegate.DoResolve): Update to use the property;
14982
14983         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
14984
14985         * expression.cs (BaseAccess.DoResolve): Ditto.
14986
14987 2001-12-29  Ravi Pratap  <ravi@ximian.com>
14988
14989         * typemanager.cs (methodimpl_attr_type): Add to hold the type
14990         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
14991
14992         (InitCoreTypes): Update accordingly.
14993
14994         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
14995         so we can quickly store the state.
14996
14997         (ApplyAttributes): Set the correct implementation flags
14998         for InternalCall methods.
14999
15000 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
15001
15002         * expression.cs (EmitCall): if a method is not virtual, then do
15003         not use callvirt on it.
15004
15005         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
15006         user defined stuff) requires the use of stobj, which takes an
15007         address on the stack instead of an array and an index.  So emit
15008         the Ldelema operation for it.
15009
15010         (EmitStoreOpcode): Use stobj for valuetypes.
15011
15012         (UnaryMutator.EmitCode): Use the right 1 value depending on
15013         whether we are dealing with int64/uint64, float or doubles.
15014
15015         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
15016         constructors that I implemented last night.
15017
15018         (Constructor.IsDefault): Fix to work properly for static
15019         constructors.
15020
15021         * cs-parser.jay (CheckDef): report method signature errors.
15022         Update error number 103 to be 132.
15023
15024         * decl.cs: New AdditionResult enumeration value: MethodExists.
15025         Although we do this check for methods later on in the semantic
15026         analysis, catching repeated default constructors is so easy that
15027         we catch these here. 
15028
15029         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
15030         promotions code.
15031
15032         (ParameterReference.EmitAssign, Emit): handle
15033         bools as bytes.
15034
15035         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
15036         (ArrayAccess.EmitStoreOpcode): ditto.
15037
15038         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
15039
15040         * expression.cs (MakeByteBlob): Complete all the missing types
15041         (uint, short, ushort, byte, sbyte)
15042
15043         * class.cs: Only init instance field initializers on instance
15044         constructors. 
15045
15046         Rename `constructors' to instance_constructors. 
15047
15048         (TypeContainer.AddConstructor): Only add constructors to the list
15049         if it is not static.
15050
15051         Make sure that we handle default_static_constructor independently
15052         everywhere where we handle instance_constructors
15053
15054 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
15055
15056         * class.cs: Do not lookup or create a base initializer for a
15057         static constructor.
15058
15059         (ConstructorInitializer.Resolve): use the proper type to lookup
15060         for constructors.
15061
15062         * cs-parser.jay: Report error 1585 (modifiers between type and name).
15063
15064         * enum.cs, interface.cs: Remove CloseType, this is taken care by
15065         in DeclSpace. 
15066
15067         * decl.cs: CloseType is now an virtual method, the default
15068         implementation just closes this type.
15069
15070 2001-12-28  Ravi Pratap  <ravi@ximian.com>
15071
15072         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
15073         to PreserveSig by default. Also emit HideBySig on such methods.
15074
15075         Basically, set the defaults to standard values.
15076
15077         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
15078         argument, if candidate is better, it can't be worse than the best !
15079
15080         (Invocation): Re-write bits to differentiate between methods being
15081         applicable in their expanded form and their normal form - for params
15082         methods of course.
15083
15084         Get rid of use_standard everywhere as only standard conversions are allowed
15085         in overload resolution. 
15086
15087         More spec conformance.
15088
15089 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
15090
15091         * driver.cs: Add --timestamp, to see where the compiler spends
15092         most of its time.
15093
15094         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
15095         `this' in static code.
15096
15097         (SimpleName.DoResolve): Implement in terms of a helper function
15098         that allows static-references to be passed upstream to
15099         MemberAccess.
15100
15101         (Expression.ResolveWithSimpleName): Resolve specially simple
15102         names when called by MemberAccess to implement the special
15103         semantics. 
15104
15105         (Expression.ImplicitReferenceConversion): Handle conversions from
15106         Null to reference types before others, as Null's type is
15107         System.Object. 
15108
15109         * expression.cs (Invocation.EmitCall): Handle the special case of
15110         calling methods declared on a reference type from a ValueType
15111         (Base classes System.Object and System.Enum)
15112
15113         (MemberAccess.Resolve): Only perform lookups on Enumerations if
15114         the left hand side is a TypeExpr, not on every enumeration. 
15115
15116         (Binary.Resolve): If types are reference types, then do a cast to
15117         object on operators != and == of both arguments.
15118
15119         * typemanager.cs (FindMembers): Extract instance and static
15120         members if requested.
15121
15122         * interface.cs (PopulateProperty): Use void_type instead of null
15123         as the return type for the setter method.
15124
15125         (PopulateIndexer): ditto.
15126
15127 2001-12-27  Ravi Pratap  <ravi@ximian.com>
15128
15129         * support.cs (ReflectionParameters): Fix minor bug where we
15130         were examining the wrong parameter for the ParamArray attribute.
15131
15132         Cope with requests for the type of the parameter at position
15133         greater than the params parameter's. We now return the element
15134         type of the params array as that makes more sense.
15135
15136         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
15137         accordingly as we no longer have to extract the element type
15138         ourselves.
15139
15140         (Invocation.OverloadResolve): Update.
15141
15142 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
15143
15144         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
15145         against IEnumerator, test whether the return value is a descendant
15146         of the IEnumerator interface.
15147
15148         * class.cs (Indexer.Define): Use an auxiliary method to implement
15149         the other bits of the method definition.  Begin support for
15150         explicit interface implementation.
15151
15152         (Property.DefineMethod): Use TypeManager.void_type instead of null
15153         for an empty return value.
15154
15155 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
15156
15157         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
15158         dealing with a FieldExpr which is composed of a FieldBuilder, in
15159         the code path we did extract the constant, but we should have
15160         obtained the underlying value to be able to cast it (otherwise we
15161         end up in an infinite loop, this is what Ravi was running into).
15162
15163         (ArrayCreation.UpdateIndices): Arrays might be empty.
15164
15165         (MemberAccess.ResolveMemberAccess): Add support for section
15166         14.5.4.1 that deals with the special case of E.I when E is a type
15167         and something else, that I can be a reference to a static member.
15168
15169         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
15170         handle a particular array type to create byte blobs, it is just
15171         something we dont generate byteblobs for.
15172
15173         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
15174         arguments. 
15175
15176         * location.cs (Push): remove the key from the hashtable that we
15177         are about to add.   This happens for empty files.
15178
15179         * driver.cs: Dispose files after we have parsed them.
15180
15181         (tokenize): new function that only runs the tokenizer on its
15182         input, for speed testing.
15183
15184 2001-12-26  Ravi Pratap  <ravi@ximian.com>
15185
15186         * class.cs (Event.Define): Define the private field only if there
15187         are no accessors defined.
15188
15189         * expression.cs (ResolveMemberAccess): If there is no associated
15190         field with the event, that means we have an event defined with its
15191         own accessors and we should flag error cs0070 since transforming
15192         ourselves into a field is not valid in that case.
15193
15194         * ecore.cs (SimpleName.DoResolve): Same as above.
15195
15196         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
15197         and charset to sane values.
15198
15199 2001-12-25  Ravi Pratap  <ravi@ximian.com>
15200
15201         * assign.cs (DoResolve): Perform check on events only if they 
15202         are being accessed outside the declaring type.
15203
15204         * cs-parser.jay (event_declarations): Update rules to correctly
15205         set the type of the implicit parameter etc.
15206
15207         (add_accessor, remove_accessor): Set current local parameters.
15208
15209         * expression.cs (Binary): For delegate addition and subtraction,
15210         cast the return value from the method into the appropriate delegate
15211         type.
15212
15213 2001-12-24  Ravi Pratap  <ravi@ximian.com>
15214
15215         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
15216         of these as the workaround is unnecessary.
15217
15218         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
15219         delegate data - none of that is needed at all.
15220
15221         Re-write bits to extract the instance expression and the delegate method
15222         correctly.
15223
15224         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
15225         on delegates too.
15226
15227         * attribute.cs (ApplyAttributes): New method to take care of common tasks
15228         of attaching attributes instead of duplicating code everywhere.
15229
15230         * everywhere : Update code to do attribute emission using the above method.
15231
15232 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
15233
15234         * expression.cs (IsParamsMethodApplicable): if there are not
15235         parameters, return immediately.
15236
15237         * ecore.cs: The 0 literal can be implicity converted to an enum
15238         type. 
15239
15240         (SimpleName.DoResolve): First lookup the type, then lookup the
15241         members. 
15242
15243         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
15244         want to get its address.  If the InstanceExpression is not
15245         addressable, store the result in a temporary variable, then get
15246         the address of it.
15247
15248         * codegen.cs: Only display 219 errors on warning level or above. 
15249
15250         * expression.cs (ArrayAccess): Make it implement the
15251         IMemoryLocation interface.
15252
15253         (Binary.DoResolve): handle the operator == (object a, object b)
15254         and operator != (object a, object b) without incurring into a
15255         BoxedCast (because 5 != o should never be performed).
15256
15257         Handle binary enumerator operators.
15258
15259         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
15260         value type, otherwise use Ldelem_ref.
15261
15262         Use precomputed names;
15263
15264         (AddressOf): Implement address of
15265
15266         * cs-parser.jay (labeled_statement): Fix recursive block
15267         addition by reworking the production.
15268
15269         * expression.cs (New.DoEmit): New has a special case:
15270                 
15271                  If we are dealing with a ValueType, we have a few
15272                  situations to deal with:
15273                 
15274                     * The target of New is a ValueType variable, that is
15275                       easy, we just pass this as the variable reference
15276                 
15277                     * The target of New is being passed as an argument,
15278                       to a boxing operation or a function that takes a
15279                       ValueType.
15280                 
15281                       In this case, we need to create a temporary variable
15282                       that is the argument of New.
15283
15284
15285 2001-12-23  Ravi Pratap  <ravi@ximian.com>
15286
15287         * rootcontext.cs (LookupType): Check that current_type is not null before
15288         going about looking at nested types.
15289
15290         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
15291         not implement the IAssignMethod interface any more.
15292
15293         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
15294         where we tranform them into FieldExprs if they are being resolved from within
15295         the declaring type.
15296
15297         * ecore.cs (SimpleName.DoResolve): Do the same here.
15298
15299         * assign.cs (DoResolve, Emit): Clean up code considerably. 
15300
15301         * ../errors/bug10.cs : Add.
15302
15303         * ../errors/cs0070.cs : Add.
15304
15305         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
15306
15307         * assign.cs : Get rid of EventIsLocal everywhere.
15308
15309 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
15310
15311         * ecore.cs (ConvertIntLiteral): finished the implementation.
15312
15313         * statement.cs (SwitchLabel): Convert the value we are using as a
15314         key before looking up the table.
15315
15316 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
15317
15318         * codegen.cs (EmitTopBlock): Require a Location argument now.
15319
15320         * cs-parser.jay (constructor_declarator): We need to setup
15321         current_local_parameters before we parse the
15322         opt_constructor_initializer, to allow the variables to be bound
15323         to the constructor arguments.
15324
15325         * rootcontext.cs (LookupType): First lookup nested classes in our
15326         class and our parents before we go looking outside our class.
15327
15328         * expression.cs (ConstantFold): Extract/debox the values at the
15329         beginnning. 
15330
15331         * rootcontext.cs (EmitCode): Resolve the constants first before we
15332         resolve the types.  This is not really needed, but it helps debugging.
15333
15334         * statement.cs: report location.
15335
15336         * cs-parser.jay: pass location to throw statement.
15337
15338         * driver.cs: Small bug fix.
15339
15340         * report.cs: Updated format to be 4-zero filled digits.
15341
15342 2001-12-22  Ravi Pratap  <ravi@ximian.com>
15343
15344         * expression.cs (CheckIndices): Fix minor bug where the wrong
15345         variable was being referred to ;-)
15346
15347         (DoEmit): Do not call EmitStaticInitializers when the 
15348         underlying type is System.Object.
15349
15350 2001-12-21  Ravi Pratap  <ravi@ximian.com>
15351
15352         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
15353         and do the usual workaround for SRE.
15354
15355         * class.cs (MyEventBuilder.EventType): New member to get at the type
15356         of the event, quickly.
15357
15358         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
15359
15360         * assign.cs (Assign.DoResolve): Handle the case when the target
15361         is an EventExpr and perform the necessary checks.
15362
15363         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
15364         interface.
15365
15366         (SimpleName.MemberStaticCheck): Include check for EventExpr.
15367
15368         (EventExpr): Set the type in the constructor itself since we 
15369         are meant to be born fully resolved.
15370
15371         (EventExpr.Define): Revert code I wrote earlier.
15372                 
15373         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
15374         instance expression is null. The instance expression is a This in that case
15375         or a null, depending on whether it is a static method or not.
15376
15377         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
15378         refers to more than one method.
15379
15380         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
15381         and accordingly flag errors.
15382
15383 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
15384
15385         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
15386
15387 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
15388
15389         * location.cs (ToString): Provide useful rutine.
15390
15391 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
15392
15393         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
15394         objects, return the actual integral boxed.
15395
15396         * statement.cs (SwitchLabel): define an ILLabel for each
15397         SwitchLabel. 
15398
15399         (Switch.CheckSwitch): If the value is a Literal, extract
15400         the underlying literal.
15401
15402         Also in the unused hashtable we had, add the SwitchLabel so we can
15403         quickly look this value up.
15404
15405         * constant.cs: Implement a bunch of new constants.  Rewrite
15406         Literal based on this.  Made changes everywhere to adapt to this.
15407
15408         * expression.cs (Expression.MakeByteBlob): Optimize routine by
15409         dereferencing array only once, and also copes with enumrations.
15410
15411         bytes are two bytes wide, not one.
15412
15413         (Cast): Perform constant conversions.
15414
15415         * ecore.cs (TryImplicitIntConversion): Return literals instead of
15416         wrappers to the literals here.
15417
15418         * expression.cs (DoNumericPromotions): long literals can converted
15419         to ulong implicity (this is taken care of elsewhere, but I was
15420         missing this spot).
15421
15422         * ecore.cs (Expression.Literalize): Make the return type Literal,
15423         to improve type checking.
15424
15425         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
15426
15427 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
15428
15429         * literal.cs: Revert code from ravi that checked the bounds.  The
15430         bounds are sane by the definition of the type itself. 
15431
15432         * typemanager.cs: Fix implementation of ImplementsInterface.  We
15433         need to actually look up in our parent hierarchy for interfaces
15434         implemented. 
15435
15436         * const.cs: Use the underlying type for enumerations
15437
15438         * delegate.cs: Compute the basename for the delegate creation,
15439         that should fix the delegate test case, and restore the correct
15440         Type Lookup semantics in rootcontext
15441
15442         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
15443         referencing a nested type with the Reflection API is using the "+"
15444         sign. 
15445
15446         * cs-parser.jay: Do not require EOF token at the end.
15447
15448 2001-12-20  Ravi Pratap  <ravi@ximian.com>
15449
15450         * rootcontext.cs (LookupType): Concatenate type names with
15451         a '.' instead of a '+' The test suite passes again.
15452
15453         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
15454         field of the enumeration.
15455
15456         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
15457         the case when the member is an EventExpr.
15458
15459         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
15460         static has an associated instance expression.
15461
15462         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
15463
15464         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
15465
15466         * class.cs (Event.Define): Register event and perform appropriate checks
15467         for error #111.
15468
15469         We define the Add and Remove methods even if the use provides none because
15470         in that case, we provide default implementations ourselves.
15471
15472         Define a private field of the type of the event. This is done by the CSC compiler
15473         and we should be doing it too ;-)
15474
15475         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
15476         More methods we use in code we generate.
15477
15478         (multicast_delegate_type, delegate_type): Two separate types since the distinction
15479         is important.
15480
15481         (InitCoreTypes): Update accordingly for the above.
15482
15483         * class.cs (Event.Emit): Generate code for default accessors that we provide
15484
15485         (EmitDefaultMethod): Do the job in the above.
15486
15487         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
15488         appropriate place.
15489
15490 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
15491
15492         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
15493         builders even if we were missing one.
15494
15495         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
15496         pass the Basename as our class name instead of the Name.  The
15497         basename will be correctly composed for us.
15498
15499         * parameter.cs (Paramters): Now takes a Location argument.
15500
15501         * decl.cs (DeclSpace.LookupType): Removed convenience function and
15502         make all the code call directly LookupType in RootContext and take
15503         this chance to pass the Location information everywhere.
15504
15505         * Everywhere: pass Location information.
15506
15507 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
15508
15509         * class.cs (Constructor.Define): Updated way of detecting the
15510         length of the parameters.
15511
15512         (TypeContainer.DefineType): Use basename as the type name for
15513         nested types.
15514
15515         (TypeContainer.Define): Do not recursively define types here, as
15516         definition is taken care in order by the RootContext.
15517
15518         * tree.cs: Keep track of namespaces in a per-file basis.
15519
15520         * parameter.cs (Parameter.ComputeSignature): Update to use
15521         DeclSpace. 
15522
15523         (Parameters.GetSignature): ditto.
15524
15525         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
15526         instead of a TypeContainer.
15527
15528         (Interface.SemanticAnalysis): Use `this' instead of our parent to
15529         resolve names.  Because we need to be resolve in our context, not
15530         our parents.
15531
15532         * driver.cs: Implement response files.
15533
15534         * class.cs (TypeContainer.DefineType): If we are defined, do not
15535         redefine ourselves.
15536
15537         (Event.Emit): Emit the code for add/remove handlers.
15538         (Event.Define): Save the MethodBuilders for add/remove.
15539
15540         * typemanager.cs: Use pair here too.
15541
15542         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
15543         DictionaryEntry requires the first argument to be non-null.  
15544
15545         (enum_declaration): Compute full name for registering the
15546         enumeration.
15547
15548         (delegate_declaration): Instead of using
15549         formal_parameter_list, use opt_formal_parameter_list as the list
15550         can be empty.
15551
15552         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
15553         (EventParsing): New property that controls whether `add' and
15554         `remove' are returned as tokens or identifiers (for events);
15555
15556 2001-12-19  Ravi Pratap  <ravi@ximian.com>
15557
15558         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
15559         use MyEventBuilder only and let it wrap the real builder for us.
15560
15561         (MyEventBuilder): Revamp constructor etc.
15562
15563         Implement all operations that we perform on EventBuilder in precisely the same
15564         way here too.
15565
15566         (FindMembers): Update to use the EventBuilder member.
15567
15568         (Event.Emit): Update accordingly.
15569
15570 2001-12-18  Ravi Pratap  <ravi@ximian.com>
15571
15572         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
15573         by calling the appropriate methods.
15574
15575         (GetCustomAttributes): Make stubs as they cannot possibly do anything
15576         useful.
15577
15578         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
15579
15580 2001-12-17  Ravi Pratap  <ravi@ximian.com>
15581
15582         * delegate.cs (Delegate.Populate): Check that the return type
15583         and various parameters types are indeed accessible.
15584
15585         * class.cs (Constructor.Define): Same here.
15586
15587         (Field.Define): Ditto.
15588
15589         (Event.Define): Ditto.
15590
15591         (Operator.Define): Check that the underlying Method defined itself
15592         correctly - so it's MethodBuilder should not be null.
15593
15594         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
15595         expression happens to be null.
15596
15597         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
15598         members but as of now we don't seem to be able to do anything really useful with it.
15599
15600         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
15601         not the EventBuilder.
15602
15603 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
15604
15605         * cs-tokenizer.cs: Add support for defines.
15606         Add support for #if, #elif, #else, #endif
15607
15608         (eval_var): evaluates a variable.
15609         (eval): stubbed for evaluating functions.
15610
15611         * cs-parser.jay: Pass the defines information
15612
15613         * driver.cs: Add --define command line option.
15614
15615         * decl.cs: Move MemberCore here.
15616
15617         Make it the base class for DeclSpace.  This allows us to catch and
15618         report 108 and 109 for everything now.
15619
15620         * class.cs (TypeContainer.Define): Extract all the members
15621         before populating and emit the warning 108 (new keyword required
15622         to override) instead of having each member implement this.
15623
15624         (MemberCore.Define): New abstract method, we will be using this in
15625         the warning reporting engine in Populate.
15626
15627         (Operator.Define): Adjust to new MemberCore protocol. 
15628
15629         * const.cs (Const): This does not derive from Expression, it is a
15630         temporary object we use to create fields, it is a MemberCore. 
15631
15632         * class.cs (Method.Define): Allow the entry point to be in a
15633         specific class.
15634
15635         * driver.cs: Rewrite the argument handler to clean it up a bit.
15636
15637         * rootcontext.cs: Made it just an auxiliary namespace feature by
15638         making everything static.
15639
15640         * driver.cs: Adapt code to use RootContext type name instead of
15641         instance variable.
15642
15643         * delegate.cs: Remove RootContext argument.
15644
15645         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
15646         argument. 
15647
15648         * class.cs (Event.Define): The lookup can fail.
15649
15650         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
15651
15652         * expression.cs: Resolve the this instance before invoking the code.
15653
15654 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
15655
15656         * cs-parser.jay: Add a production in element_access that allows
15657         the thing to become a "type" reference.  This way we can parse
15658         things like "(string [])" as a type.
15659
15660         Note that this still does not handle the more complex rules of
15661         casts. 
15662
15663
15664         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
15665
15666         * ecore.cs: (CopyNewMethods): new utility function used to
15667         assemble the list of methods from running FindMembers.
15668
15669         (MemberLookup): Rework FindMembers so that 
15670
15671 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
15672
15673         * class.cs (TypeContainer): Remove Delegates who fail to be
15674         defined.
15675
15676         * delegate.cs (Populate): Verify that we dont get null return
15677         values.   TODO: Check for AsAccessible.
15678
15679         * cs-parser.jay: Use basename to emit error 574 (destructor should
15680         have the same name as container class), not the full name.
15681
15682         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
15683         possible representation.  
15684
15685         Also implements integer type suffixes U and L.
15686
15687 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
15688
15689         * expression.cs (ArrayCreation.DoResolve): We need to do the
15690         argument resolution *always*.
15691
15692         * decl.cs: Make this hold the namespace.  Hold the root context as
15693         well.
15694         (LookupType): Move here.
15695
15696         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
15697
15698         * location.cs (Row, Name): Fixed the code, it was always returning
15699         references to the first file.
15700
15701         * interface.cs: Register properties defined through interfaces.
15702
15703         * driver.cs: Add support for globbing on the command line
15704
15705         * class.cs (Field): Make it derive from MemberCore as well.
15706         (Event): ditto.
15707
15708 2001-12-15  Ravi Pratap  <ravi@ximian.com>
15709
15710         * class.cs (Event::Define): Check that the type of the event is a delegate
15711         type else flag error #66.
15712
15713         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
15714         same.
15715
15716         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
15717         values of EntryPoint, CharSet etc etc.
15718
15719         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
15720
15721         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
15722         be null and we should ignore this. I am not sure if this is really clean. Apparently,
15723         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
15724         which needs this to do its work.
15725
15726         * ../errors/cs0066.cs : Add.
15727
15728 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
15729
15730         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
15731         helper functions.
15732
15733         * class.cs: (MethodSignature.MethodSignature): Removed hack that
15734         clears out the parameters field.
15735         (MemberSignatureCompare): Cleanup
15736
15737         (MemberCore): New base class used to share code between MethodCore
15738         and Property.
15739
15740         (RegisterRequiredImplementations) BindingFlags.Public requires
15741         either BindingFlags.Instace or Static.  Use instance here.
15742
15743         (Property): Refactored code to cope better with the full spec.
15744
15745         * parameter.cs (GetParameterInfo): Return an empty array instead
15746         of null on error.
15747
15748         * class.cs (Property): Abstract or extern properties have no bodies.
15749
15750         * parameter.cs (GetParameterInfo): return a zero-sized array.
15751
15752         * class.cs (TypeContainer.MethodModifiersValid): Move all the
15753         method modifier validation to the typecontainer so we can reuse
15754         this on properties.
15755
15756         (MethodCore.ParameterTypes): return an empty sized array of types.
15757
15758         (Property.Define): Test property modifier validity.
15759
15760         Add tests for sealed/override too.
15761
15762         (Method.Emit): abstract or extern methods have no bodies.
15763
15764 2001-12-14  Ravi Pratap  <ravi@ximian.com>
15765
15766         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
15767         thing.
15768
15769         (Method::Define, ::Emit): Modify accordingly.
15770
15771         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
15772
15773         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
15774
15775         * makefile: Pass in /unsafe.
15776
15777 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
15778
15779         * class.cs (MakeKey): Kill routine.
15780
15781         * class.cs (TypeContainer.Define): Correctly define explicit
15782         method implementations (they require the full interface name plus
15783         the method name).
15784
15785         * typemanager.cs: Deply the PtrHashtable here and stop using the
15786         lame keys.  Things work so much better.
15787
15788         This of course broke everyone who depended on `RegisterMethod' to
15789         do the `test for existance' test.  This has to be done elsewhere.
15790
15791         * support.cs (PtrHashtable): A hashtable that avoid comparing with
15792         the object stupid Equals method (because, that like fails all over
15793         the place).  We still do not use it.
15794
15795         * class.cs (TypeContainer.SetRequiredInterface,
15796         TypeContainer.RequireMethods): Killed these two routines and moved
15797         all the functionality to RegisterRequiredImplementations.
15798
15799         (TypeContainer.RegisterRequiredImplementations): This routine now
15800         registers all the implementations required in an array for the
15801         interfaces and abstract methods.  We use an array of structures
15802         which can be computed ahead of time to reduce memory usage and we
15803         also assume that lookups are cheap as most classes will not
15804         implement too many interfaces.
15805
15806         We also avoid creating too many MethodSignatures.
15807
15808         (TypeContainer.IsInterfaceMethod): Update and optionally does not
15809         clear the "pending" bit if we find that there are problems with
15810         the declaration.
15811
15812         (TypeContainer.VerifyPendingMethods): Update to report errors of
15813         methods that look like implementations but are not.
15814
15815         (TypeContainer.Define): Add support for explicit interface method
15816         implementation. 
15817
15818 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
15819
15820         * typemanager.cs: Keep track of the parameters here instead of
15821         being a feature of the TypeContainer.
15822
15823         * class.cs: Drop the registration of parameters here, as
15824         InterfaceMethods are also interface declarations.
15825
15826         * delegate.cs: Register methods with the TypeManager not only with
15827         the TypeContainer.  This code was buggy.
15828
15829         * interface.cs: Full registation here.
15830
15831 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
15832
15833         * expression.cs: Remove reducer for binary expressions, it can not
15834         be done this way.
15835
15836         * const.cs: Put here the code that used to go into constant.cs
15837
15838         * constant.cs: Put here the code for constants, this is a new base
15839         class for Literals.
15840
15841         * literal.cs: Make Literal derive from Constant.
15842
15843 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
15844
15845         * statement.cs (Return.Emit): Report error 157 if the user
15846         attempts to return from a finally block.
15847
15848         (Return.Emit): Instead of emitting a return, jump to the end of
15849         the function.
15850
15851         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
15852         LocalBuilder to store the result of the function.  ReturnLabel is
15853         the target where we jump.
15854
15855
15856 2001-12-09  Radek Doulik  <rodo@ximian.com>
15857
15858         * cs-parser.jay: remember alias in current namespace
15859
15860         * ecore.cs (SimpleName::DoResolve): use aliases for types or
15861         namespaces
15862
15863         * class.cs (LookupAlias): lookup alias in my_namespace
15864
15865         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
15866         aliases hashtable
15867         (LookupAlias): lookup alias in this and if needed in parent
15868         namespaces
15869
15870 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
15871
15872         * support.cs: 
15873
15874         * rootcontext.cs: (ModuleBuilder) Made static, first step into
15875         making things static.  I need this to avoid passing the
15876         TypeContainer when calling ParameterType.
15877
15878         * support.cs (InternalParameters.ParameterType): Remove ugly hack
15879         that did string manipulation to compute the type and then call
15880         GetType.  Use Parameter.ParameterType instead.
15881
15882         * cs-tokenizer.cs: Consume the suffix for floating values.
15883
15884         * expression.cs (ParameterReference): figure out whether this is a
15885         reference parameter or not.  Kill an extra variable by computing
15886         the arg_idx during emission.
15887
15888         * parameter.cs (Parameters.GetParameterInfo): New overloaded
15889         function that returns whether a parameter is an out/ref value or not.
15890
15891         (Parameter.ParameterType): The type of the parameter (base,
15892         without ref/out applied).
15893
15894         (Parameter.Resolve): Perform resolution here.
15895         (Parameter.ExternalType): The full type (with ref/out applied).
15896
15897         * statement.cs (Using.Emit, Using.EmitExpression): Implement
15898         support for expressions on the using statement.
15899
15900 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
15901
15902         * statement.cs (Using.EmitLocalVariableDecls): Split the
15903         localvariable handling of the using statement.
15904
15905         (Block.EmitMeta): Keep track of variable count across blocks.  We
15906         were reusing slots on separate branches of blocks.
15907
15908         (Try.Emit): Emit the general code block, we were not emitting it. 
15909
15910         Check the type of the declaration to be an IDisposable or
15911         something that can be implicity converted to it. 
15912
15913         Emit conversions if required.
15914
15915         * ecore.cs (EmptyExpression): New utility class.
15916         (Expression.ImplicitConversionExists): New utility function.
15917
15918 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
15919
15920         * statement.cs (Using): Implement.
15921
15922         * expression.cs (LocalVariableReference): Support read only variables.
15923
15924         * statement.cs: Remove the explicit emit for the Leave opcode.
15925         (VariableInfo): Add a readonly field.
15926
15927 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
15928
15929         * ecore.cs (ConvCast): new class used to encapsulate the various
15930         explicit integer conversions that works in both checked and
15931         unchecked contexts.
15932
15933         (Expression.ConvertNumericExplicit): Use new ConvCast class to
15934         properly generate the overflow opcodes.
15935
15936 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
15937
15938         * statement.cs: The correct type for the EmptyExpression is the
15939         element_type, not the variable type.  Ravi pointed this out.
15940
15941 2001-12-04  Ravi Pratap  <ravi@ximian.com>
15942
15943         * class.cs (Method::Define): Handle PInvoke methods specially
15944         by using DefinePInvokeMethod instead of the usual one.
15945
15946         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
15947         above to do the task of extracting information and defining the method.
15948
15949 2001-12-04  Ravi Pratap  <ravi@ximian.com>
15950
15951         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
15952         of the condition for string type.
15953
15954         (Emit): Move that here. 
15955
15956         (ArrayCreation::CheckIndices): Keep string literals in their expression
15957         form.
15958
15959         (EmitDynamicInitializers): Handle strings appropriately.
15960
15961 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
15962
15963         * codegen.cs (EmitContext): Replace multiple variables with a
15964         single pointer to the current Switch statement.
15965
15966         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
15967         EmitContext.
15968
15969 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
15970
15971         * statement.cs 
15972
15973         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
15974         default'.
15975
15976         (Foreach.Emit): Foreach on arrays was not setting
15977         up the loop variables (for break/continue).
15978
15979         (GotoCase): Semi-implented.
15980
15981 2001-12-03  Ravi Pratap  <ravi@ximian.com>
15982
15983         * attribute.cs (CheckAttribute): Handle system attributes by using
15984         Attribute.GetAttributes to examine information we need.
15985
15986         (GetValidPlaces): Same here.
15987
15988         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
15989
15990         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
15991
15992         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
15993
15994         (Method::Define): Set appropriate flags if we have a DllImport attribute.
15995
15996         (Method::Emit): Handle the case when we are a PInvoke method.
15997
15998 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
15999
16000         * expression.cs: Use ResolveWithSimpleName on compound names.
16001
16002 2001-12-02  Ravi Pratap  <ravi@ximian.com>
16003
16004         * constant.cs (EmitConstant): Make sure we resolve the associated expression
16005         before trying to reduce it.
16006
16007         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
16008
16009         * constant.cs (LookupConstantValue): Implement.
16010
16011         (EmitConstant): Use the above in emitting the constant.
16012
16013         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
16014         that are user-defined by doing a LookupConstantValue on them.
16015
16016         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
16017         too, like above.
16018
16019 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
16020
16021         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
16022
16023         (BaseAccess.DoResolve): Implement.
16024
16025         (MemberAccess.DoResolve): Split this routine into a
16026         ResolveMemberAccess routine that can be used independently
16027
16028 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
16029
16030         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
16031         As that share bits of the implementation.  Is returns a boolean,
16032         while As returns the Type that is being probed.
16033
16034 2001-12-01  Ravi Pratap  <ravi@ximian.com>
16035
16036         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
16037         instead of a Literal - much easier.
16038
16039         (EnumInTransit): Remove - utterly useless :-)
16040
16041         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
16042
16043         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
16044
16045         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
16046         chain when we have no associated expression.
16047
16048 2001-11-30  Ravi Pratap  <ravi@ximian.com>
16049
16050         * constant.cs (Define): Use Location while reporting the errror.
16051
16052         Also emit a warning when 'new' is used and there is no inherited
16053         member to hide.
16054
16055         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
16056         populated.
16057
16058         (LookupEnumValue): Implement to lookup an enum member's value and define it
16059         if necessary.
16060
16061         (Populate): Re-write accordingly to use the above routine.
16062
16063 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
16064
16065         * expression.cs (This): Fix prototype for DoResolveLValue to
16066         override the base class DoResolveLValue.
16067
16068         * cs-parser.cs: Report errors cs574 and cs575 (destructor
16069         declarations) 
16070
16071         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
16072         (we need to load the address of the field here).  This fixes
16073         test-22. 
16074
16075         (FieldExpr.DoResolveLValue): Call the DoResolve
16076         function to initialize the Instance expression.
16077
16078         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
16079         correctly the GetEnumerator operation on a value type.
16080
16081         * cs-parser.jay: Add more simple parsing error catches.
16082
16083         * statement.cs (Switch): Add support for string switches.
16084         Handle null specially.
16085
16086         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
16087
16088 2001-11-28  Ravi Pratap  <ravi@ximian.com>
16089
16090         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
16091
16092         (declare_local_constant): New helper function.
16093
16094         * statement.cs (AddConstant): Keep a separate record of constants
16095
16096         (IsConstant): Implement to determine if a variable is a constant.
16097
16098         (GetConstantExpression): Implement.
16099
16100         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
16101
16102         * statement.cs (IsVariableDefined): Re-write.
16103
16104 2001-11-27  Ravi Pratap  <ravi@ximian.com>
16105
16106         * class.cs (TypeContainer::FindMembers): Look for constants
16107         in the case when we are looking for MemberTypes.Field
16108
16109         * expression.cs (MemberAccess::DoResolve): Check that in the
16110         case we are a FieldExpr and a Literal, we are not being accessed
16111         by an instance reference.
16112
16113         * cs-parser.jay (local_constant_declaration): Implement.
16114
16115         (declaration_statement): Implement for constant declarations.
16116
16117 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
16118
16119         * statement.cs (Switch): Catch double defaults.
16120
16121         (Switch): More work on the switch() statement
16122         implementation.  It works for integral values now, need to finish
16123         string support.
16124
16125
16126 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
16127
16128         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
16129         integer literals into other integer literals.  To be used by
16130         switch. 
16131
16132 2001-11-24  Ravi Pratap  <ravi@ximian.com>
16133
16134         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
16135         some memory.
16136
16137         (EmitDynamicInitializers): Cope with the above since we extract data
16138         directly from ArrayData now.
16139
16140         (ExpectInitializers): Keep track of whether initializers are mandatory
16141         or not.
16142
16143         (Bounds): Make it a hashtable to prevent the same dimension being 
16144         recorded for every element in that dimension.
16145
16146         (EmitDynamicInitializers): Fix bug which prevented the Set array method
16147         from being found.
16148
16149         Also fix bug which was causing the indices to be emitted in the reverse
16150         order.
16151
16152 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
16153
16154         * expression.cs (ArrayCreation): Implement the bits that Ravi left
16155         unfinished.  They do not work, because the underlying code is
16156         sloppy.
16157
16158 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
16159
16160         * cs-parser.jay: Remove bogus fixme.
16161
16162         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
16163         on Switch statement.
16164
16165 2001-11-23  Ravi Pratap  <ravi@ximian.com>
16166
16167         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
16168         the same. 
16169
16170         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
16171         parameter. Apparently, any expression is allowed. 
16172
16173         (ValidateInitializers): Update accordingly.
16174
16175         (CheckIndices): Fix some tricky bugs thanks to recursion.
16176
16177         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
16178         I was being completely brain-dead.
16179
16180         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
16181         and re-write acordingly.
16182
16183         (DelegateInvocation): Re-write accordingly.
16184
16185         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
16186
16187         (MakeByteBlob): Handle types more correctly.
16188
16189         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
16190         initialization from expressions but it is incomplete because I am a complete
16191         Dodo :-|
16192
16193 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
16194
16195         * statement.cs (If.Emit): Fix a bug that generated incorrect code
16196         on If.  Basically, we have to return `true' (ie, we do return to
16197         our caller) only if both branches of the if return.
16198
16199         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
16200         short-circuit operators, handle them as short circuit operators. 
16201
16202         (Cast.DoResolve): Resolve type.
16203         (Cast.Cast): Take an expression as the target type.
16204
16205         * cs-parser.jay (cast_expression): Remove old hack that only
16206         allowed a limited set of types to be handled.  Now we take a
16207         unary_expression and we resolve to a type during semantic
16208         analysis.
16209
16210         Use the grammar productions from Rhys to handle casts (this is
16211         not complete like Rhys syntax yet, we fail to handle that corner
16212         case that C# has regarding (-x), but we will get there.
16213
16214 2001-11-22  Ravi Pratap  <ravi@ximian.com>
16215
16216         * class.cs (EmitFieldInitializer): Take care of the case when we have a
16217         field which is an array type.
16218
16219         * cs-parser.jay (declare_local_variables): Support array initialization too.
16220
16221         * typemanager.cs (MakeKey): Implement.
16222
16223         (everywhere): Use the above appropriately.
16224
16225         * cs-parser.jay (for_statement): Update for array initialization while
16226         declaring variables.
16227
16228         * ecore.cs : The error message was correct, it's the variable's names that
16229         were misleading ;-) Make the code more readable.
16230
16231         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
16232         the correct type etc.
16233
16234         (ConvertExplicit): Handle Enum types by examining the underlying type.
16235
16236 2001-11-21  Ravi Pratap  <ravi@ximian.com>
16237
16238         * parameter.cs (GetCallingConvention): Always return
16239         CallingConventions.Standard for now.
16240
16241 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
16242
16243         * expression.cs (Binary.ResolveOperator): Update the values of `l'
16244         and `r' after calling DoNumericPromotions.
16245
16246         * ecore.cs: Fix error message (the types were in the wrong order).
16247
16248         * statement.cs (Foreach.ProbeCollectionType): Need to pass
16249         BindingFlags.Instance as well 
16250
16251         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
16252         implicit int literal conversion in an empty cast so that we
16253         propagate the right type upstream.
16254
16255         (UnboxCast): new class used to unbox value types.
16256         (Expression.ConvertExplicit): Add explicit type conversions done
16257         by unboxing.
16258
16259         (Expression.ImplicitNumericConversion): Oops, forgot to test for
16260         the target type before applying the implicit LongLiterals to ULong
16261         literal cast.
16262
16263 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
16264
16265         * cs-parser.jay (for_statement): Reworked the way For works: now
16266         we declare manually any variables that are introduced in
16267         for_initializer to solve the problem of having out-of-band code
16268         emition (that is what got for broken).
16269
16270         (declaration_statement): Perform the actual variable declaration
16271         that used to be done in local_variable_declaration here.
16272
16273         (local_variable_declaration): Do not declare anything, just pass
16274         the information on a DictionaryEntry
16275
16276 2001-11-20  Ravi Pratap  <ravi@ximian.com>
16277
16278         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
16279         re-write of the logic to now make it recursive.
16280
16281         (UpdateIndices): Re-write accordingly.
16282
16283         Store element data in a separate ArrayData list in the above methods.
16284
16285         (MakeByteBlob): Implement to dump the array data into a byte array.
16286
16287 2001-11-19  Ravi Pratap  <ravi@ximian.com>
16288
16289         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
16290         into CheckIndices.
16291
16292         * constant.cs (Define): Implement.
16293
16294         (EmitConstant): Re-write fully.
16295
16296         Pass in location info.
16297
16298         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
16299         respectively.
16300
16301         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
16302         DictionaryEntry since we need location info too.
16303
16304         (constant_declaration): Update accordingly.
16305
16306         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
16307         code into another method : UpdateIndices.
16308
16309 2001-11-18  Ravi Pratap  <ravi@ximian.com>
16310
16311         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
16312         some type checking etc.
16313
16314 2001-11-17  Ravi Pratap  <ravi@ximian.com>
16315
16316         * expression.cs (ArrayCreation::ValidateInitializers): Implement
16317         bits to provide dimension info if the user skips doing that.
16318
16319         Update second constructor to store the rank correctly.
16320
16321 2001-11-16  Ravi Pratap  <ravi@ximian.com>
16322
16323         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
16324         and try to implement.
16325
16326         * ../errors/cs0150.cs : Add.
16327
16328         * ../errors/cs0178.cs : Add.
16329
16330 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
16331
16332         * statement.cs: Implement foreach on multi-dimensional arrays. 
16333
16334         * parameter.cs (Parameters.GetParameterByName): Also lookup the
16335         name of the params argument.
16336
16337         * expression.cs: Use EmitStoreOpcode to get the right opcode while
16338         initializing the array.
16339
16340         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
16341         we can use this elsewhere.
16342
16343         * statement.cs: Finish implementation of foreach for single
16344         dimension arrays.
16345
16346         * cs-parser.jay: Use an out-of-band stack to pass information
16347         around, I wonder why I need this.
16348
16349         foreach_block: Make the new foreach_block the current_block.
16350
16351         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
16352         function used to return a static Parameters structure.  Used for
16353         empty parameters, as those are created very frequently.
16354
16355         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
16356
16357 2001-11-15  Ravi Pratap  <ravi@ximian.com>
16358
16359         * interface.cs : Default modifier is private, not public. The
16360         make verify test passes again.
16361
16362 2001-11-15  Ravi Pratap  <ravi@ximian.com>
16363
16364         * support.cs (ReflectionParameters): Fix logic to determine
16365         whether the last parameter is a params one. Test 9 passes again.
16366
16367         * delegate.cs (Populate): Register the builders we define with
16368         RegisterParameterForBuilder. Test 19 passes again.
16369
16370         * cs-parser.jay (property_declaration): Reference $6 instead
16371         of $$ to get at the location.
16372
16373         (indexer_declaration): Similar stuff.
16374
16375         (attribute): Ditto.
16376
16377         * class.cs (Property): Register parameters for the Get and Set methods
16378         if they exist. Test 23 passes again.
16379
16380         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
16381         call to EmitArguments as we are sure there aren't any params arguments. 
16382         Test 32 passes again.
16383
16384         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
16385         IndexOutOfRangeException. 
16386
16387         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
16388         Test 33 now passes again.
16389
16390 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
16391
16392         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
16393         broke a bunch of things.  Will have to come up with a better way
16394         of tracking locations.
16395
16396         * statement.cs: Implemented foreach for single dimension arrays.
16397
16398 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
16399
16400         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
16401         an error.  This removes the lookup from the critical path.
16402
16403         * cs-parser.jay: Removed use of temporary_loc, which is completely
16404         broken. 
16405
16406 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
16407
16408         * support.cs (ReflectionParameters.ParameterModifier): Report
16409         whether the argument is a PARAMS argument or not.
16410
16411         * class.cs: Set the attribute `ParamArrayAttribute' on the
16412         parameter argument.
16413
16414         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
16415         and cons_param_array_attribute (ConstructorInfo for
16416         ParamArrayAttribute)., 
16417
16418         * codegen.cs: Emit the return using the `Return' statement, that
16419         way we can report the error correctly for missing return values. 
16420
16421         * class.cs (Method.Emit): Clean up.
16422
16423         * expression.cs (Argument.Resolve): Take another argument: the
16424         location where this argument is used.  Notice that this is not
16425         part of the "Argument" class as to reduce the size of the
16426         structure (we know the approximate location anyways).
16427
16428         Test if the argument is a variable-reference, if not, then
16429         complain with a 206.
16430
16431         (Argument.Emit): Emit addresses of variables.
16432
16433         (Argument.FullDesc): Simplify.
16434
16435         (Invocation.DoResolve): Update for Argument.Resolve.
16436
16437         (ElementAccess.DoResolve): ditto.
16438
16439         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
16440         method should be virtual, as this method is always virtual.
16441
16442         (NewDelegate.DoResolve): Update for Argument.Resolve.
16443
16444         * class.cs (ConstructorInitializer.DoResolve): ditto.
16445
16446         * attribute.cs (Attribute.Resolve): ditto.
16447
16448 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
16449
16450         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
16451
16452         * expression.cs (ParameterReference): Drop IStackStorage and implement
16453         IAssignMethod instead. 
16454
16455         (LocalVariableReference): ditto.
16456
16457         * ecore.cs (FieldExpr): Drop IStackStorage and implement
16458         IAssignMethod instead. 
16459
16460 2001-11-13  Miguel de Icaza <miguel@ximian.com>
16461
16462         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
16463         enumerations that are used in heavily used structures derive from
16464         byte in a laughable and pathetic attempt to reduce memory usage.
16465         This is the kind of pre-optimzations that you should not do at
16466         home without adult supervision.
16467
16468         * expression.cs (UnaryMutator): New class, used to handle ++ and
16469         -- separatedly from the other unary operators.  Cleans up the
16470         code, and kills the ExpressionStatement dependency in Unary.
16471
16472         (Unary): Removed `method' and `Arguments' from this class, making
16473         it smaller, and moving it all to SimpleCall, so I can reuse this
16474         code in other locations and avoid creating a lot of transient data
16475         strucutres when not required.
16476
16477         * cs-parser.jay: Adjust for new changes.
16478
16479 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
16480
16481         * enum.cs (Enum.Populate): If there is a failure during
16482         definition, return
16483
16484         * cs-parser.jay (opt_enum_base): we used to catch type errors
16485         here, but this is really incorrect.  The type error should be
16486         catched during semantic analysis.
16487
16488 2001-12-11  Ravi Pratap  <ravi@ximian.com>
16489
16490         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
16491         current_local_parameters as expected since I, in my stupidity, had forgotten
16492         to do this :-)
16493
16494         * attribute.cs (GetValidPlaces): Fix stupid bug.
16495
16496         * class.cs (Method::Emit): Perform check on applicability of attributes.
16497
16498         (Constructor::Emit): Ditto.
16499
16500         (Field::Emit): Ditto.
16501
16502         (Field.Location): Store location information.
16503
16504         (Property, Event, Indexer, Operator): Ditto.
16505
16506         * cs-parser.jay (field_declaration): Pass in location for each field.
16507
16508         * ../errors/cs0592.cs : Add.
16509
16510 2001-11-12  Ravi Pratap  <ravi@ximian.com>
16511
16512         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
16513
16514         (InitCoreTypes): Update accordingly.
16515
16516         (RegisterAttrType, LookupAttr): Implement.
16517
16518         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
16519         info about the same.
16520
16521         (Resolve): Update to populate the above as necessary.
16522
16523         (Error592): Helper.
16524
16525         (GetValidPlaces): Helper to the above.
16526
16527         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
16528
16529         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
16530
16531 2001-11-12  Ravi Pratap  <ravi@ximian.com>
16532
16533         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
16534
16535         * ../errors/cs0617.cs : Add.
16536
16537 2001-11-11  Ravi Pratap  <ravi@ximian.com>
16538
16539         * enum.cs (Emit): Rename to Populate to be more consistent with what
16540         we expect it to do and when exactly it is called.
16541
16542         * class.cs, rootcontext.cs : Update accordingly.
16543
16544         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
16545         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
16546
16547         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
16548
16549         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
16550         of a fieldinfo using the above, when dealing with a FieldBuilder.
16551
16552 2001-11-10  Ravi Pratap  <ravi@ximian.com>
16553
16554         * ../errors/cs0031.cs : Add.
16555
16556         * ../errors/cs1008.cs : Add.
16557
16558         * ../errrors/cs0543.cs : Add.
16559
16560         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
16561         enum type.
16562
16563         (FindMembers): Implement.
16564
16565         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
16566         enums and delegates too.
16567
16568         (enum_types): Rename to builder_to_enum.
16569
16570         (delegate_types): Rename to builder_to_delegate.
16571
16572         * delegate.cs (FindMembers): Implement.
16573
16574 2001-11-09  Ravi Pratap  <ravi@ximian.com>
16575
16576         * typemanager.cs (IsEnumType): Implement.
16577
16578         * enum.cs (Emit): Re-write parts to account for the underlying type
16579         better and perform checking etc.
16580
16581         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
16582         of the underlying type.
16583
16584         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
16585         value
16586
16587         * enum.cs (error31): Helper to report error #31.
16588
16589         * cs-parser.jay (enum_declaration): Store location of each member too.
16590
16591         * enum.cs (member_to_location): New hashtable. 
16592
16593         (AddEnumMember): Update location hashtable.
16594
16595         (Emit): Use the location of each member while reporting errors.
16596
16597 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
16598
16599         * cs-parser.jay: A for_initializer if is a
16600         local_variable_declaration really ammount to have an implicit
16601         block with the variable declaration and no initializer for for.
16602
16603         * statement.cs (For.Emit): Cope with null initializers.
16604
16605         This fixes the infinite loop on for initializers.
16606
16607 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
16608
16609         * enum.cs: More cleanup.
16610
16611         * ecore.cs: Remove dead code.
16612
16613         * class.cs (Property.Emit): More simplification.
16614         (Event.Emit): ditto.
16615
16616         Reworked to have less levels of indentation.
16617
16618 2001-11-08  Ravi Pratap  <ravi@ximian.com>
16619
16620         * class.cs (Property): Emit attributes.
16621
16622         (Field): Ditto.
16623
16624         (Event): Ditto.
16625
16626         (Indexer): Ditto.
16627
16628         (Operator): Ditto.
16629
16630         * enum.cs (Emit): Ditto.
16631
16632         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
16633         Enums too.
16634
16635         * class.cs (Field, Event, etc.): Move attribute generation into the
16636         Emit method everywhere.
16637
16638         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
16639         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
16640         as we had no way of defining nested enums !
16641
16642         * rootcontext.cs : Adjust code accordingly.
16643
16644         * typemanager.cs (AddEnumType): To keep track of enum types separately.
16645
16646 2001-11-07  Ravi Pratap  <ravi@ximian.com>
16647
16648         * expression.cs (EvalConstantExpression): Move into ecore.cs
16649
16650         * enum.cs (Enum): Rename some members and make them public and readonly
16651         according to our convention.
16652
16653         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
16654         nothing else.
16655
16656         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
16657
16658         (Enum::Emit): Write a simple version for now which doesn't try to compute
16659         expressions. I shall modify this to be more robust in just a while.
16660
16661         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
16662
16663         (TypeContainer::CloseType): Create the Enum types too.
16664
16665         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
16666
16667         * expression.cs (EvalConstantExpression): Get rid of completely.
16668
16669         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
16670         user-defined values and other cases.
16671
16672         (IsValidEnumLiteral): Helper function.
16673
16674         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
16675         out there in the case we had a literal FieldExpr.
16676
16677         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
16678
16679         (Literalize): Revamp a bit to take two arguments.
16680
16681         (EnumLiteral): New class which derives from Literal to wrap enum literals.
16682
16683 2001-11-06  Ravi Pratap  <ravi@ximian.com>
16684
16685         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
16686
16687         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
16688
16689         (Resolve): Use the above to ensure we have proper initializers.
16690
16691 2001-11-05  Ravi Pratap  <ravi@ximian.com>
16692
16693         * expression.cs (Expression::EvalConstantExpression): New method to 
16694         evaluate constant expressions.
16695
16696         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
16697
16698 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
16699
16700         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
16701         in an array.
16702
16703         (Binary.ResolveOperator): Handle operator != (object a, object b)
16704         and operator == (object a, object b);
16705
16706         (Binary.DoNumericPromotions): Indicate whether the numeric
16707         promotion was possible.
16708
16709         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
16710         Implement.  
16711
16712         Made the ArrayAccess implement interface IAssignMethod instead of
16713         IStackStore as the order in which arguments are passed reflects
16714         this.
16715
16716         * assign.cs: Instead of using expr.ExprClass to select the way of
16717         assinging, probe for the IStackStore/IAssignMethod interfaces.
16718
16719         * typemanager.cs: Load InitializeArray definition.
16720
16721         * rootcontext.cs (RootContext.MakeStaticData): Used to define
16722         static data that can be used to initialize arrays. 
16723
16724 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
16725
16726         * expression.cs: Handle operator== and operator!= for booleans.
16727
16728         (Conditioal.Reduce): Implement reducer for the ?: operator.
16729
16730         (Conditional.Resolve): Implement dead code elimination.
16731
16732         (Binary.Resolve): Catch string literals and return a new
16733         concatenated string.
16734
16735         (Unary.Reduce): Implement reduction of unary expressions.
16736
16737         * ecore.cs: Split out the expression core handling here.
16738
16739         (Expression.Reduce): New method used to perform constant folding
16740         and CSE.  This is needed to support constant-expressions. 
16741
16742         * statement.cs (Statement.EmitBoolExpression): Pass true and false
16743         targets, and optimize for !x.
16744
16745 2001-11-04  Ravi Pratap  <ravi@ximian.com>
16746
16747         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
16748         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
16749         set custom atttributes.
16750
16751         * literal.cs (Literal::GetValue): New abstract method to return the actual
16752         value of the literal, cast as an object.
16753
16754         (*Literal): Implement GetValue method.
16755
16756         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
16757         expressions to the arraylist but objects of type Argument.
16758
16759         * class.cs (TypeContainer::Emit): Emit our attributes too.
16760
16761         (Method::Emit, Constructor::Emit): Ditto.
16762
16763         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
16764         to be ignoring earlier.
16765
16766 2001-11-03  Ravi Pratap  <ravi@ximian.com>
16767
16768         * attribute.cs (AttributeSection::Define): Implement to do the business
16769         of constructing a CustomAttributeBuilder.
16770
16771         (Attribute): New trivial class. Increases readability of code.  
16772
16773         * cs-parser.jay : Update accordingly.
16774
16775         (positional_argument_list, named_argument_list, named_argument): New rules
16776
16777         (attribute_arguments): Use the above so that we are more correct.
16778
16779 2001-11-02  Ravi Pratap  <ravi@ximian.com>
16780
16781         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
16782         to perform all checks for a method with a params parameter.
16783
16784         (Invocation::OverloadResolve): Update to use the above method and therefore
16785         cope correctly with params method invocations.
16786
16787         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
16788         params too.
16789
16790         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
16791         constructors in our parent too because we can't afford to miss out on 
16792         protected ones ;-)
16793
16794         * attribute.cs (AttributeSection): New name for the class Attribute
16795
16796         Other trivial changes to improve readability.
16797
16798         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
16799         use the new class names.
16800
16801 2001-11-01  Ravi Pratap  <ravi@ximian.com>
16802
16803         * class.cs (Method::Define): Complete definition for params types too
16804
16805         (Indexer::Define): Ditto.
16806
16807         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
16808         Cope everywhere with a request for info about the array parameter.
16809
16810 2001-11-01  Ravi Pratap  <ravi@ximian.com>
16811
16812         * tree.cs (RecordNamespace): Fix up to check for the correct key.
16813
16814         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
16815         local_variable_type to extract the string corresponding to the type.
16816
16817         (local_variable_type): Fixup the action to use the new helper method.
16818
16819         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
16820         go.
16821
16822         * expression.cs : Clean out code which uses the above.
16823
16824 2001-10-31  Ravi Pratap  <ravi@ximian.com>
16825
16826         * typemanager.cs (RegisterMethod): Check if we already have an existing key
16827         and bale out if necessary by returning a false.
16828
16829         (RegisterProperty): Ditto.
16830
16831         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
16832         and print out appropriate error messages.
16833
16834         * interface.cs (everywhere): Ditto.
16835
16836         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
16837         location to constructor.
16838
16839         * class.cs (Property, Event, Indexer): Update accordingly.
16840
16841         * ../errors/cs111.cs : Added.
16842
16843         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
16844         of a method, as laid down by the spec.
16845
16846         (Invocation::OverloadResolve): Use the above method.
16847
16848 2001-10-31  Ravi Pratap  <ravi@ximian.com>
16849
16850         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
16851         now take a TypeContainer and a Parameters object.
16852
16853         (ParameterData): Modify return type of ParameterModifier method to be 
16854         Parameter.Modifier and not a string.
16855
16856         (ReflectionParameters, InternalParameters): Update accordingly.
16857
16858         * expression.cs (Argument::GetParameterModifier): Same here.
16859
16860         * support.cs (InternalParameters::ParameterType): Find a better way of determining
16861         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
16862         symbol in it at all so maybe this is only for now.
16863
16864 2001-10-30  Ravi Pratap  <ravi@ximian.com>
16865
16866         * support.cs (InternalParameters): Constructor now takes an extra argument 
16867         which is the actual Parameters class.
16868
16869         (ParameterDesc): Update to provide info on ref/out modifiers.
16870
16871         * class.cs (everywhere): Update call to InternalParameters to pass in
16872         the second argument too.
16873
16874         * support.cs (ParameterData): Add ParameterModifier, which is a method 
16875         to return the modifier info [ref/out etc]
16876
16877         (InternalParameters, ReflectionParameters): Implement the above.
16878
16879         * expression.cs (Argument::ParameterModifier): Similar function to return
16880         info about the argument's modifiers.
16881
16882         (Invocation::OverloadResolve): Update to take into account matching modifiers 
16883         too.
16884
16885         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
16886         a new SetFormalParameters object which we pass to InternalParameters.
16887
16888 2001-10-30  Ravi Pratap  <ravi@ximian.com>
16889
16890         * expression.cs (NewArray): Merge into the ArrayCreation class.
16891
16892 2001-10-29  Ravi Pratap  <ravi@ximian.com>
16893
16894         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
16895         NewUserdefinedArray into one as there wasn't much of a use in having
16896         two separate ones.
16897
16898         * expression.cs (Argument): Change field's name to ArgType from Type.
16899
16900         (Type): New readonly property which returns the proper type, taking into 
16901         account ref/out modifiers.
16902
16903         (everywhere): Adjust code accordingly for the above.
16904
16905         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
16906         whether we are emitting for a ref or out parameter.
16907
16908         * expression.cs (Argument::Emit): Use the above field to set the state.
16909
16910         (LocalVariableReference::Emit): Update to honour the flag and emit the
16911         right stuff.
16912
16913         * parameter.cs (Attributes): Set the correct flags for ref parameters.
16914
16915         * expression.cs (Argument::FullDesc): New function to provide a full desc.
16916
16917         * support.cs (ParameterData): Add method ParameterDesc to the interface.
16918
16919         (ReflectionParameters, InternalParameters): Implement the above method.
16920
16921         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
16922         reporting errors.
16923
16924         (Invocation::FullMethodDesc): Ditto. 
16925
16926 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
16927
16928         * cs-parser.jay: Add extra production for the second form of array
16929         creation. 
16930
16931         * expression.cs (ArrayCreation): Update to reflect the above
16932         change. 
16933
16934         * Small changes to prepare for Array initialization.
16935
16936 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
16937
16938         * typemanager.cs (ImplementsInterface): interface might be null;
16939         Deal with this problem;
16940
16941         Also, we do store negative hits on the cache (null values), so use
16942         this instead of calling t.GetInterfaces on the type everytime.
16943
16944 2001-10-28  Ravi Pratap  <ravi@ximian.com>
16945
16946         * typemanager.cs (IsBuiltinType): New method to help determine the same.
16947
16948         * expression.cs (New::DoResolve): Get rid of array creation code and instead
16949         split functionality out into different classes.
16950
16951         (New::FormArrayType): Move into NewBuiltinArray.
16952
16953         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
16954         quite useless.
16955
16956         (NewBuiltinArray): New class to handle creation of built-in arrays.
16957
16958         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
16959         account creation of one-dimensional arrays.
16960
16961         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
16962
16963         (NewUserdefinedArray::DoResolve): Implement.
16964
16965         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
16966
16967         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
16968         we maintain inside the TypeManager. This is necessary to perform lookups on the
16969         module builder.
16970
16971         (LookupType): Update to perform GetType on the module builders too.     
16972
16973         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
16974
16975         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
16976
16977 2001-10-23  Ravi Pratap  <ravi@ximian.com>
16978
16979         * expression.cs (New::DoResolve): Implement guts of array creation.
16980
16981         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
16982
16983 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
16984
16985         * expression.cs: Fix bug I introduced lsat night that broke
16986         Delegates. 
16987
16988         (Expression.Resolve): Report a 246 error (can not resolve name)
16989         if we find a SimpleName in the stream.
16990
16991         (Expression.ResolveLValue): Ditto.
16992
16993         (Expression.ResolveWithSimpleName): This function is a variant of
16994         ResolveName, this one allows SimpleNames to be returned without a
16995         warning.  The only consumer of SimpleNames is MemberAccess
16996
16997 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
16998
16999         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
17000         might arrive here.  I have my doubts that this is correct.
17001
17002         * statement.cs (Lock): Implement lock statement.
17003
17004         * cs-parser.jay: Small fixes to support `lock' and `using'
17005
17006         * cs-tokenizer.cs: Remove extra space
17007
17008         * driver.cs: New flag --checked, allows to turn on integer math
17009         checking. 
17010
17011         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
17012         Threading.Monitor.Exit 
17013
17014 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
17015
17016         * expression.cs (IndexerAccess::DoResolveLValue): Set the
17017         Expression Class to be IndexerAccess.
17018
17019         Notice that Indexer::DoResolve sets the eclass to Value.
17020
17021 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
17022
17023         * class.cs (TypeContainer::Emit): Emit code for indexers.
17024
17025         * assign.cs (IAssignMethod): New interface implemented by Indexers
17026         and Properties for handling assignment.
17027
17028         (Assign::Emit): Simplify and reuse code. 
17029
17030         * expression.cs (IndexerAccess, PropertyExpr): Implement
17031         IAssignMethod, clean up old code. 
17032
17033 2001-10-22  Ravi Pratap  <ravi@ximian.com>
17034
17035         * typemanager.cs (ImplementsInterface): New method to determine if a type
17036         implements a given interface. Provides a nice cache too.
17037
17038         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
17039         method.
17040
17041         (ConvertReferenceExplicit): Ditto.
17042
17043         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
17044         various methods, with correct names etc.
17045
17046         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
17047         Operator.UnaryNegation.
17048
17049         * cs-parser.jay (operator_declarator): Be a little clever in the case where
17050         we have a unary plus or minus operator.
17051
17052         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
17053         UnaryMinus.
17054
17055         * everywhere : update accordingly.
17056
17057         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
17058         respectively.
17059
17060         * class.cs (Method::Define): For the case where we are implementing a method
17061         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
17062         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
17063
17064 2001-10-21  Ravi Pratap  <ravi@ximian.com>
17065
17066         * interface.cs (FindMembers): Implement to work around S.R.E
17067         lameness.
17068
17069         * typemanager.cs (IsInterfaceType): Implement.
17070
17071         (FindMembers): Update to handle interface types too.
17072
17073         * expression.cs (ImplicitReferenceConversion): Re-write bits which
17074         use IsAssignableFrom as that is not correct - it doesn't work.
17075
17076         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
17077         and accordingly override EmitStatement.
17078
17079         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
17080         using the correct logic :-)
17081
17082 2001-10-19  Ravi Pratap  <ravi@ximian.com>
17083
17084         * ../errors/cs-11.cs : Add to demonstrate error -11 
17085
17086 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
17087
17088         * assign.cs (Assign::Resolve): Resolve right hand side first, and
17089         then pass this as a hint to ResolveLValue.
17090
17091         * expression.cs (FieldExpr): Add Location information
17092
17093         (FieldExpr::LValueResolve): Report assignment to readonly
17094         variable. 
17095
17096         (Expression::ExprClassFromMemberInfo): Pass location information.
17097
17098         (Expression::ResolveLValue): Add new method that resolves an
17099         LValue. 
17100
17101         (Expression::DoResolveLValue): Default invocation calls
17102         DoResolve. 
17103
17104         (Indexers): New class used to keep track of indexers in a given
17105         Type. 
17106
17107         (IStackStore): Renamed from LValue, as it did not really describe
17108         what this did.  Also ResolveLValue is gone from this interface and
17109         now is part of Expression.
17110
17111         (ElementAccess): Depending on the element access type
17112
17113         * typemanager.cs: Add `indexer_name_type' as a Core type
17114         (System.Runtime.CompilerServices.IndexerNameAttribute)
17115
17116         * statement.cs (Goto): Take a location.
17117
17118 2001-10-18  Ravi Pratap  <ravi@ximian.com>
17119
17120         * delegate.cs (Delegate::VerifyDelegate): New method to verify
17121         if two delegates are compatible.
17122
17123         (NewDelegate::DoResolve): Update to take care of the case when
17124         we instantiate a delegate from another delegate.
17125
17126         * typemanager.cs (FindMembers): Don't even try to look up members
17127         of Delegate types for now.
17128
17129 2001-10-18  Ravi Pratap  <ravi@ximian.com>
17130
17131         * delegate.cs (NewDelegate): New class to take care of delegate
17132         instantiation.
17133
17134         * expression.cs (New): Split the delegate related code out into 
17135         the NewDelegate class.
17136
17137         * delegate.cs (DelegateInvocation): New class to handle delegate 
17138         invocation.
17139
17140         * expression.cs (Invocation): Split out delegate related code into
17141         the DelegateInvocation class.
17142
17143 2001-10-17  Ravi Pratap  <ravi@ximian.com>
17144
17145         * expression.cs (New::DoResolve): Implement delegate creation fully
17146         and according to the spec.
17147
17148         (New::DoEmit): Update to handle delegates differently.
17149
17150         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
17151         because of which we were printing out arguments in reverse order !
17152
17153         * delegate.cs (VerifyMethod): Implement to check if the given method
17154         matches the delegate.
17155
17156         (FullDelegateDesc): Implement.
17157
17158         (VerifyApplicability): Implement.
17159
17160         * expression.cs (Invocation::DoResolve): Update to accordingly handle
17161         delegate invocations too.
17162
17163         (Invocation::Emit): Ditto.
17164
17165         * ../errors/cs1593.cs : Added.
17166
17167         * ../errors/cs1594.cs : Added.
17168
17169         * delegate.cs (InstanceExpression, TargetMethod): New properties.
17170
17171 2001-10-16  Ravi Pratap  <ravi@ximian.com>
17172
17173         * typemanager.cs (intptr_type): Core type for System.IntPtr
17174
17175         (InitCoreTypes): Update for the same.
17176
17177         (iasyncresult_type, asynccallback_type): Ditto.
17178
17179         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
17180         correct.
17181
17182         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
17183         too.
17184
17185         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
17186         the builders for the 4 members of a delegate type :-)
17187
17188         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
17189         type.
17190
17191         * expression.cs (New::DoResolve): Implement guts for delegate creation.
17192
17193         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
17194
17195 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
17196
17197         * statement.cs (Break::Emit): Implement.   
17198         (Continue::Emit): Implement.
17199
17200         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
17201         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
17202         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
17203         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
17204         end loop
17205
17206         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
17207         properties that track the label for the current loop (begin of the
17208         loop and end of the loop).
17209
17210 2001-10-15  Ravi Pratap  <ravi@ximian.com>
17211
17212         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
17213         use of emitting anything at all.
17214
17215         * class.cs, rootcontext.cs : Get rid of calls to the same.
17216
17217         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
17218
17219         (Populate): Define the constructor correctly and set the implementation
17220         attributes.
17221
17222         * typemanager.cs (delegate_types): New hashtable to hold delegates that
17223         have been defined.
17224
17225         (AddDelegateType): Implement.
17226
17227         (IsDelegateType): Implement helper method.
17228
17229         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
17230
17231         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
17232         and accordingly handle it.
17233
17234         * delegate.cs (Populate): Take TypeContainer argument.
17235         Implement bits to define the Invoke method. However, I still haven't figured out
17236         how to take care of the native int bit :-(
17237
17238         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
17239         Qualify the name of the delegate, not its return type !
17240
17241         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
17242         conversion.
17243
17244         (StandardConversionExists): Checking for array types turns out to be recursive.
17245
17246         (ConvertReferenceExplicit): Implement array conversion.
17247
17248         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
17249
17250 2001-10-12  Ravi Pratap  <ravi@ximian.com>
17251
17252         * cs-parser.jay (delegate_declaration): Store the fully qualified
17253         name as it is a type declaration.
17254
17255         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
17256         readonly.
17257
17258         (DefineDelegate): Renamed from Define. Does the same thing essentially,
17259         as TypeContainer::DefineType.
17260
17261         (Populate): Method in which all the definition of the various methods (Invoke)
17262         etc is done.
17263
17264         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
17265         see.
17266
17267         (CloseDelegate): Finally creates the delegate.
17268
17269         * class.cs (TypeContainer::DefineType): Update to define delegates.
17270         (Populate, Emit and CloseType): Do the same thing here too.
17271
17272         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
17273         delegates in all these operations.
17274
17275 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
17276
17277         * expression.cs: LocalTemporary: a new expression used to
17278         reference a temporary that has been created.
17279
17280         * assign.cs: Handle PropertyAccess back here, so that we can
17281         provide the proper semantic access to properties.
17282
17283         * expression.cs (Expression::ConvertReferenceExplicit): Implement
17284         a few more explicit conversions. 
17285
17286         * modifiers.cs: `NEW' modifier maps to HideBySig.
17287
17288         * expression.cs (PropertyExpr): Make this into an
17289         ExpressionStatement, and support the EmitStatement code path. 
17290
17291         Perform get/set error checking, clean up the interface.
17292
17293         * assign.cs: recognize PropertyExprs as targets, and if so, turn
17294         them into toplevel access objects.
17295
17296 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
17297
17298         * expression.cs: PropertyExpr::PropertyExpr: use work around the
17299         SRE.
17300
17301         * typemanager.cs: Keep track here of our PropertyBuilders again to
17302         work around lameness in SRE.
17303
17304 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
17305
17306         * expression.cs (LValue::LValueResolve): New method in the
17307         interface, used to perform a second resolution pass for LValues. 
17308
17309         (This::DoResolve): Catch the use of this in static methods.
17310
17311         (This::LValueResolve): Implement.
17312
17313         (This::Store): Remove warning, assigning to `this' in structures
17314         is 
17315
17316         (Invocation::Emit): Deal with invocation of
17317         methods on value types.  We need to pass the address to structure
17318         methods rather than the object itself.  (The equivalent code to
17319         emit "this" for structures leaves the entire structure on the
17320         stack instead of a pointer to it). 
17321
17322         (ParameterReference::DoResolve): Compute the real index for the
17323         argument based on whether the method takes or not a `this' pointer
17324         (ie, the method is static).
17325
17326         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
17327         value types returned from functions when we need to invoke a
17328         method on the sturcture.
17329
17330
17331 2001-10-11  Ravi Pratap  <ravi@ximian.com>
17332
17333         * class.cs (TypeContainer::DefineType): Method to actually do the business of
17334         defining the type in the Modulebuilder or Typebuilder. This is to take
17335         care of nested types which need to be defined on the TypeBuilder using
17336         DefineNestedMethod.
17337
17338         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
17339         methods in RootContext, only ported to be part of TypeContainer.
17340
17341         (TypeContainer::GetInterfaceOrClass): Ditto.
17342
17343         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
17344
17345         * interface.cs (Interface::DefineInterface): New method. Does exactly
17346         what RootContext.CreateInterface did earlier, only it takes care of nested types 
17347         too.
17348
17349         (Interface::GetInterfaces): Move from RootContext here and port.
17350
17351         (Interface::GetInterfaceByName): Same here.
17352
17353         * rootcontext.cs (ResolveTree): Re-write.
17354
17355         (PopulateTypes): Re-write.
17356
17357         * class.cs (TypeContainer::Populate): Populate nested types too.
17358         (TypeContainer::Emit): Emit nested members too.
17359
17360         * typemanager.cs (AddUserType): Do not make use of the FullName property,
17361         instead just use the name argument passed in as it is already fully
17362         qualified.
17363
17364         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
17365         to TypeContainer mapping to see if a type is user-defined.
17366
17367         * class.cs (TypeContainer::CloseType): Implement. 
17368
17369         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
17370         the default constructor.
17371
17372         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
17373         twice.
17374
17375         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
17376
17377         * interface.cs (CloseType): Create the type here.
17378
17379         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
17380         the hierarchy.
17381
17382         Remove all the methods which are now in TypeContainer.
17383
17384 2001-10-10  Ravi Pratap  <ravi@ximian.com>
17385
17386         * delegate.cs (Define): Re-write bits to define the delegate
17387         correctly.
17388
17389 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
17390
17391         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
17392
17393         * expression.cs (ImplicitReferenceConversion): handle null as well
17394         as a source to convert to any reference type.
17395
17396         * statement.cs (Return): Perform any implicit conversions to
17397         expected return type.  
17398
17399         Validate use of return statement.  
17400
17401         * codegen.cs (EmitContext): Pass the expected return type here.
17402
17403         * class.cs (Method, Constructor, Property): Pass expected return
17404         type to EmitContext.
17405
17406 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
17407
17408         * expression.cs: Make DoResolve take an EmitContext instead of a
17409         TypeContainer.
17410
17411         Replaced `l' and `location' for `loc', for consistency.
17412
17413         (Error, Warning): Remove unneeded Tc argument.
17414
17415         * assign.cs, literal.cs, constant.cs: Update to new calling
17416         convention. 
17417
17418         * codegen.cs: EmitContext now contains a flag indicating whether
17419         code is being generated in a static method or not.
17420
17421         * cs-parser.jay: DecomposeQI, new function that replaces the old
17422         QualifiedIdentifier.  Now we always decompose the assembled
17423         strings from qualified_identifier productions into a group of
17424         memberaccesses.
17425
17426 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
17427
17428         * rootcontext.cs: Deal with field-less struct types correctly now
17429         by passing the size option to Define Type.
17430
17431         * class.cs: Removed hack that created one static field. 
17432
17433 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
17434
17435         * statement.cs: Moved most of the code generation here. 
17436
17437 2001-10-09  Ravi Pratap  <ravi@ximian.com>
17438
17439         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
17440         seem very right.
17441
17442         (ElementAccess): Remove useless bits for now - keep checks as the spec
17443         says.
17444
17445 2001-10-08  Ravi Pratap  <ravi@ximian.com>
17446
17447         * expression.cs (ElementAccess::DoResolve): Remove my crap code
17448         and start performing checks according to the spec.
17449
17450 2001-10-07  Ravi Pratap  <ravi@ximian.com>
17451
17452         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
17453         rank_specifiers instead.
17454
17455         (rank_specifiers): Change the order in which the rank specifiers are stored
17456
17457         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
17458
17459         * expression.cs (ElementAccess): Implement the LValue interface too.
17460
17461 2001-10-06  Ravi Pratap  <ravi@ximian.com>
17462
17463         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
17464         except that user defined conversions are not included.
17465
17466         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
17467         perform the conversion of the return type, if necessary.
17468
17469         (New::DoResolve): Check whether we are creating an array or an object
17470         and accordingly do the needful.
17471
17472         (New::Emit): Same here.
17473
17474         (New::DoResolve): Implement guts of array creation.
17475
17476         (New::FormLookupType): Helper function.
17477
17478 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
17479
17480         * codegen.cs: Removed most of the code generation here, and move the
17481         corresponding code generation bits to the statement classes. 
17482
17483         Added support for try/catch/finalize and throw.
17484
17485         * cs-parser.jay: Added support for try/catch/finalize.
17486
17487         * class.cs: Catch static methods having the flags override,
17488         virtual or abstract.
17489
17490         * expression.cs (UserCast): This user cast was not really doing
17491         what it was supposed to do.  Which is to be born in fully resolved
17492         state.  Parts of the resolution were being performed at Emit time! 
17493
17494         Fixed this code.
17495
17496 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
17497
17498         * expression.cs: Implicity convert the result from UserCast.
17499
17500 2001-10-05  Ravi Pratap  <ravi@ximian.com>
17501
17502         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
17503         prevented it from working correctly. 
17504
17505         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
17506         merely ConvertImplicit.
17507
17508 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
17509
17510         * typemanager.cs: Make the LookupTypeContainer function static,
17511         and not per-instance.  
17512
17513         * class.cs: Make static FindMembers (the one that takes a Type
17514         argument). 
17515
17516         * codegen.cs: Add EmitForeach here.
17517
17518         * cs-parser.jay: Make foreach a toplevel object instead of the
17519         inline expansion, as we need to perform semantic analysis on it. 
17520
17521 2001-10-05  Ravi Pratap  <ravi@ximian.com>
17522
17523         * expression.cs (Expression::ImplicitUserConversion): Rename to
17524         UserDefinedConversion.
17525
17526         (Expression::UserDefinedConversion): Take an extra argument specifying 
17527         whether we look for explicit user conversions too.
17528
17529         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
17530
17531         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
17532
17533         (ExplicitUserConversion): Make it a call to UserDefinedConversion
17534         with the appropriate arguments.
17535
17536         * cs-parser.jay (cast_expression): Record location too.
17537
17538         * expression.cs (Cast): Record location info.
17539
17540         (Expression::ConvertExplicit): Take location argument.
17541
17542         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
17543         to determine if we are doing explicit conversions.
17544
17545         (UserCast::Emit): Update accordingly.
17546
17547         (Expression::ConvertExplicit): Report an error if everything fails.
17548
17549         * ../errors/cs0030.cs : Add.
17550
17551 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
17552
17553         * modifiers.cs: If the ABSTRACT keyword is present, also set the
17554         virtual and newslot bits. 
17555
17556         * class.cs (TypeContainer::RegisterRequiredImplementations):
17557         Record methods we need.
17558
17559         (TypeContainer::MakeKey): Helper function to make keys for
17560         MethodBases, since the Methodbase key is useless.
17561
17562         (TypeContainer::Populate): Call RegisterRequiredImplementations
17563         before defining the methods.   
17564
17565         Create a mapping for method_builders_to_methods ahead of time
17566         instead of inside a tight loop.
17567
17568         (::RequireMethods):  Accept an object as the data to set into the
17569         hashtable so we can report interface vs abstract method mismatch.
17570
17571 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
17572
17573         * report.cs: Make all of it static.
17574
17575         * rootcontext.cs: Drop object_type and value_type computations, as
17576         we have those in the TypeManager anyways.
17577
17578         Drop report instance variable too, now it is a global.
17579
17580         * driver.cs: Use try/catch on command line handling.
17581
17582         Add --probe option to debug the error reporting system with a test
17583         suite. 
17584
17585         * report.cs: Add support for exiting program when a probe
17586         condition is reached.
17587
17588 2001-10-03  Ravi Pratap  <ravi@ximian.com>
17589
17590         * expression.cs (Binary::DoNumericPromotions): Fix the case when
17591         we do a forcible conversion regardless of type, to check if 
17592         ForceConversion returns a null.
17593
17594         (Binary::error19): Use location to report error.
17595
17596         (Unary::error23): Use location here too.
17597
17598         * ../errors/cs0019.cs : Check in.
17599
17600         * ../errors/cs0023.cs : Check in.
17601
17602         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
17603         case of a non-null MethodInfo object with a length of 0 !
17604
17605         (Binary::ResolveOperator): Flag error if overload resolution fails to find
17606         an applicable member - according to the spec :-)
17607         Also fix logic to find members in base types.
17608
17609         (Unary::ResolveOperator): Same here.
17610
17611         (Unary::report23): Change name to error23 and make first argument a TypeContainer
17612         as I was getting thoroughly confused between this and error19 :-)
17613
17614         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
17615         (::FindMostEncompassedType): Implement.
17616         (::FindMostEncompassingType): Implement.
17617         (::StandardConversionExists): Implement.
17618
17619         (UserImplicitCast): Re-vamp. We now need info about most specific
17620         source and target types so that we can do the necessary conversions.
17621
17622         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
17623         mathematical union with no duplicates.
17624
17625 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
17626
17627         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
17628         in order from base classes to child classes, so that we can in
17629         child classes look up in our parent for method names and
17630         attributes (required for handling abstract, virtual, new, override
17631         constructs: we need to instrospect our base class, and if we dont
17632         populate the classes in order, the introspection might be
17633         incorrect.  For example, a method could query its parent before
17634         the parent has any methods and would determine that the parent has
17635         no abstract methods (while it could have had them)).
17636
17637         (RootContext::CreateType): Record the order in which we define the
17638         classes.
17639
17640 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
17641
17642         * class.cs (TypeContainer::Populate): Also method definitions can
17643         fail now, keep track of this.
17644
17645         (TypeContainer::FindMembers): Implement support for
17646         DeclaredOnly/noDeclaredOnly flag.
17647
17648         (Constructor::Emit) Return the ConstructorBuilder.
17649
17650         (Method::Emit) Return the MethodBuilder. 
17651         Check for abstract or virtual methods to be public.
17652
17653         * rootcontext.cs (RootContext::CreateType): Register all the
17654         abstract methods required for the class to be complete and the
17655         interface methods that must be implemented. 
17656
17657         * cs-parser.jay: Report error 501 (method requires body if it is
17658         not marked abstract or extern).
17659
17660         * expression.cs (TypeOf::Emit): Implement.
17661
17662         * typemanager.cs: runtime_handle_type, new global type.
17663
17664         * class.cs (Property::Emit): Generate code for properties.
17665
17666 2001-10-02  Ravi Pratap  <ravi@ximian.com>
17667
17668         * expression.cs (Unary::ResolveOperator): Find operators on base type
17669         too - we now conform exactly to the spec.
17670
17671         (Binary::ResolveOperator): Same here.
17672
17673         * class.cs (Operator::Define): Fix minor quirk in the tests.
17674
17675         * ../errors/cs0215.cs : Added.
17676
17677         * ../errors/cs0556.cs : Added.
17678
17679         * ../errors/cs0555.cs : Added.
17680
17681 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
17682
17683         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
17684         single integer which is really efficient
17685
17686 2001-10-01  Ravi Pratap  <ravi@ximian.com>
17687
17688         *  expression.cs (Expression::ImplicitUserConversion): Use location
17689         even in the case when we are examining True operators.
17690  
17691         * class.cs (Operator::Define): Perform extensive checks to conform
17692         with the rules for operator overloading in the spec.
17693
17694         * expression.cs (Expression::ImplicitReferenceConversion): Implement
17695         some of the other conversions mentioned in the spec.
17696
17697         * typemanager.cs (array_type): New static member for the System.Array built-in
17698         type.
17699
17700         (cloneable_interface): For System.ICloneable interface.
17701
17702         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
17703         we start resolving the tree and populating types.
17704
17705         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
17706  
17707 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
17708
17709         * expression.cs (Expression::ExprClassFromMemberInfo,
17710         Expression::Literalize): Create literal expressions from
17711         FieldInfos which are literals.
17712
17713         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
17714         type casts, because they were wrong.  The test suite in tests
17715         caught these ones.
17716
17717         (ImplicitNumericConversion): ushort to ulong requires a widening
17718         cast. 
17719
17720         Int32 constant to long requires widening cast as well.
17721
17722         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
17723         for integers because the type on the stack is not i4.
17724
17725 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
17726
17727         * expression.cs (report118): require location argument. 
17728
17729         * parameter.cs: Do not dereference potential null value.
17730
17731         * class.cs: Catch methods that lack the `new' keyword when
17732         overriding a name.  Report warnings when `new' is used without
17733         anything being there to override.
17734
17735         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
17736
17737         * class.cs: Only add constructor to hashtable if it is non-null
17738         (as now constructors can fail on define).
17739
17740         (TypeManager, Class, Struct): Take location arguments.
17741
17742         Catch field instance initialization in structs as errors.
17743
17744         accepting_filter: a new filter for FindMembers that is static so
17745         that we dont create an instance per invocation.
17746
17747         (Constructor::Define): Catch errors where a struct constructor is
17748         parameterless 
17749
17750         * cs-parser.jay: Pass location information for various new
17751         constructs. 
17752
17753         * delegate.cs (Delegate): take a location argument.
17754
17755         * driver.cs: Do not call EmitCode if there were problesm in the
17756         Definition of the types, as many Builders wont be there. 
17757
17758         * decl.cs (Decl::Decl): Require a location argument.
17759
17760         * cs-tokenizer.cs: Handle properly hex constants that can not fit
17761         into integers, and find the most appropiate integer for it.
17762
17763         * literal.cs: Implement ULongLiteral.
17764
17765         * rootcontext.cs: Provide better information about the location of
17766         failure when CreateType fails.
17767
17768 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
17769
17770         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
17771         as well.
17772
17773         * expression.cs (Binary::CheckShiftArguments): Add missing type
17774         computation.
17775         (Binary::ResolveOperator): Add type to the logical and and logical
17776         or, Bitwise And/Or and Exclusive Or code paths, it was missing
17777         before.
17778
17779         (Binary::DoNumericPromotions): In the case where either argument
17780         is ulong (and most signed types combined with ulong cause an
17781         error) perform implicit integer constant conversions as well.
17782
17783 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
17784
17785         * expression.cs (UserImplicitCast): Method should always be
17786         non-null. 
17787         (Invocation::BetterConversion): Simplified test for IntLiteral.
17788
17789         (Expression::ImplicitNumericConversion): Split this routine out.
17790         Put the code that performs implicit constant integer conversions
17791         here. 
17792
17793         (Expression::Resolve): Become a wrapper around DoResolve so we can
17794         check eclass and type being set after resolve.
17795
17796         (Invocation::Badness): Remove this dead function
17797
17798         (Binary::ResolveOperator): Do not compute the expensive argumnets
17799         unless we have a union for it.
17800
17801         (Probe::Emit): Is needs to do an isinst and then
17802         compare against null.
17803
17804         (::CanConvert): Added Location argument.  If the Location argument
17805         is null (Location.Null), then we do not report errors.  This is
17806         used by the `probe' mechanism of the Explicit conversion.  We do
17807         not want to generate an error for something that the user
17808         explicitly requested to be casted.  But the pipeline for an
17809         explicit cast first tests for potential implicit casts.
17810
17811         So for now, if the Location is null, it means `Probe only' to
17812         avoid adding another argument.   Might have to revise this
17813         strategy later.
17814
17815         (ClassCast): New class used to type cast objects into arbitrary
17816         classes (used in Explicit Reference Conversions).
17817
17818         Implement `as' as well.
17819
17820         Reverted all the patches from Ravi below: they were broken:
17821
17822                 * The use of `level' as a mechanism to stop recursive
17823                   invocations is wrong.  That was there just to catch the
17824                   bug with a strack trace but not as a way of addressing
17825                   the problem.
17826
17827                   To fix the problem we have to *understand* what is going
17828                   on and the interactions and come up with a plan, not
17829                   just get things going.
17830
17831                 * The use of the type conversion cache that I proposed
17832                   last night had an open topic: How does this work across
17833                   protection domains.  A user defined conversion might not
17834                   be public in the location where we are applying the
17835                   conversion, a different conversion might be selected
17836                   (ie, private A->B (better) but public B->A (worse),
17837                   inside A, A->B applies, but outside it, B->A will
17838                   apply).
17839
17840                 * On top of that (ie, even if the above is solved),
17841                   conversions in a cache need to be abstract.  Ie, `To
17842                   convert from an Int to a Short use an OpcodeCast', not
17843                   `To convert from an Int to a Short use the OpcodeCast on
17844                   the variable 5' (which is what this patch was doing).
17845
17846 2001-09-28  Ravi Pratap  <ravi@ximian.com>
17847
17848         * expression.cs (Invocation::ConversionExists): Re-write to use
17849         the conversion cache
17850
17851         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
17852         cache all conversions done, not just user-defined ones.
17853
17854         (Invocation::BetterConversion): The real culprit. Use ConversionExists
17855         to determine if a conversion exists instead of acutually trying to 
17856         perform the conversion. It's faster too.
17857
17858         (Expression::ConvertExplicit): Modify to use ConversionExists to check
17859         and only then attempt the implicit conversion.
17860
17861 2001-09-28  Ravi Pratap  <ravi@ximian.com>
17862
17863         * expression.cs (ConvertImplicit): Use a cache for conversions
17864         already found. Check level of recursion and bail out if necessary.
17865
17866 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
17867
17868         * typemanager.cs (string_concat_string_string, string_concat_object_object):
17869         Export standard methods that we expect for string operations.
17870
17871         * statement.cs (Block::UsageWarning): Track usage of variables and
17872         report the errors for not used variables.
17873
17874         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
17875         operator. 
17876
17877 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
17878
17879         * codegen.cs: remove unnneded code 
17880
17881         * expression.cs: Removed BuiltinTypeAccess class
17882
17883         Fix the order in which implicit conversions are
17884         done.  
17885
17886         The previous fixed dropped support for boxed conversions (adding a
17887         test to the test suite now)
17888
17889         (UserImplicitCast::CanConvert): Remove test for source being null,
17890         that code is broken.  We should not feed a null to begin with, if
17891         we do, then we should track the bug where the problem originates
17892         and not try to cover it up here.
17893
17894         Return a resolved expression of type UserImplicitCast on success
17895         rather than true/false.  Ravi: this is what I was talking about,
17896         the pattern is to use a static method as a "constructor" for
17897         objects. 
17898
17899         Also, do not create arguments until the very last minute,
17900         otherwise we always create the arguments even for lookups that
17901         will never be performed. 
17902
17903         (UserImplicitCast::Resolve): Eliminate, objects of type
17904         UserImplicitCast are born in a fully resolved state. 
17905
17906         * typemanager.cs (InitCoreTypes): Init also value_type
17907         (System.ValueType). 
17908
17909         * expression.cs (Cast::Resolve): First resolve the child expression.
17910
17911         (LValue): Add new method AddressOf to be used by
17912         the `&' operator.  
17913
17914         Change the argument of Store to take an EmitContext instead of an
17915         ILGenerator, because things like FieldExpr need to be able to call
17916         their children expression to generate the instance code. 
17917
17918         (Expression::Error, Expression::Warning): Sugar functions for
17919         reporting errors.
17920
17921         (Expression::MemberLookup): Accept a TypeContainer instead of a
17922         Report as the first argument.
17923
17924         (Expression::ResolvePrimary): Killed.  I still want to improve
17925         this as currently the code is just not right.
17926
17927         (Expression::ResolveMemberAccess): Simplify, but it is still
17928         wrong. 
17929
17930         (Unary::Resolve): Catch errors in AddressOf operators.
17931
17932         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
17933         index to a byte for the short-version, or the compiler will choose
17934         the wrong Emit call, which generates the wrong data.
17935
17936         (ParameterReference::Emit, ::Store): same.
17937
17938         (FieldExpr::AddressOf): Implement.
17939
17940         * typemanager.cs: TypeManager: made public variable instead of
17941         property.
17942
17943         * driver.cs: document --fatal.
17944
17945         * report.cs (ErrorMessage, WarningMessage): new names for the old
17946         Error and Warning classes.
17947
17948         * cs-parser.jay (member_access): Turn built-in access to types
17949         into a normal simplename
17950
17951 2001-09-27  Ravi Pratap  <ravi@ximian.com>
17952
17953         * expression.cs (Invocation::BetterConversion): Fix to cope
17954         with q being null, since this was introducing a bug.
17955
17956         * expression.cs (ConvertImplicit): Do built-in conversions first.
17957
17958 2001-09-27  Ravi Pratap  <ravi@ximian.com>
17959
17960         * expression.cs (UserImplicitCast::Resolve): Fix bug.
17961
17962 2001-09-27  Ravi Pratap  <ravi@ximian.com>
17963
17964         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
17965         I had introduced long ago (what's new ?).
17966
17967         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
17968         the work of all the checking. 
17969         (ConvertImplicit): Call CanConvert and only then create object if necessary.
17970         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
17971
17972         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
17973         that is the right way. 
17974
17975         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
17976         overloading resolution. Use everywhere instead of cutting and pasting code.
17977
17978         (Binary::ResolveOperator): Use MakeUnionSet.
17979
17980         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
17981         we have to convert to bool types. Not complete yet.
17982
17983 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
17984
17985         * typemanager.cs (TypeManager::CSharpName): support ushort.
17986
17987         * expression.cs (Expression::TryImplicitIntConversion): Attempts
17988         to provide an expression that performsn an implicit constant int
17989         conversion (section 6.1.6).
17990         (Expression::ConvertImplicitRequired): Reworked to include
17991         implicit constant expression conversions.
17992
17993         (Expression::ConvertNumericExplicit): Finished.
17994
17995         (Invocation::Emit): If InstanceExpression is null, then it means
17996         that we perform a call on this.
17997
17998 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
17999
18000         * expression.cs (Unary::Emit): Remove some dead code.
18001         (Probe): Implement Resolve and Emit for `is'.
18002         (Expression::ConvertImplicitRequired): Attempt to do constant
18003         expression conversions here.  Maybe should be moved to
18004         ConvertImplicit, but I am not sure.
18005         (Expression::ImplicitLongConstantConversionPossible,
18006         Expression::ImplicitIntConstantConversionPossible): New functions
18007         that tell whether is it possible to apply an implicit constant
18008         expression conversion.
18009
18010         (ConvertNumericExplicit): Started work on explicit numeric
18011         conversions.
18012
18013         * cs-parser.jay: Update operator constants.
18014
18015         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
18016         (Parameters::GetSignature): Hook up VerifyArgs here.
18017         (Parameters::VerifyArgs): Verifies that no two arguments have the
18018         same name. 
18019
18020         * class.cs (Operator): Update the operator names to reflect the
18021         ones that the spec expects (as we are just stringizing the
18022         operator names).
18023
18024         * expression.cs (Unary::ResolveOperator): Fix bug: Use
18025         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
18026         previous usage did only work for our methods.
18027         (Expression::ConvertImplicit): Handle decimal implicit numeric
18028         conversions as well.
18029         (Expression::InternalTypeConstructor): Used to invoke constructors
18030         on internal types for default promotions.
18031
18032         (Unary::Emit): Implement special handling for the pre/post
18033         increment/decrement for overloaded operators, as they need to have
18034         the same semantics as the other operators.
18035
18036         (Binary::ResolveOperator): ditto.
18037         (Invocation::ConversionExists): ditto.
18038         (UserImplicitCast::Resolve): ditto.
18039
18040 2001-09-26  Ravi Pratap  <ravi@ximian.com>
18041
18042         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
18043         operator, return after emitting body. Regression tests pass again !
18044
18045         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
18046         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
18047         (Invocation::OverloadResolve): Ditto.
18048         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
18049
18050         * everywhere : update calls to the above methods accordingly.
18051
18052 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
18053
18054         * assign.cs (Assign): Make it inherit from ExpressionStatement.
18055
18056         * expression.cs (ExpressionStatement): New base class used for
18057         expressions that can appear in statements, so that we can provide
18058         an alternate path to generate expression that do not leave a value
18059         on the stack.
18060
18061         (Expression::Emit, and all the derivatives): We no longer return
18062         whether a value is left on the stack or not.  Every expression
18063         after being emitted leaves a single value on the stack.
18064
18065         * codegen.cs (EmitContext::EmitStatementExpression): Use the
18066         facilties of ExpressionStatement if possible.
18067
18068         * cs-parser.jay: Update statement_expression.
18069
18070 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
18071
18072         * driver.cs: Change the wording of message
18073
18074 2001-09-25  Ravi Pratap  <ravi@ximian.com>
18075
18076         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
18077         the type of the expression to the return type of the method if
18078         we have an overloaded operator match ! The regression tests pass again !
18079         (Unary::ResolveOperator): Ditto.
18080
18081         * expression.cs (Invocation::ConversionExists): Correct the member lookup
18082         to find "op_Implicit", not "implicit" ;-)
18083         (UserImplicitCast): New class to take care of user-defined implicit conversions.
18084         (ConvertImplicit, ForceConversion): Take TypeContainer argument
18085
18086         * everywhere : Correct calls to the above accordingly.
18087
18088         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
18089         (ConvertImplicit): Do user-defined conversion if it exists.
18090
18091 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
18092
18093         * assign.cs: track location.
18094         (Resolve): Use implicit conversions on assignment.
18095
18096         * literal.cs: Oops.  Not good, Emit of short access values should
18097         pass (Bytes) or the wrong argument will be selected.
18098
18099         * expression.cs (Unary::Emit): Emit code for -expr.
18100
18101         (Unary::ResolveOperator): Handle `Substract' for non-constants
18102         (substract from zero from the non-constants).
18103         Deal with Doubles as well. 
18104
18105         (Expression::ConvertImplicitRequired): New routine that reports an
18106         error if no implicit conversion exists. 
18107
18108         (Invocation::OverloadResolve): Store the converted implicit
18109         expressions if we make them
18110
18111 2001-09-24  Ravi Pratap  <ravi@ximian.com>
18112
18113         * class.cs (ConstructorInitializer): Take a Location argument.
18114         (ConstructorBaseInitializer): Same here.
18115         (ConstructorThisInitializer): Same here.
18116
18117         * cs-parser.jay : Update all calls accordingly.
18118
18119         * expression.cs (Unary, Binary, New): Take location argument.
18120         Update accordingly everywhere.
18121
18122         * cs-parser.jay : Update all calls to the above to take a location
18123         argument.
18124
18125         * class.cs : Ditto.
18126
18127 2001-09-24  Ravi Pratap  <ravi@ximian.com>
18128
18129         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
18130         (Invocation::BetterConversion): Same here
18131         (Invocation::ConversionExists): Ditto.
18132
18133         (Invocation::ConversionExists): Implement.
18134
18135 2001-09-22  Ravi Pratap  <ravi@ximian.com>
18136
18137         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
18138         Also take an additional TypeContainer argument.
18139
18140         * All over : Pass in TypeContainer as argument to OverloadResolve.
18141
18142         * typemanager.cs (CSharpName): Update to check for the string type and return
18143         that too.
18144
18145         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
18146         a given method.
18147
18148 2001-09-21  Ravi Pratap  <ravi@ximian.com>
18149
18150         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
18151         (Invocation::BetterFunction): Implement.
18152         (Invocation::BetterConversion): Implement.
18153         (Invocation::ConversionExists): Skeleton, no implementation yet.
18154
18155         Okay, things work fine !
18156
18157 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
18158
18159         * typemanager.cs: declare and load enum_type, delegate_type and
18160         void_type. 
18161
18162         * expression.cs (Expression::Emit): Now emit returns a value that
18163         tells whether a value is left on the stack or not.  This strategy
18164         might be reveted tomorrow with a mechanism that would address
18165         multiple assignments.
18166         (Expression::report118): Utility routine to report mismatches on
18167         the ExprClass.
18168
18169         (Unary::Report23): Report impossible type/operator combination
18170         utility function.
18171
18172         (Unary::IsIncrementableNumber): Whether the type can be
18173         incremented or decremented with add.
18174         (Unary::ResolveOperator): Also allow enumerations to be bitwise
18175         complemented. 
18176         (Unary::ResolveOperator): Implement ++, !, ~,
18177
18178         (Invocation::Emit): Deal with new Emit convetion.
18179
18180         * All Expression derivatives: Updated their Emit method to return
18181         whether they leave values on the stack or not.
18182
18183         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
18184         stack for expressions that are statements. 
18185
18186 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
18187
18188         * expression.cs (LValue): New interface.  Must be implemented by
18189         LValue objects.
18190         (LocalVariableReference, ParameterReference, FieldExpr): Implement
18191         LValue interface.
18192
18193         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
18194         interface for generating code, simplifies the code.
18195
18196 2001-09-20  Ravi Pratap  <ravi@ximian.com>
18197
18198         * expression.cs (everywhere): Comment out return statements in ::Resolve
18199         methods to avoid the warnings.
18200
18201 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
18202
18203         * driver.cs (parse): Report error 2001 if we can not open the
18204         source file.
18205
18206         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
18207         not resolve it.
18208
18209         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
18210         object. 
18211
18212         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
18213         otherwise nested blocks end up with the same index.
18214
18215         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
18216
18217         * expression.cs:  Instead of having FIXMEs in the Resolve
18218         functions, throw exceptions so it is obvious that we are facing a
18219         bug. 
18220
18221         * cs-parser.jay (invocation_expression): Pass Location information.
18222
18223         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
18224         Use a basename for those routines because .NET does not like paths
18225         on them. 
18226
18227         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
18228         already defined.
18229
18230 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
18231
18232         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
18233         are loading the correct data types (throws an exception if not).
18234         (TypeManager::InitCoreTypes): Use CoreLookupType
18235
18236         * expression.cs (Unary::ResolveOperator): return the child
18237         expression for expressions which are just +expr.
18238         (Unary::ResolveOperator): Return negative literals for -LITERAL
18239         expressions (otherwise they are Unary {Literal}).
18240         (Invocation::Badness): Take into account `Implicit constant
18241         expression conversions'.
18242
18243         * literal.cs (LongLiteral): Implement long literal class.
18244         (IntLiteral): export the `Value' of the intliteral. 
18245
18246 2001-09-19  Ravi Pratap  <ravi@ximian.com>
18247
18248         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
18249
18250         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
18251         instead of 'Operator'
18252
18253         * expression.cs (Binary::ResolveOperator): Update accordingly.
18254         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
18255         and 'Minus'
18256
18257         * cs-parser.jay (unary_expression): Update to use the new names.
18258
18259         * gen-treedump.cs (GetUnary): Same here.
18260
18261         * expression.cs (Unary::Resolve): Implement.
18262         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
18263         operators are found instead of making noise ;-)
18264         (Unary::ResolveOperator): New method to do precisely the same thing which
18265         Binary::ResolveOperator does for Binary expressions.
18266         (Unary.method, .Arguments): Add.
18267         (Unary::OperName): Implement.   
18268         (Unary::ForceConversion): Copy and Paste !
18269
18270         * class.cs (Operator::Define): Fix a small bug for the case when we have 
18271         a unary operator.
18272
18273         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
18274         for the inbuilt operators. Only overloading works for now ;-)
18275
18276 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
18277
18278         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
18279         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
18280
18281         * expression.cs (This::Emit): Implement. 
18282         (This::Resolve): Implement.
18283         (TypeOf:Resolve): Implement.
18284         (Expression::ResolveSimpleName): Add an implicit this to instance
18285         field references. 
18286         (MemberAccess::Resolve): Deal with Parameters and Fields. 
18287         Bind instance variable to Field expressions.
18288         (FieldExpr::Instance): New field used to track the expression that
18289         represents the object instance.
18290         (FieldExpr::Resolve): Track potential errors from MemberLookup not
18291         binding 
18292         (FieldExpr::Emit): Implement.
18293
18294         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
18295         the last instruction contains a return opcode to avoid generating
18296         the last `ret' instruction (this generates correct code, and it is
18297         nice to pass the peverify output).
18298
18299         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
18300         initializer for static and instance variables.
18301         (Constructor::Emit): Allow initializer to be null in the case of
18302         static constructors.  Only emit initializer for instance
18303         constructors. 
18304
18305         (TypeContainer::FindMembers): Return a null array if there are no
18306         matches.
18307
18308         Also fix the code for the MemberTypes.Method branch, as it was not
18309         scanning that for operators (or tried to access null variables before).
18310
18311         * assign.cs (Assign::Emit): Handle instance and static fields. 
18312
18313         * TODO: Updated.
18314
18315         * driver.cs: Stop compilation if there are parse errors.
18316
18317         * cs-parser.jay (constructor_declaration): Provide default base
18318         initializer for non-static constructors.
18319         (constructor_declarator): Do not provide a default base
18320         initializers if none was specified.
18321         Catch the fact that constructors should not have parameters.
18322
18323         * class.cs: Do not emit parent class initializers for static
18324         constructors, that should be flagged as an error.
18325
18326 2001-09-18  Ravi Pratap  <ravi@ximian.com>
18327
18328         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
18329         Move back code into TypeContainer::Populate.
18330
18331 2001-09-18  Ravi Pratap  <ravi@ximian.com>
18332
18333         * class.cs (TypeContainer::AddConstructor): Fix the check to
18334         compare against Name, not Basename. 
18335         (Operator::OpType): Change Plus and Minus to Add and Subtract.
18336
18337         * cs-parser.jay : Update accordingly.
18338
18339         * class.cs (TypeContainer::FindMembers): For the case where we are searching
18340         for methods, don't forget to look into the operators too.
18341         (RegisterMethodBuilder): Helper method to take care of this for
18342         methods, constructors and operators.
18343         (Operator::Define): Completely revamp.
18344         (Operator.OperatorMethod, MethodName): New fields.
18345         (TypeContainer::Populate): Move the registering of builders into
18346         RegisterMethodBuilder.
18347         (Operator::Emit): Re-write.
18348
18349         * expression.cs (Binary::Emit): Comment out code path to emit method
18350         invocation stuff for the case when we have a user defined operator. I am
18351         just not able to get it right !
18352
18353 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
18354
18355         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
18356         argument. 
18357
18358         (Expression::MemberLookup): Provide a version that allows to
18359         specify the MemberTypes and BindingFlags. 
18360
18361         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
18362         so it was not fetching variable information from outer blocks.
18363
18364         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
18365         Beforefieldinit as it was buggy.
18366
18367         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
18368         that Ravi put here.  
18369
18370         * class.cs (Constructor::Emit): Only emit if block is not null.
18371         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
18372         deal with this by semantically definining it as if the user had
18373         done it.
18374
18375         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
18376         constructors as we now "emit" them at a higher level.
18377
18378         (TypeContainer::DefineDefaultConstructor): Used to define the
18379         default constructors if none was provided.
18380
18381         (ConstructorInitializer): Add methods Resolve and Emit. 
18382
18383         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
18384
18385 2001-09-17  Ravi Pratap  <ravi@ximian.com>
18386
18387         * class.cs (TypeContainer::EmitDefaultConstructor): Register
18388         the default constructor builder with our hashtable for methodbuilders
18389         to methodcores.
18390
18391         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
18392         and argument_count is 0 in which case we have a match.
18393         (Binary::ResolveOperator): More null checking and miscellaneous coding
18394         style cleanup.
18395
18396 2001-09-17  Ravi Pratap  <ravi@ximian.com>
18397
18398         * rootcontext.cs (IsNameSpace): Compare against null.
18399
18400         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
18401
18402         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
18403         and Unary::Operator.
18404
18405         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
18406         accordingly.
18407
18408         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
18409         we have overloaded operators.
18410         (Binary::ResolveOperator): Implement the part which does the operator overload
18411         resolution.
18412
18413         * class.cs (Operator::Emit): Implement.
18414         (TypeContainer::Emit): Emit the operators we have too.
18415
18416         * expression.cs (Binary::Emit): Update to emit the appropriate code for
18417         the case when we have a user-defined operator.
18418
18419 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
18420
18421         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
18422
18423 2001-09-16  Ravi Pratap  <ravi@ximian.com>
18424
18425         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
18426         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
18427         (Constructor::Emit): Implement.
18428         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
18429         if we have no work to do. 
18430         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
18431         Emit method.
18432
18433         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
18434         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
18435
18436         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
18437         of parent.parent.
18438
18439 2001-09-15  Ravi Pratap  <ravi@ximian.com>
18440
18441         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
18442         in the source.
18443         (Tree::RecordNamespace): Method to do what the name says ;-)
18444         (Tree::Namespaces): Property to get at the namespaces hashtable.
18445
18446         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
18447         keep track.
18448
18449         * rootcontext.cs (IsNamespace): Fixed it :-)
18450
18451 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
18452
18453         * class.cs (TypeContainer::FindMembers): Add support for
18454         constructors. 
18455         (MethodCore): New class that encapsulates both the shared aspects
18456         of a Constructor and a Method.  
18457         (Method, Constructor): Factored pieces into MethodCore.
18458
18459         * driver.cs: Added --fatal which makes errors throw exceptions.
18460         Load System assembly as well as part of the standard library.
18461
18462         * report.cs: Allow throwing exceptions on errors for debugging.
18463
18464         * modifiers.cs: Do not use `parent', instead use the real type
18465         container to evaluate permission settings.
18466
18467         * class.cs: Put Ravi's patch back in.  He is right, and we will
18468         have to cope with the
18469
18470 2001-09-14  Ravi Pratap  <ravi@ximian.com>
18471
18472         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
18473         FamORAssem, not FamANDAssem.
18474
18475 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
18476
18477         * driver.cs: Added --parse option that only parses its input files
18478         and terminates.
18479
18480         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
18481         incorrect.  IsTopLevel is not used to tell whether an object is
18482         root_types or not (that can be achieved by testing this ==
18483         root_types).  But to see if this is a top-level *class* (not
18484         necessarly our "toplevel" container). 
18485
18486 2001-09-14  Ravi Pratap  <ravi@ximian.com>
18487
18488         * enum.cs (Enum::Define): Modify to call the Lookup method on the
18489         parent instead of a direct call to GetType.
18490
18491 2001-09-14  Ravi Pratap  <ravi@ximian.com>
18492
18493         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
18494         Modifiers.TypeAttr. This should just be a call to that method.
18495
18496         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
18497         object so that we can determine if we are top-level or not.
18498
18499         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
18500         TypeContainer too.
18501
18502         * enum.cs (Enum::Define): Ditto.
18503
18504         * modifiers.cs (FieldAttr): Re-write.
18505
18506         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
18507         (TypeContainer::HaveStaticConstructor): New property to provide access
18508         to precisely that info.
18509
18510         * modifiers.cs (MethodAttr): Re-write.
18511         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
18512
18513         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
18514         of top-level types as claimed.
18515
18516 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
18517
18518         * expression.cs (MemberLookup): Fruitless attempt to lookup
18519         constructors.  Maybe I need to emit default constructors?  That
18520         might be it (currently .NET emits this for me automatically).
18521         (Invocation::OverloadResolve): Cope with Arguments == null.
18522         (Invocation::EmitArguments): new function, shared by the new
18523         constructor and us.
18524         (Invocation::Emit): Handle static and instance methods.  Emit
18525         proper call instruction for virtual or non-virtual invocations.
18526         (New::Emit): Implement.
18527         (New::Resolve): Implement.
18528         (MemberAccess:Resolve): Implement.
18529         (MethodGroupExpr::InstanceExpression): used conforming to the spec
18530         to track instances.
18531         (FieldExpr::Resolve): Set type.
18532
18533         * support.cs: Handle empty arguments.
18534                 
18535         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
18536         SimpleLookup): Auxiliary routines to help parse a qualifier
18537         identifier.  
18538
18539         Update qualifier_identifier rule.
18540
18541         * codegen.cs: Removed debugging messages.
18542
18543         * class.cs: Make this a global thing, this acts just as a "key" to
18544         objects that we might have around.
18545
18546         (Populate): Only initialize method_builders_to_methods once.
18547
18548         * expression.cs (PropertyExpr): Initialize type from the
18549         PropertyType. 
18550
18551         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
18552         Resolve pattern.  Attempt to implicitly convert value to boolean.
18553         Emit code.
18554
18555         * expression.cs: Set the type for the int32/int32 argument case.
18556         (Binary::ResolveOperator): Set the return type to boolean for
18557         comparission operators
18558
18559         * typemanager.cs: Remove debugging print code.
18560
18561         (Invocation::Resolve): resolve type.
18562
18563         * class.cs: Allocate a MemberInfo of the correct size, as the code
18564         elsewhere depends on the test to reflect the correct contents.
18565
18566         (Method::) Keep track of parameters, due to System.Reflection holes
18567
18568         (TypeContainer::Populate): Keep track of MethodBuilders to Method
18569         mapping here.
18570
18571         (TypeContainer::FindMembers): Use ArrayList and then copy an array
18572         of the exact size and return that.
18573
18574         (Class::LookupMethodByBuilder): New function that maps
18575         MethodBuilders to its methods.  Required to locate the information
18576         on methods because System.Reflection bit us again.
18577
18578         * support.cs: New file, contains an interface ParameterData and
18579         two implementations: ReflectionParameters and InternalParameters
18580         used to access Parameter information.  We will need to grow this
18581         as required.
18582
18583         * expression.cs (Invocation::GetParameterData): implement a cache
18584         and a wrapper around the ParameterData creation for methods. 
18585         (Invocation::OverloadResolve): Use new code.
18586
18587 2001-09-13  Ravi Pratap  <ravi@ximian.com>
18588
18589         * class.cs (TypeContainer::EmitField): Remove and move into 
18590         (Field::Define): here and modify accordingly.
18591         (Field.FieldBuilder): New member.
18592         (TypeContainer::Populate): Update accordingly.
18593         (TypeContainer::FindMembers): Implement.
18594
18595 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
18596
18597         * statement.cs: (VariableInfo::VariableType): New field to be
18598         initialized with the full type once it is resolved. 
18599
18600 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
18601
18602         * parameter.cs (GetParameterInfo): Use a type cache to compute
18603         things only once, and to reuse this information
18604
18605         * expression.cs (LocalVariableReference::Emit): Implement.
18606         (OpcodeCast::Emit): fix.
18607
18608         (ParameterReference::Resolve): Implement.
18609         (ParameterReference::Emit): Implement.
18610
18611         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
18612         that are expressions need to stay as Expressions.
18613
18614         * typemanager.cs (CSharpName): Returns the C# name of a type if
18615         possible. 
18616
18617         * expression.cs (Expression::ConvertImplicit): New function that
18618         implements implicit type conversions.
18619
18620         (Expression::ImplicitReferenceConversion): Implements implicit
18621         reference conversions.
18622
18623         (EmptyCast): New type for transparent casts.
18624
18625         (OpcodeCast): New type for casts of types that are performed with
18626         a sequence of bytecodes.
18627
18628         (BoxedCast): New type used for casting value types into reference
18629         types.  Emits a box opcode.
18630
18631         (Binary::DoNumericPromotions): Implements numeric promotions of
18632         and computation of the Binary::Type.
18633
18634         (Binary::EmitBranchable): Optimization.
18635
18636         (Binary::Emit): Implement code emission for expressions.
18637
18638         * typemanager.cs (TypeManager): Added two new core types: sbyte
18639         and byte.
18640
18641 2001-09-12  Ravi Pratap  <ravi@ximian.com>
18642
18643         * class.cs (TypeContainer::FindMembers): Method which does exactly
18644         what Type.FindMembers does, only we don't have to use reflection. No
18645         implementation yet.
18646
18647         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
18648         typecontainer objects as we need to get at them.
18649         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
18650
18651         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
18652         typecontainer object.
18653
18654         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
18655         of just a Report object.
18656
18657 2001-09-11  Ravi Pratap  <ravi@ximian.com>
18658
18659         * class.cs (Event::Define): Go back to using the prefixes "add_" and
18660         "remove_"
18661         (TypeContainer::Populate): Now define the delegates of the type too.
18662         (TypeContainer.Delegates): Property to access the list of delegates defined
18663         in the type.
18664
18665         * delegates.cs (Delegate::Define): Implement partially.
18666
18667         * modifiers.cs (TypeAttr): Handle more flags.
18668
18669 2001-09-11  Ravi Pratap  <ravi@ximian.com>
18670
18671         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
18672         and not <=
18673         (Operator::Define): Re-write logic to get types by using the LookupType method
18674         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
18675         (Indexer::Define): Ditto.
18676         (Event::Define): Ditto.
18677         (Property::Define): Ditto.
18678
18679 2001-09-10  Ravi Pratap  <ravi@ximian.com>
18680
18681         * class.cs (TypeContainer::Populate): Now define operators too. 
18682         (TypeContainer.Operators): New property to access the list of operators
18683         in a type.
18684         (Operator.OperatorMethodBuilder): New member to hold the method builder
18685         for the operator we are defining.
18686         (Operator::Define): Implement.
18687
18688 2001-09-10  Ravi Pratap  <ravi@ximian.com>
18689
18690         * class.cs (Event::Define): Make the prefixes of the accessor methods
18691         addOn_ and removeOn_ 
18692
18693         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
18694         of the location being passed in too. Ideally, this should go later since all
18695         error reporting should be done through the Report object.
18696
18697         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
18698         (Populate): Iterate thru the indexers we have and define them too.
18699         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
18700         for the get and set accessors.
18701         (Indexer::Define): Implement.
18702
18703 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
18704
18705         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
18706         my previous implementation, did not work.
18707
18708         * typemanager.cs: Add a couple of missing types (the longs).
18709
18710         * literal.cs: Use TypeManager.bool_type instead of getting it.
18711
18712         * expression.cs (EventExpr): New kind of expressions.
18713         (Expressio::ExprClassFromMemberInfo): finish
18714
18715 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
18716
18717         * assign.cs: Emit stores to static fields differently.
18718
18719 2001-09-08  Ravi Pratap  <ravi@ximian.com>
18720
18721         * Merge in changes and adjust code to tackle conflicts. Backed out my
18722         code in Assign::Resolve ;-) 
18723
18724 2001-09-08  Ravi Pratap  <ravi@ximian.com>
18725
18726         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
18727         instead Report.Error and also pass in the location.
18728         (CSharpParser::Lexer): New readonly property to return the reference
18729         to the Tokenizer object.
18730         (declare_local_variables): Use Report.Error with location instead of plain 
18731         old error.
18732         (CheckDef): Ditto.
18733
18734         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
18735         (Operator.CheckBinaryOperator): Ditto.
18736
18737         * cs-parser.jay (operator_declarator): Update accordingly.
18738
18739         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
18740         (CheckBinaryOperator): Same here.
18741
18742         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
18743         on the name without any prefixes of namespace names etc. This is because we
18744         already might have something already fully qualified like 
18745         'System.Console.WriteLine'
18746
18747         * assign.cs (Resolve): Begin implementation. Stuck ;-)
18748
18749 2001-09-07  Ravi Pratap  <ravi@ximian.com>
18750
18751         * cs-tokenizer.cs (location): Return a string which also contains
18752         the file name.
18753
18754         * expression.cs (ElementAccess): New class for expressions of the
18755         type 'element access.'
18756         (BaseAccess): New class for expressions of the type 'base access.'
18757         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
18758         respectively.
18759
18760         * cs-parser.jay (element_access): Implement action.
18761         (base_access): Implement actions.
18762         (checked_expression, unchecked_expression): Implement.
18763
18764         * cs-parser.jay (local_variable_type): Correct and implement.
18765         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
18766
18767         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
18768
18769         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
18770         name and the specifiers.
18771
18772         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
18773
18774         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
18775         making them all public ;-)
18776
18777         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
18778         class anyways.
18779
18780 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
18781
18782         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
18783         PropertyExprs.
18784         (FieldExpr, PropertyExprs): New resolved expressions.
18785         (SimpleName::MemberStaticCheck): Perform static checks for access
18786         to non-static fields on static methods. Maybe this should be
18787         generalized for MemberAccesses. 
18788         (SimpleName::ResolveSimpleName): More work on simple name
18789         resolution. 
18790
18791         * cs-parser.jay (primary_expression/qualified_identifier): track
18792         the parameter index.
18793
18794         * codegen.cs (CodeGen::Save): Catch save exception, report error.
18795         (EmitContext::EmitBoolExpression): Chain to expression generation
18796         instead of temporary hack.
18797         (::EmitStatementExpression): Put generic expression code generation.
18798
18799         * assign.cs (Assign::Emit): Implement variable assignments to
18800         local variables, parameters and fields.
18801
18802 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
18803
18804         * statement.cs (Block::GetVariableInfo): New method, returns the
18805         VariableInfo for a variable name in a block.
18806         (Block::GetVariableType): Implement in terms of GetVariableInfo
18807
18808         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
18809         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
18810
18811 2001-09-06  Ravi Pratap  <ravi@ximian.com>
18812
18813         * cs-parser.jay (operator_declaration): Continue on my quest : update
18814         to take attributes argument.
18815         (event_declaration): Ditto.
18816         (enum_declaration): Ditto.
18817         (indexer_declaration): Ditto.
18818
18819         * class.cs (Operator::Operator): Update constructor accordingly.
18820         (Event::Event): Ditto.
18821
18822         * delegate.cs (Delegate::Delegate): Same here.
18823
18824         * enum.cs (Enum::Enum): Same here.
18825
18826 2001-09-05  Ravi Pratap  <ravi@ximian.com>
18827
18828         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
18829
18830         * ../tests/cs0658.cs : New file to demonstrate error 0658.
18831
18832         * attribute.cs (Attributes): New class to encapsulate all attributes which were
18833         being passed around as an arraylist.
18834         (Attributes::AddAttribute): Method to add attribute sections.
18835
18836         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
18837         (struct_declaration): Update accordingly.
18838         (constant_declaration): Update.
18839         (field_declaration): Update.
18840         (method_header): Update.
18841         (fixed_parameter): Update.
18842         (parameter_array): Ditto.
18843         (property_declaration): Ditto.
18844         (destructor_declaration): Ditto.
18845
18846         * class.cs (Struct::Struct): Update constructors accordingly.
18847         (Class::Class): Ditto.
18848         (Field::Field): Ditto.
18849         (Method::Method): Ditto.
18850         (Property::Property): Ditto.
18851         (TypeContainer::OptAttribute): update property's return type.
18852
18853         * interface.cs (Interface.opt_attributes): New member.
18854         (Interface::Interface): Update to take the extra Attributes argument.
18855
18856         * parameter.cs (Parameter::Parameter): Ditto.
18857
18858         * constant.cs (Constant::Constant): Ditto.
18859
18860         * interface.cs (InterfaceMemberBase): New OptAttributes field.
18861         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
18862         the attributes as a parameter.
18863         (InterfaceProperty): Update constructor call.
18864         (InterfaceEvent): Ditto.
18865         (InterfaceMethod): Ditto.
18866         (InterfaceIndexer): Ditto.
18867
18868         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
18869         pass the attributes too.
18870         (interface_event_declaration): Ditto.
18871         (interface_property_declaration): Ditto.
18872         (interface_method_declaration): Ditto.
18873         (interface_declaration): Ditto.
18874
18875 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
18876
18877         * class.cs (Method::Define): Track the "static Main" definition to
18878         create an entry point. 
18879
18880         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
18881         EntryPoint if we find it. 
18882
18883         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
18884         (EmitContext::ig): Make this variable public.
18885
18886         * driver.cs: Make the default output file be the first file name
18887         with the .exe extension.  
18888
18889         Detect empty compilations
18890
18891         Handle various kinds of output targets.  Handle --target and
18892         rename -t to --dumper.
18893
18894         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
18895         methods inherited from Expression return now an Expression.  This
18896         will is used during the tree rewriting as we resolve them during
18897         semantic analysis.
18898
18899         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
18900         the spec.  Missing entirely is the information about
18901         accessability of elements of it.
18902
18903         (Expression::ExprClassFromMemberInfo): New constructor for
18904         Expressions that creates a fully initialized Expression based on
18905         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
18906         a Type.
18907
18908         (Invocation::Resolve): Begin implementing resolution of invocations.
18909
18910         * literal.cs (StringLiteral):  Implement Emit.
18911
18912 2001-09-05  Ravi Pratap  <ravi@ximian.com>
18913
18914         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
18915         member.
18916
18917 2001-09-04  Ravi Pratap  <ravi@ximian.com>
18918
18919         * cs-parser.jay (attribute_arguments): Implement actions.
18920         (attribute): Fix bug in production. Implement action.
18921         (attribute_list): Implement.
18922         (attribute_target): Implement.
18923         (attribute_target_specifier, opt_target_specifier): Implement
18924         (CheckAttributeTarget): New method to check if the attribute target
18925         is valid.
18926         (attribute_section): Implement.
18927         (opt_attributes): Implement.
18928
18929         * attribute.cs : New file to handle attributes.
18930         (Attribute): Class to hold attribute info.
18931
18932         * cs-parser.jay (opt_attribute_target_specifier): Remove production
18933         (attribute_section): Modify production to use 2 different rules to 
18934         achieve the same thing. 1 s/r conflict down !
18935         Clean out commented, useless, non-reducing dimension_separator rules.
18936
18937         * class.cs (TypeContainer.attributes): New member to hold list
18938         of attributes for a type.
18939         (Struct::Struct): Modify to take one more argument, the attribute list.
18940         (Class::Class): Ditto.
18941         (Field::Field): Ditto.
18942         (Method::Method): Ditto.
18943         (Property::Property): Ditto.
18944
18945         * cs-parser.jay (struct_declaration): Update constructor call to
18946         pass in the attributes too.
18947         (class_declaration): Ditto.
18948         (constant_declaration): Ditto.
18949         (field_declaration): Ditto.
18950         (method_header): Ditto.
18951         (fixed_parameter): Ditto.
18952         (parameter_array): Ditto.
18953         (property_declaration): Ditto.
18954
18955         * constant.cs (Constant::Constant): Update constructor similarly.
18956         Use System.Collections.
18957
18958         * parameter.cs (Parameter::Parameter): Update as above.
18959
18960 2001-09-02  Ravi Pratap  <ravi@ximian.com>
18961
18962         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
18963         (TypeContainer.delegates): New member to hold list of delegates.
18964
18965         * cs-parser.jay (delegate_declaration): Implement the action correctly 
18966         this time as I seem to be on crack ;-)
18967
18968 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
18969
18970         * rootcontext.cs (RootContext::IsNamespace): new function, used to
18971         tell whether an identifier represents a namespace.
18972
18973         * expression.cs (NamespaceExpr): A namespace expression, used only
18974         temporarly during expression resolution.
18975         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
18976         utility functions to resolve names on expressions.
18977
18978 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
18979
18980         * codegen.cs: Add hook for StatementExpressions. 
18981
18982         * class.cs: Fix inverted test for static flag in methods.
18983
18984 2001-09-02  Ravi Pratap  <ravi@ximian.com>
18985
18986         * class.cs (Operator::CheckUnaryOperator): Correct error number used
18987         to make it coincide with MS' number.
18988         (Operator::CheckBinaryOperator): Ditto.
18989
18990         * ../errors/errors.txt : Remove error numbers added earlier.
18991
18992         * ../errors/cs1019.cs : Test case for error # 1019
18993
18994         * ../errros/cs1020.cs : Test case for error # 1020
18995
18996         * cs-parser.jay : Clean out commented cruft.
18997         (dimension_separators, dimension_separator): Comment out. Ostensibly not
18998         used anywhere - non-reducing rule.
18999         (namespace_declarations): Non-reducing rule - comment out.
19000
19001         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
19002         with TypeContainer::AddEnum.
19003
19004         * delegate.cs : New file for delegate handling classes.
19005         (Delegate): Class for declaring delegates.
19006
19007         * makefile : Update.
19008
19009         * cs-parser.jay (delegate_declaration): Implement.
19010
19011 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
19012
19013         * class.cs (Event::Define): Implement.
19014         (Event.EventBuilder): New member.
19015
19016         * class.cs (TypeContainer::Populate): Update to define all enums and events
19017         we have.
19018         (Events): New property for the events arraylist we hold. Shouldn't we move to using
19019         readonly fields for all these cases ?
19020
19021 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
19022
19023         * class.cs (Property): Revamp to use the convention of making fields readonly.
19024         Accordingly modify code elsewhere.
19025
19026         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
19027         the Define method of the Property class.
19028
19029         * class.cs : Clean up applied patch and update references to variables etc. Fix 
19030         trivial bug.
19031         (TypeContainer::Populate): Update to define all the properties we have. Also
19032         define all enumerations.
19033
19034         * enum.cs (Define): Implement.
19035
19036 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
19037
19038         * cs-parser.jay (overloadable_operator): The semantic value is an
19039         enum of the Operator class.
19040         (operator_declarator): Implement actions.
19041         (operator_declaration): Implement.
19042
19043         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
19044         validity of definitions.
19045         (Operator::CheckBinaryOperator): Static method to check for binary operators
19046         (TypeContainer::AddOperator): New method to add an operator to a type.
19047
19048         * cs-parser.jay (indexer_declaration): Added line to actually call the
19049         AddIndexer method so it gets added ;-)
19050
19051         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
19052         already taken care of by the MS compiler ?  
19053
19054 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
19055
19056         * class.cs (Operator): New class for operator declarations.
19057         (Operator::OpType): Enum for the various operators.
19058
19059 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
19060
19061         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
19062         ostensibly handle this in semantic analysis.
19063
19064         * cs-parser.jay (general_catch_clause): Comment out
19065         (specific_catch_clauses, specific_catch_clause): Ditto.
19066         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
19067         (catch_args, opt_catch_args): New productions.
19068         (catch_clause): Rewrite to use the new productions above
19069         (catch_clauses): Modify accordingly.
19070         (opt_catch_clauses): New production to use in try_statement
19071         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
19072         and re-write the code in the actions to extract the specific and
19073         general catch clauses by being a little smart ;-)
19074
19075         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
19076         Hooray, try and catch statements parse fine !
19077
19078 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
19079
19080         * statement.cs (Block::GetVariableType): Fix logic to extract the type
19081         string from the hashtable of variables.
19082
19083         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
19084         I end up making that mistake ;-)
19085         (catch_clauses): Fixed gross error which made Key and Value of the 
19086         DictionaryEntry the same : $1 !!
19087
19088 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
19089
19090         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
19091
19092         * cs-parser.jay (event_declaration): Correct to remove the semicolon
19093         when the add and remove accessors are specified. 
19094
19095 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
19096
19097         * cs-parser.jay (IndexerDeclaration): New helper class to hold
19098         information about indexer_declarator.
19099         (indexer_declarator): Implement actions.
19100         (parsing_indexer): New local boolean used to keep track of whether
19101         we are parsing indexers or properties. This is necessary because 
19102         implicit_parameters come into picture even for the get accessor in the 
19103         case of an indexer.
19104         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
19105
19106         * class.cs (Indexer): New class for indexer declarations.
19107         (TypeContainer::AddIndexer): New method to add an indexer to a type.
19108         (TypeContainer::indexers): New member to hold list of indexers for the
19109         type.
19110
19111 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
19112
19113         * cs-parser.jay (add_accessor_declaration): Implement action.
19114         (remove_accessor_declaration): Implement action.
19115         (event_accessors_declaration): Implement
19116         (variable_declarators): swap statements for first rule - trivial.
19117
19118         * class.cs (Event): New class to hold information about event
19119         declarations.
19120         (TypeContainer::AddEvent): New method to add an event to a type
19121         (TypeContainer::events): New member to hold list of events.
19122
19123         * cs-parser.jay (event_declaration): Implement actions.
19124
19125 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
19126
19127         * cs-parser.jay (dim_separators): Implement. Make it a string
19128         concatenating all the commas together, just as they appear.
19129         (opt_dim_separators): Modify accordingly
19130         (rank_specifiers): Update accordingly. Basically do the same
19131         thing - instead, collect the brackets here.
19132         (opt_rank_sepcifiers): Modify accordingly.
19133         (array_type): Modify to actually return the complete type string
19134         instead of ignoring the rank_specifiers.
19135         (expression_list): Implement to collect the expressions
19136         (variable_initializer): Implement. We make it a list of expressions
19137         essentially so that we can handle the array_initializer case neatly too.
19138         (variable_initializer_list): Implement.
19139         (array_initializer): Make it a list of variable_initializers
19140         (opt_array_initializer): Modify accordingly.
19141
19142         * expression.cs (New::NType): Add enumeration to help us
19143         keep track of whether we have an object/delegate creation
19144         or an array creation.
19145         (New:NewType, New::Rank, New::Indices, New::Initializers): New
19146         members to hold data about array creation.
19147         (New:New): Modify to update NewType
19148         (New:New): New Overloaded contructor for the array creation
19149         case.
19150
19151         * cs-parser.jay (array_creation_expression): Implement to call
19152         the overloaded New constructor.
19153
19154 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
19155
19156         * class.cs (TypeContainer::Constructors): Return member
19157         constructors instead of returning null.
19158
19159 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
19160
19161         * typemanager.cs (InitCoreTypes): Initialize the various core
19162         types after we have populated the type manager with the user
19163         defined types (this distinction will be important later while
19164         compiling corlib.dll)
19165
19166         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
19167         on Expression Classification.  Now all expressions have a method
19168         `Resolve' and a method `Emit'.
19169
19170         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
19171         generation from working.     Also add some temporary debugging
19172         code. 
19173
19174 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
19175
19176         * codegen.cs: Lots of code generation pieces.  This is only the
19177         beginning, will continue tomorrow with more touches of polish.  We
19178         handle the fundamentals of if, while, do, for, return.  Others are
19179         trickier and I need to start working on invocations soon.
19180
19181         * gen-treedump.cs: Bug fix, use s.Increment here instead of
19182         s.InitStatement. 
19183
19184         * codegen.cs (EmitContext): New struct, used during code
19185         emission to keep a context.   Most of the code generation will be
19186         here. 
19187
19188         * cs-parser.jay: Add embedded blocks to the list of statements of
19189         this block.  So code generation proceeds in a top down fashion.
19190
19191 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
19192
19193         * statement.cs: Add support for multiple child blocks.
19194
19195 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
19196
19197         * codegen.cs (EmitCode): New function, will emit the code for a
19198         Block of code given a TypeContainer and its ILGenerator. 
19199
19200         * statement.cs (Block): Standard public readonly optimization.
19201         (Block::Block constructors): Link children. 
19202         (Block::Child): Child Linker.
19203         (Block::EmitVariables): Emits IL variable declarations.
19204
19205         * class.cs: Drop support for MethodGroups here, delay until
19206         Semantic Analysis.
19207         (Method::): Applied the same simplification that I did before, and
19208         move from Properties to public readonly fields.
19209         (Method::ParameterTypes): Returns the parameter types for the
19210         function, and implements a cache that will be useful later when I
19211         do error checking and the semantic analysis on the methods is
19212         performed.
19213         (Constructor::GetCallingConvention): Renamed from CallingConvetion
19214         and made a method, optional argument tells whether this is a class
19215         or a structure to apply the `has-this' bit.
19216         (Method::GetCallingConvention): Implement, returns the calling
19217         convention. 
19218         (Method::Define): Defines the type, a second pass is performed
19219         later to populate the methods.
19220
19221         (Constructor::ParameterTypes): implement a cache similar to the
19222         one on Method::ParameterTypes, useful later when we do semantic
19223         analysis. 
19224
19225         (TypeContainer::EmitMethod):  New method.  Emits methods.
19226
19227         * expression.cs: Removed MethodGroup class from here.
19228
19229         * parameter.cs (Parameters::GetCallingConvention): new method.
19230
19231 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
19232
19233         * class.cs (TypeContainer::Populate): Drop RootContext from the
19234         argument. 
19235
19236         (Constructor::CallingConvention): Returns the calling convention.
19237         (Constructor::ParameterTypes): Returns the constructor parameter
19238         types. 
19239
19240         (TypeContainer::AddConstructor): Keep track of default constructor
19241         and the default static constructor.
19242
19243         (Constructor::) Another class that starts using `public readonly'
19244         instead of properties. 
19245
19246         (Constructor::IsDefault): Whether this is a default constructor. 
19247
19248         (Field::) use readonly public fields instead of properties also.
19249
19250         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
19251         track of static constructors;  If none is used, turn on
19252         BeforeFieldInit in the TypeAttributes. 
19253
19254         * cs-parser.jay (opt_argument_list): now the return can be null
19255         for the cases where there are no arguments. 
19256
19257         (constructor_declarator): If there is no implicit `base' or
19258         `this', then invoke the default parent constructor. 
19259
19260         * modifiers.cs (MethodAttr): New static function maps a set of
19261         modifiers flags into a MethodAttributes enum
19262         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
19263         MethodAttr, TypeAttr to represent the various mappings where the
19264         modifiers are used.
19265         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
19266
19267 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
19268
19269         * parameter.cs (GetParameterInfo): Fix bug where there would be no
19270         method arguments.
19271
19272         * interface.cs (PopulateIndexer): Implemented the code generator
19273         for interface indexers.
19274
19275 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
19276
19277         * interface.cs (InterfaceMemberBase): Now we track the new status
19278         here.  
19279
19280         (PopulateProperty): Implement property population.  Woohoo!  Got
19281         Methods and Properties going today. 
19282
19283         Removed all the properties for interfaces, and replaced them with
19284         `public readonly' fields. 
19285
19286 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
19287
19288         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
19289         initialize their hashtables/arraylists only when they are needed
19290         instead of doing this always.
19291
19292         * parameter.cs: Handle refs and out parameters.
19293
19294         * cs-parser.jay: Use an ArrayList to construct the arguments
19295         instead of the ParameterCollection, and then cast that to a
19296         Parameter[] array.
19297
19298         * parameter.cs: Drop the use of ParameterCollection and use
19299         instead arrays of Parameters.
19300
19301         (GetParameterInfo): Use the Type, not the Name when resolving
19302         types. 
19303
19304 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
19305
19306         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
19307         and instead use public readonly fields.
19308
19309         * class.cs: Put back walking code for type containers.
19310
19311 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
19312
19313         * class.cs (MakeConstant): Code to define constants.
19314
19315         * rootcontext.cs (LookupType): New function.  Used to locate types 
19316
19317
19318 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
19319
19320         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
19321         this System.Reflection code is.  Kudos to Microsoft
19322
19323         * typemanager.cs: Implement a type cache and avoid loading all
19324         types at boot time.  Wrap in LookupType the internals.  This made
19325         the compiler so much faster.  Wow.  I rule!
19326
19327         * driver.cs: Make sure we always load mscorlib first (for
19328         debugging purposes, nothing really important).
19329
19330         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
19331         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
19332
19333         * rootcontext.cs: Lookup types on their namespace;  Lookup types
19334         on namespaces that have been imported using the `using' keyword.
19335
19336         * class.cs (TypeContainer::TypeAttr): Virtualize.
19337         (Class::TypeAttr): Return attributes suitable for this bad boy.
19338         (Struct::TypeAttr): ditto.
19339         Handle nested classes.
19340         (TypeContainer::) Remove all the type visiting code, it is now
19341         replaced with the rootcontext.cs code
19342
19343         * rootcontext.cs (GetClassBases): Added support for structs. 
19344
19345 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
19346
19347         * interface.cs, statement.cs, class.cs, parameter.cs,
19348         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
19349         Drop use of TypeRefs, and use strings instead.
19350
19351 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
19352
19353         * rootcontext.cs: 
19354
19355         * class.cs (Struct::Struct): set the SEALED flags after
19356         checking the modifiers.
19357         (TypeContainer::TypeAttr): new property, returns the
19358         TypeAttributes for a class.  
19359
19360         * cs-parser.jay (type_list): Oops, list production was creating a
19361         new list of base types.
19362
19363         * rootcontext.cs (StdLib): New property.
19364         (GetInterfaceTypeByName): returns an interface by type name, and
19365         encapsulates error handling here.
19366         (GetInterfaces): simplified.
19367         (ResolveTree): Encapsulated all the tree resolution here.
19368         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
19369         types. 
19370
19371         * driver.cs: Add support for --nostdlib, to avoid loading the
19372         default assemblies.
19373         (Main): Do not put tree resolution here. 
19374
19375         * rootcontext.cs: Beginning of the class resolution.
19376
19377 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
19378
19379         * rootcontext.cs: Provide better error reporting. 
19380
19381         * cs-parser.jay (interface_base): set our $$ to be interfaces.
19382
19383         * rootcontext.cs (CreateInterface): Handle the case where there
19384         are no parent interfaces.
19385
19386         (CloseTypes): Routine to flush types at the end.
19387         (CreateInterface): Track types.
19388         (GetInterfaces): Returns an array of Types from the list of
19389         defined interfaces.
19390
19391         * typemanager.c (AddUserType): Mechanism to track user types (puts
19392         the type on the global type hash, and allows us to close it at the
19393         end). 
19394
19395 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
19396
19397         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
19398         RecordInterface instead.
19399
19400         * cs-parser.jay: Updated to reflect changes above.
19401
19402         * decl.cs (Definition): Keep track of the TypeBuilder type that
19403         represents this type here.  Not sure we will use it in the long
19404         run, but wont hurt for now.
19405
19406         * driver.cs: Smaller changes to accomodate the new code.
19407
19408         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
19409         when done. 
19410
19411         * rootcontext.cs (CreateInterface):  New method, used to create
19412         the System.TypeBuilder type for interfaces.
19413         (ResolveInterfaces): new entry point to resolve the interface
19414         hierarchy. 
19415         (CodeGen): Property, used to keep track of the code generator.
19416
19417 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
19418
19419         * cs-parser.jay: Add a second production for delegate_declaration
19420         with `VOID'.
19421
19422         (enum_body): Put an opt_comma here instead of putting it on
19423         enum_body or enum_member_declarations so we can handle trailing
19424         commas on enumeration members.  Gets rid of a shift/reduce.
19425
19426         (type_list): Need a COMMA in the middle.
19427
19428         (indexer_declaration): Tell tokenizer to recognize get/set
19429
19430         * Remove old targets.
19431
19432         * Re-add the parser target.
19433
19434 2001-07-13  Simon Cozens <simon@simon-cozens.org>
19435
19436         * cs-parser.jay: Add precendence rules for a number of operators
19437         ot reduce the number of shift/reduce conflicts in the grammar.
19438
19439 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
19440
19441         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
19442         and put it here.
19443
19444         Get rid of old crufty code.
19445
19446         * rootcontext.cs: Use this to keep track of the parsed
19447         representation and the defined types available to the program. 
19448
19449         * gen-treedump.cs: adjust for new convention.
19450
19451         * type.cs: Split out the type manager, and the assembly builder
19452         from here. 
19453
19454         * typemanager.cs: the type manager will live here now.
19455
19456         * cil-codegen.cs: And the code generator here. 
19457
19458 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
19459
19460         * makefile: Fixed up for easy making.
19461
19462 2001-07-13  Simon Cozens <simon@simon-cozens.org>
19463
19464         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
19465         the 
19466
19467         (unary_expression): Expand pre_increment_expression and
19468         post_decrement_expression to reduce a shift/reduce.
19469
19470 2001-07-11  Simon Cozens
19471
19472         * cs-tokenizer.cs: Hex numbers should begin with a 0.
19473
19474         Improve allow_keyword_as_indent name.
19475
19476 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
19477
19478         * Adjustments for Beta2. 
19479
19480 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
19481
19482         * decl.cs: Added `Define' abstract method.
19483         (InTransit): new property, used to catch recursive definitions. 
19484
19485         * interface.cs: Implement `Define'. 
19486
19487         * modifiers.cs: Map Modifiers.constants to
19488         System.Reflection.TypeAttribute flags.
19489
19490         * class.cs: Keep track of types and user-defined types.
19491         (BuilderInit): New method for creating an assembly
19492         (ResolveType): New function to launch the resolution process, only
19493         used by interfaces for now.
19494
19495         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
19496         that are inserted into the name space. 
19497
19498 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
19499
19500         * ARGH.  I have screwed up my tree so many times due to the use of
19501         rsync rather than using CVS.  Going to fix this at once. 
19502
19503         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
19504         load types.
19505
19506 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
19507
19508         * Experiment successful: Use System.Type rather that our own
19509         version of Type.  
19510
19511 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
19512
19513         * cs-parser.jay: Removed nsAliases from here.
19514
19515         Use new namespaces, handle `using XXX;' 
19516
19517         * namespace.cs: Reimplemented namespace handling, use a recursive
19518         definition of the class.  Now we can keep track of using clauses
19519         and catch invalid using clauses.
19520
19521 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
19522
19523         * gen-treedump.cs: Adapted for all the renaming.
19524
19525         * expression.cs (Expression): this class now has a Type property
19526         which returns an expression Type.
19527
19528         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
19529         `Type', as this has a different meaning now in the base
19530
19531 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
19532
19533         * interface.cs, class.cs: Removed from all the sources the
19534         references to signature computation, as we can not do method
19535         signature computation during the parsing time, as we are not
19536         trying to solve at that point distinguishing:
19537
19538         class X {
19539                 void a (Blah x) {}
19540                 void a (NS.Blah x) {}
19541         }
19542
19543         Which depending on the context might be valid or not, as we do not
19544         know if Blah is the same thing as NS.Blah at that point.
19545
19546         * Redid everything so the code uses TypeRefs now instead of
19547         Types.  TypeRefs are just temporary type placeholders, that need
19548         to be resolved.  They initially have a pointer to a string and the
19549         current scope in which they are used.  This is used later by the
19550         compiler to resolve the reference to an actual Type. 
19551
19552         * DeclSpace is no longer a CIR.Type, and neither are
19553         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
19554         are all DeclSpaces, but no Types. 
19555
19556         * type.cs (TypeRefManager): This implements the TypeRef manager,
19557         which keeps track of all the types that need to be resolved after
19558         the parsing has finished. 
19559
19560 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
19561
19562         * ARGH.  We are going to have to store `foreach' as a class rather
19563         than resolving it, as we need to verify error 1579 after name
19564         resolution.   *OR* we could keep a flag that says `This request to
19565         IEnumerator comes from a foreach statement' which we can then use
19566         to generate the error.
19567
19568 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
19569
19570         * class.cs (TypeContainer.AddMethod): we now add methods to the
19571         MethodGroup instead of the method hashtable.  
19572
19573         * expression.cs: Add MethodGroup abstraction, which gets us one
19574         step closer to the specification in the way we handle method
19575         declarations.  
19576
19577         * cs-parser.jay (primary_expression): qualified_identifier now
19578         tried to match up an identifier to a local variable reference or
19579         to a parameter reference.
19580
19581         current_local_parameters is now a parser global variable that
19582         points to the current parameters for the block, used during name
19583         lookup.
19584
19585         (property_declaration): Now creates an implicit `value' argument to
19586         the set accessor.
19587
19588 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
19589
19590         * parameter.cs: Do not use `param' arguments as part of the
19591         signature, per the spec.
19592
19593 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
19594
19595         * decl.cs: Base class for classes, structs and interfaces.  This
19596         is the "Declaration Space" 
19597
19598         * cs-parser.jay: Use CheckDef for checking declaration errors
19599         instead of having one on each function.
19600
19601         * class.cs: Factor out some code for handling error handling in
19602         accordance to the "Declarations" section in the "Basic Concepts"
19603         chapter in the ECMA C# spec.
19604
19605         * interface.cs: Make all interface member classes derive from
19606         InterfaceMemberBase.
19607
19608 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
19609
19610         * Many things: all interfaces are parsed and generated in
19611         gen-treedump.  Support for member variables, constructors,
19612         destructors, properties, constants is there.
19613
19614         Beginning of the IL backend, but very little done, just there for
19615         testing purposes. 
19616
19617 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
19618
19619         * cs-parser.jay: Fix labeled statement.
19620
19621         * cs-tokenizer.cs (escape): Escape " and ' always.
19622         ref_line, ref_name: keep track of the line/filename as instructed
19623         by #line by the compiler.
19624         Parse #line.
19625
19626 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
19627
19628         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
19629         to match the values in System.CodeDOM.
19630
19631         Divid renamed to Divide.
19632
19633         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
19634         statements. 
19635         (Statements.set): remove.
19636
19637         * System.CodeDOM/CodeCatchClause.cs: always have a valid
19638         statements. 
19639
19640         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
19641         falseStatements always have valid values. 
19642
19643         * cs-parser.jay: Use System.CodeDOM now.
19644