remove duplicated -doc line in --help output
[mono.git] / mcs / mcs / ChangeLog
1 2005-02-05  John Luke  <john.luke@gmail.com>
2
3         * driver.cs: remove duplicate -doc line in Usage ()
4
5 2005-02-04  Raja R Harinath  <rharinath@novell.com>
6
7         * location.cs (Location.AddFile): Fix CS2002 error report.
8
9 2005-02-02  Martin Baulig  <martin@ximian.com>
10
11         * delegate.cs (Delegate.DefineType): Report an internal error if
12         TypeManager.multicast_delegate_type is null.  See bug #72015 for
13         details.        
14
15 2005-02-02  Raja R Harinath  <rharinath@novell.com>
16
17         Fix a crasher in a variant of #31984.
18         * const.cs (Constant.CheckBase): New override that defers the
19         new-or-override check in case the base type hasn't been populated
20         yet.
21         (Constant.Define): Ensure the new-or-override check is performed.
22
23 2005-02-01  Duncan Mak  <duncan@ximian.com>
24
25         * const.cs (LookupConstantValue): Check that `ce' is not null
26         before calling GetValue ().
27
28 2005-02-01  Raja R Harinath  <rharinath@novell.com>
29
30         Fix test-334.cs (#69519).
31         * cs-parser.jay (using_alias_directive): Pass in an expression to
32         NamespaceEntry.UsingAlias.
33         (using_namespace_directive): Pass in an expression to
34         NamespaceEntry.Using.
35         (namespace_name): Don't flatten to a string.
36         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
37         (NamespaceEntry.AliasEntry.Resolve): Lookup using
38         ResolveAsTypeStep.
39         (NamespaceEntry.UsingEntry): Likewise.
40         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
41         changes.
42         (NamespaceEntry.LookupForUsing): Remove.
43         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
44         names.
45         (NamespaceEntry.Lookup): Remove support for dotted names.
46
47 2005-02-01  Raja R Harinath  <rharinath@novell.com>
48
49         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
50         split into two.
51         (NamespaceEntry.ImplicitParent): Compute on demand.
52         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
53         parallels the current.
54         (NamespaceEntry.LookupForUsing): Use it.
55         (NamespaceEntry.Lookup): If the current namespace-entry is
56         implicit, don't search aliases and using tables.
57
58 2005-02-01  Raja R Harinath  <rharinath@novell.com>
59
60         Fix #31984.
61         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
62         BaseCache here.
63         (TypeContainer.BaseCache): Compute on demand.
64         (TypeContainer.FindMembers): Define constants and types if they're
65         not already created.
66         (FieldMember.Define): Move resetting of ec.InUnsafe before error
67         check.
68         * const.cs (Constant.Define): Make idempotent.
69
70 2005-01-29  Miguel de Icaza  <miguel@novell.com>
71
72         * pending.cs: Produce better code (no nops produced by using Ldarg
73         + value).
74         
75         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
76         i - 1' it should be arg + 1.
77
78         Fixes bug #71819.
79
80 2005-01-28  Raja R Harinath  <rharinath@novell.com>
81
82         * attribute.cs (Attribute.CheckAttributeType): Make private
83         non-virtual.
84         (Attribute.ResolveType): Make virtual.
85         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
86         handling of RootContext.Tree.Types.
87
88 2005-01-27  Raja R Harinath  <rharinath@novell.com>
89
90         Update attribute-handling to use the SimpleName/MemberAccess
91         mechanisms.
92         * cs-parser.jay (attribute): Pass in an expression to the
93         constructors of Attribute and GlobalAttribute.
94         * attribute.cs (Attribute): Take an expression for the name.
95         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
96         passed in attribute name expression.
97         (Attribute.CheckAttributeType): Use it.
98         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
99         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
100         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
101         argument to prevent error messages if the lookup fails.
102
103 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
104
105         * expression.cs (Indirection): Implemented IVariable interface
106         to support indirection in AddressOf operator.
107         (PointerArithmetic.Emit): Add optimalization for case where
108         result can be precomputed.
109
110 2005-01-26  Martin Baulig  <martin@ximian.com>
111
112         * class.cs (TypeContainer.AttributeTargets): Return the correct
113         AttributeTargets depending on our `Kind' instead of throwing an
114         exception; fixes #71632.
115
116 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
117
118         Fix #71257
119         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
120         constant members.
121
122 2005-01-25  Raja R Harinath  <rharinath@novell.com>
123
124         Fix #71602.
125         * expression.cs (MemberAccess.DoResolve): Don't complain with
126         cs0572 when the LHS of a member access has identical name and type
127         name.
128
129 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
130
131         Fix #71651, #71675
132         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
133         CreatePermission.
134         Create custom PermissionSet only for PermissionSetAttribute.
135
136 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
137
138         Fix #71649
139         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
140         delegates in static class.
141
142 2005-01-24  Martin Baulig  <martin@ximian.com>
143
144         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
145         merging an implicit block, just use its reachability.
146
147         * statement.cs (Block.Resolve): Make the unreachable code check
148         work wrt. implicit blocks; see test-337 from #63842.
149
150 2005-01-21  Alp Toker  <alp@atoker.com>
151  
152         * cs-parser.jay: destructor_declaration's container is PartialContainer
153         not Class when partial types are used, so use Kind prop instead of
154         'is'.
155         
156 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
157
158         * cs-parser.jay: Improve error reporting when an interface
159         declares new types.
160
161 2005-01-20  Dick Porter  <dick@ximian.com>
162
163         * support.cs: SeekableStreamReader fix from Sandor Dobos
164         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
165         chars are read.  Fixes bug 70369.
166
167 2005-01-20  Raja R Harinath  <rharinath@novell.com>
168
169         * cs-parser.jay (catch_clause): Simplify current_block handling
170         somewhat.
171
172 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
173
174         * convert.cs (ImplicitStandardConversionExists): Synchronize the
175         code with ImplicitStandardConversion to handle the implicit
176         conversion of method groups into valid delegate invocations. 
177
178         The problem is that in parameter handling we were using this code
179         path.  Fixes bug #64698
180
181 2005-01-19  Raja R Harinath  <rharinath@novell.com>
182
183         * cs-parser.jay: Fix several infelicities.
184         - Avoid assigning to the parser value stack.  Code like 
185           '$3 = null' is unclean.  Synthesize a value for the code block
186           instead. 
187         - Avoid using oob_stack for storing location information.  Use ...
188         (_mark_): ... this.  New (empty) rule.  Saves the current location
189         in $$.
190         (foreach_statement): Avoid using oob_stack for current_block
191         handling.  Use technique used in for_statement and
192         using_statement.  Synthesize a value for the code block to store
193         additional intermediate information.
194
195 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
196
197         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
198         of a different type is only allowed to private fields of a
199         containing type, not on fields of a base class.
200
201         See test-174.cs and error cs0122-9.cs
202
203 2005-01-13  Raja R Harinath  <rharinath@novell.com>
204
205         Fix test-335.cs (bug #58126).
206         * cs-parser.jay (argument): Split out non-expression parts of the
207         rule into 'non_simple_argument'.
208         (invocation_expression): Support parenthesized invocations with
209         multiple arguments, and with single non-simple arguments.
210
211 2005-01-13  Raja R Harinath  <rharinath@novell.com>
212
213         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
214         places.
215
216 2005-01-12  Raja R Harinath  <rharinath@novell.com>
217
218         Fix cs0038-1.cs, cs1640-6.cs.
219         * ecore.cs (Expression.Resolve): Remove special-case for
220         SimpleName in error-handling.
221         (Expression.almostMatchedMembers): Relax access permission to
222         protected.
223         (Expression.MemberLookupFailed): Handle duplicates in
224         almostMatchedMembers list.
225         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
226         * expression.cs (New.DoResolve): Report CS1540 for more cases.
227         * typemanager.cs (GetFullNameSignature): Use the MethodBase
228         overload if the passed in MemberInfo is a MethodBase.
229
230 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
231
232         Fix #70749
233         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
234         for non-CAS & merge permission sets properly.
235
236 2005-01-11  Raja R Harinath  <rharinath@novell.com>
237
238         Improve standard-compliance of simple name and member access 
239         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
240         * ecore.cs (FullNamedExpression): New abstract base class 
241         for Namespaces and TypeExpressions.
242         (ResolveFlags.SimpleName): Remove.
243         (SimpleName): Remove support for dotted names.
244         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
245         DeclSpace.FindType and DeclSpace.LookupType.
246         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
247         (Expression.ExprClassName): Make member function.
248         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
249         a namespace.  Remove creation of dotted "SimpleName"s.
250         (MemberAccess.DoResolve): Likewise.
251         * decl.cs (DeclSpace.Cache): Make private.
252         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
253         (DeclSpace.FindType): Update.
254         (DeclSpace.LookupType): Move here from RootContext.  Return a 
255         FullNamedExpression.
256         * namespace.cs (Namespace): Derive from FullNamedExpression
257         so that it can be part of expression resolution.
258         (Namespace.Lookup): Return an FullNamedExpression.
259         (NamespaceEntry.LookupAlias): Lookup aliases only in current
260         namespace.
261         * rootcontext.cs (NamespaceLookup): Remove.
262         (LookupType): Move to DeclSpace.
263         * attribute.cs (CheckAttributeType): Update.
264         * doc.cs (FindDocumentedType): Remove allowAlias argument.
265         (FindDocumentedTypeNonArray): Likewise.
266
267 2005-01-11  Raja R Harinath  <rharinath@novell.com>
268
269         Fix cs0509.cs, cs1632.cs.
270         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
271         is the same as IsInterface.
272         (TypeContainer.GetClassBases): Likewise.
273         * statement.cs (LabeledStatement.ig): New field.
274         (LabeledStatement.LabelTarget): Save ILGenerator which created the
275         label.
276         (LabeledStatement.DoEmit): Check that the label was created with
277         the same ILGenerator.
278
279 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
280
281         Fix #71058
282         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
283         accessors to its properties.
284
285         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
286         from accessors to property.
287         
288 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
289
290         Fix #70722
291         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
292         only for overrides.
293         
294 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
295
296         * attribute.cs: Check for null and empty strings.  
297
298         I have lost another battle to Paolo.
299
300 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
301
302         Fix #70942
303         * class.cs (PropertyMethod): Set Parent field in ctors.
304         (SetMethod.InternalParameters): Add unsafe switch hack.
305         Override MarkForDuplicationCheck where it is appropriate.
306
307         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
308         It says whether container allows members with the same name.
309         Base default is no.
310         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
311         Removed is_method parameter.
312
313 2005-01-06  Duncan Mak  <duncan@ximian.com>
314
315         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
316         because the previous change led to incorrect reporting of CS1032
317         ("Cannot define/undefine preprocessor symbols after first token in
318         file"). Instead of using `tokens_seen' as the only flag that
319         triggers CS1040, introduce `comments_seen'. This new flag is used
320         to signify having seen comments on the current line, so it is
321         unset after a newline.
322
323 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
324
325         * doc.cs : When searching for a type, find nested type too.
326           This fixes bug #71040.
327
328 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
329
330         * doc.cs :
331           - Warn missing member comment on those classes which also does not
332             have doc comments. Fixed bug #71041.
333           - Don't warn missing doc comment on default constructor.
334             Fixed bug #71042.
335
336 2005-01-06  Duncan Mak  <duncan@ximian.com>
337
338         * cs-tokenizer.cs (xtoken): After handling traditional C-style
339         comments, set `tokens_seen' to true. This allows us to detect
340         misplaced preprocessor directives (i.e. not at the beginning of
341         the a line, nor after whitespaces). In that case, report error
342         CS1040. This fixes bug #56460.
343
344         * cs-parser.jay (interface_member_declaration): Add checks for
345         IsExplicitImpl, and report CS0541 error if an interface member is
346         defined as an explicit interface declaration.
347
348 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
349
350         Fix #70817
351         * class.cs (PropertyMethod): Set Parent field in ctors.
352         (SetMethod.InternalParameters): Add unsafe switch hack.
353         
354         * decl.cs (MemberCore.Parent): Cannot be readonly.
355
356 2005-01-06  Raja R Harinath  <rharinath@novell.com>
357
358         * decl.cs (DeclSpace.ResolveType): Remove.
359         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
360         Merge in code from ...
361         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
362         * class.cs, enum.cs: Update to changes.
363
364 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
365
366         * anonymous.cs: Ensure that we init the scope of our parent if it
367         has not been initialized yet.
368
369 2004-12-30  Duncan Mak  <duncan@ximian.com>
370
371         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
372         if field.FieldBuilder is null. Fixes #70758.
373
374         * convert.cs: Fixed some typos and updated some of the comments.
375         (ImplicitStandardConversionExists):
376         (TryImplicitIntConversion): If `target_type' is an interface and
377         the type of `ic' implements this interface, return true or a new
378         BoxedCast instead of null. This fixes #70468.
379
380 2004-12-29  Duncan Mak  <duncan@ximian.com>
381
382         * expression.cs (Argument.Emit): Check that Expr is
383         IMemoryLocation before casting to it, and report CS1510 otherwise.
384
385         This fixes #70402.
386
387 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
388
389         * statement.cs (Block.ThisVariable): remove the recursion here, to
390         make the --profile more sane.
391
392 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
393
394         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
395         assembly, by JB Evain.
396
397 2004-12-17  Raja R Harinath  <rharinath@novell.com>
398
399         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
400           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
401         "parent" refers to enclosing type/class.  "base" refers to superclass.
402
403 2004-12-17  Raja R Harinath  <rharinath@novell.com>
404
405         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
406         Ensure that we only have GlobalAttributes.
407         * attribute.cs (Attribute.Emit): Make non-virtual.
408         (GlobalAttribute.Emit): Remove.
409         (Attribute.Resolve): Make virtual.
410         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
411         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
412         the argument. Don't create one.
413         (Attribute.GetObsoleteAttribute): Likewise.
414         (Attribute.GetClsCompliantAttributeValue): Likewise.
415         * class.cs, decl.cs: Update to changes.
416
417 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
418
419         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
420         
421         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
422         
423         * statement.cs (Foreach.Resolve): Add error 186 report.
424
425 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
426
427         * expression.cs (Conditional.DoResolve): Add warning 429.
428         
429         * statement.cs (If.Resolve): Add warning 665.
430
431 2004-12-16  Raja R Harinath  <rharinath@novell.com>
432
433         New invariant: RootContext.Tree.Types.NamespaceEntry == null
434         except when in the parser, and in GlobalAttribute.
435         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
436         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
437         RootContext.Tree.Types.NamespaceEntry once work is done.
438         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
439         and resets RootContext.Tree.Types.NamespaceEntry.
440
441 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
442
443         * cs-parser.jay: Don't create a block for every variable.
444
445 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
446
447         * location.cs: Provide extra information.
448
449         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
450         variables from the captured environment, it is the ldarg_0.
451
452 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
453
454         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
455         find a conclusion.
456         
457         * class.cs: Changed warning level for 169 to avoid developer
458         displeasure from warning flooding. It will be changed back when they
459         fix most of current BCL warnings.
460         
461         * RootContext.cs: Pushed default WarningLevel to 3.
462         
463         * statement.cs: Removed unused variable.
464
465 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
466
467         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
468         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
469         Add error 502 report.
470         (StaticClass.DefineType): Add error 441 report.
471         (Class.AllowedModifiersProp): New virtual property as temporary
472         extension to AllowedModifiers.
473         (Class.DefineType): Add error 418 report. Moved ModFlags check here
474         to share implementation with StaticClass and don't call virtual
475         methods from ctor.
476         
477         * driver.cs (MainDriver): Add error 1558 test.
478
479         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
480         report. Moved error 36 test here.
481
482         * statement.cs (Throw.Resolve): Add error 724 report.
483
484         * typemanager.cs: Add out_attribute_type core type.
485         
486 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
487
488         * class.cs (TypeContainer.VerifyClsCompliance): Add error
489         3018 report.
490         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
491
492         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
493         3017 report.
494         
495         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
496
497         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
498         Add error 3023 report.
499         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
500
501         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
502         implementation.
503
504 2004-12-12  John Luke  <john.luke@gmail.com>
505
506         * driver.cs (AddArgs): take -- into account when
507         adding arguments, fixes bug 65710 
508
509 2004-12-12  Martin Baulig  <martin@ximian.com>
510
511         * expression.cs (Unary.TryReduceNegative): Added support for
512         SByteConstant and ByteConstant.
513         (Unary.Reduce): Check error values from TryReduceNegative().
514
515 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
516
517         * attributes.cs (Attribute.Resolve): Avoid multiple error report
518         and report exception as error 182.
519
520 2004-12-10  Raja R Harinath  <rharinath@novell.com>
521
522         * driver.cs (Main): Fix message when there are warnings.
523
524 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
525
526         * delegate.cs: Fixed my fix from yesterday, sorry about that.
527
528 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
529
530         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
531         Reduced number of warnings.
532         
533         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
534
535 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
536
537         * driver.cs: Removed message.
538
539         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
540
541 2004-12-08    <vargaz@freemail.hu>
542
543         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
544
545 2004-12-08  Martin Baulig  <martin@ximian.com>
546
547         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
548         instead of a CS3002 for properties and indexer.
549
550 2004-12-08  Martin Baulig  <martin@ximian.com>
551
552         * decl.cs (MemberName.ToString): Make this work again.
553
554 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
555
556         * attribute.cs (Resolve): Add error 591 detection.
557
558         * class.cs (FieldMember.Define): Add error 1547 detection.
559         (Indexer.Define): Add error 620 detection.
560         (Operator.Define): Add error 590 detection.
561
562         * ecore.cs: Missing argument for error 79.
563
564         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
565         detection.
566
567 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
568
569         Fix #70106
570         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
571         only.
572
573 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
574
575         * cs-parser.jay : handle doc comments on implicit/explicit operators.
576           Some operator comments were suppressed.
577         * doc.cs : Implicit/explicit operator name in doc comments are like
578           "op_Explicit(type)~returnType", so added suffix handling.
579
580 2004-12-07  Martin Baulig  <martin@ximian.com>
581
582         * decl.cs
583         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
584         (MemberCore.GetClsCompliantAttributeValue): Likewise.
585         (DeclSpace.ec): New protected field; store the EmitContext here.
586         (DeclSpace.EmitContext): New public property; moved here from
587         `TypeContainer'.
588         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
589         EmitContext.
590
591         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
592         (Enum.Emit): Don't create a new EmitContext.
593
594         * delegate.cs (Delegate.DefineType): Always create the
595         EmitContext.
596
597         * iterators.cs (Iterators.DefineIterator): Create a new
598         EmitContext and store it in `ec'.
599
600 2004-08-24  Martin Baulig  <martin@ximian.com>
601
602         * typemanager.cs
603         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
604         this for accessibility checks.
605         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
606         IsNestedFamilyAccessible.
607         (TypeManager.IsSubclassOf): New method, do what the name actually
608         says.   
609
610 2004-12-06  Raja R Harinath  <rharinath@novell.com>
611
612         Fix crash on cs0657-17.cs.
613         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
614         Use RootContext.Tree.Types, not 'new RootTypes ()'.
615         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
616         the case where the NamespaceEntry gets overwritten.
617
618 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
619
620         Fixed #69195, #56821
621         * ecore.cs (ResolveBoolean): Tiny refactoring.
622
623         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
624         of right expression resolving when left is false constant and
625         operator is LogicalAnd OR true constant and operator is LogicalOr.
626
627         * statement.cs (ResolveUnreachable): Always reports warning.
628
629 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
630
631         * class.cs: Distinguish between 1721 and 1722 (just a little help
632         for the programmer).
633
634 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
635
636         * delegate.cs: Only allow this on new versions of the language. 
637
638 2004-12-02  Duncan Mak  <duncan@ximian.com>
639
640         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
641         Expression class.
642         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
643         here as a static method. Take an additional bool out parameter
644         `must_do_cs1540_check' for signaling to InstanceResolve.
645         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
646         member field from PropertyExpr class and made it an argument of
647         the method instead.
648         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
649         check for MarshalByRefObject, and report CS0122 instead of CS1540.
650         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
651         and `remove_accessor' as well as InstanceResolve: report CS0122
652         where applicable.
653
654         Fixes #70129.
655
656 2004-12-03  Raja R Harinath  <rharinath@novell.com>
657
658         Fix test-327.cs, test-328.cs, and put in early infrastructure
659         for eventually fixing #52697.
660         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
661         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
662         from other methods.
663         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
664         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
665         (VerifyUsing, error246): Update.
666         * rootcontext.cs (RootContext.NamespaceLookup): Just use
667         'NamespaceEntry.LookupNamespaceOrType'.
668
669 2004-12-03  Martin Baulig  <martin@ximian.com>
670
671         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
672         method as our child, call AnonymousMethod.Compatible() on it.
673
674 2004-12-03  Raja R Harinath  <rharinath@novell.com>
675
676         Disable XML documentation support in 'basic' profile.
677         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
678         Redirect XmlElement to System.Object.
679         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
680         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
681         * mcs.exe.sources: Add doc-bootstrap.cs.
682         * doc-bootstrap.cs: New file.  Contains empty stub implementation
683         of doc.cs.
684
685 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
686
687         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
688           comments are allowed.
689
690 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
691
692         * delegate.cs: Add checks for subtypes in paramaters and return values
693         in VerifyMethod () to add support for Covariance/Contravariance
694         in delegates.
695         
696 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
697
698         * report.cs: Remove extra closing parenthesis.
699
700         * convert.cs (Error_CannotImplicitConversion): If the name of the
701         types are the same, provide some extra information.
702
703         * class.cs (FieldBase): Use an unused bit field from the field to
704         encode the `has_offset' property from the FieldMember.  This saves
705         a couple of Ks on bootstrap compilation.
706
707         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
708         method as our child, return the AnonymousMethod resolved
709         expression.
710
711         * expression.cs (New.DoResolve): Allow return values from
712         NewDelegate to also include AnonymousMethods.
713
714         Fixes #70150.
715
716 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
717
718         Fix bug #70102
719         * attribute.cs (Resolve): Improved implementation of params
720         attribute arguments.
721
722         * support.cs (ParameterData): Add HasParams to be faster.
723
724 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
725
726         all things are for /doc support:
727
728         * doc.cs: new file that supports XML documentation generation.
729         * mcs.exe.sources: added doc.cs.
730         * driver.cs:
731           Handle /doc command line option.
732           Report error 2006 instead of 5 for missing file name for /doc.
733           Generate XML documentation when required, after type resolution.
734         * cs-tokenizer.cs:
735           Added support for picking up documentation (/// and /** ... */),
736           including a new XmlCommentState enumeration.
737         * cs-parser.jay:
738           Added lines to fill Documentation element for field, constant,
739           property, indexer, method, constructor, destructor, operator, event
740           and class, struct, interface, delegate, enum.
741           Added lines to warn incorrect comment.
742         * rootcontext.cs :
743           Added Documentation field (passed only when /doc was specified).
744         * decl.cs:
745           Added DocComment, DocCommentHeader, GenerateDocComment() and
746           OnGenerateDocComment() and some supporting private members for
747           /doc feature to MemberCore.
748         * class.cs:
749           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
750         * delegate.cs:
751           Added overriden DocCommentHeader.
752         * enum.cs:
753           Added overriden DocCommentHeader and GenerateDocComment().
754
755 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
756
757         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
758         unwrapping the enumeration values, chain to
759         DoConstantNumericPromotions again, so we can promote things to the
760         fundamental types (takes care of enums that are bytes, sbytes).
761
762         Fixes bug #62054.
763
764 2004-12-01  Raja R Harinath  <rharinath@novell.com>
765
766         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
767         Fix long-standing bug in type-lookup.  Use FindType instead of
768         LookupType when ec.ResolvingTypeTree.
769         (Attribute.ResolveType, Attribute.Resolve)
770         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
771         Update to changes.
772         (Attributes.Search): Remove internal version.  Update.
773         (Attributes.SearchMulti): Update.
774         (Attributes.GetClsCompliantAttribute): Remove.
775         (Attributes.GetIndexerNameAttribute): Remove.
776         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
777         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
778         * class.cs (Indexer.Define): Likewise.
779
780 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
781
782         Fix bug #68790
783         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
784         MarshallByReference members access.
785
786         * expression.cs: Use CheckMarshallByRefAccess;
787         Better error CS0197 message.
788
789         * report.cs: Print whole related error message.
790
791 2004-11-30  Raja R Harinath  <rharinath@novell.com>
792
793         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
794         the current directory to help debugging.
795
796 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
797
798         * class (GetClassBases): Better error 60 report.
799         (EventProperty): Disabled warning 67 detection.
800
801 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
802
803         Fix bug #60324
804         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
805
806         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
807         precise values.
808
809 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
810
811         Fix bug #49488
812         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
813
814         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
815
816 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
817
818         * attribute.cs (Attribute.Resolve): Refine error reporting and
819         report a cs0117 if the identifier does not exist, to distinguish
820         from 0617 which is a miss-use of the actual identifier.
821
822         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
823         between cs0070 and cs0079.
824
825         * class.cs (MemberBase.DoDefine): When reporting a wrong
826         accessibility level, we use MethodCore to compare instead of
827         Method (this was a regression in some refactoring effort).
828
829         So now we correctly report cs0056 again.
830
831         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
832         testing the target_type (which was known to be object_type) and
833         not the source type (which is anonymous_method).
834
835         Fixed reporting of error cs1660.
836
837         * expression.cs (UserCast.Source): Expose the underlying cast.
838
839         * statement.cs (Switch.SwitchGoverningType): Sort the list of
840         allowed types to find a match to int32 first (most common).
841
842         In addition, it ignores any ImplicitUserConversions that did an
843         internal implicit conversion (as the switch statement allows only
844         one integral conversion to exist).
845
846         * class.cs (PartialContainer.Create): rename `name' to
847         `member_name' for clarity.  Then replace the string calls with a
848         call to MemberName.GetPartialName, as now using
849         MemberName.ToString is an error (this is due to the side effects
850         it had, that were fixed in the past).
851
852         This will restore the error reporting on a number of partial class
853         errors that were missusing this (and getting an exception as a
854         results, which is now just a plain textual warning, because
855         yyparse debug output would crash otherwise).
856
857 2004-11-26  Raja R Harinath  <rharinath@novell.com>
858
859         * Makefile (PROGRAM_INSTALL_DIR): Remove.
860
861 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
862
863         * rootcontext.cs (LookupType): Make sure to cache lookups that
864         don't give us a negative result. This saves about 5% of corlib
865         compilation time.
866
867 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
868
869         * report.cs (AbstractMessage.Print): messages are sent to stderr
870
871         * class.cs (TypeContainer.GetClassBases): It is an error to have a
872         non-interface in the list of interfaces (at this point, either
873         parent was properly set, or a base class is being listed in the
874         interfaces section).
875
876         This flags error 1722, and resolves the crash from bug 69259.
877
878 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
879
880         * statement.cs (Using.EmitExpressionFinally): make this work right
881         for valuetypes. Fixes 69926.
882
883 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
884
885         * const.cs (Const.ChangeType): Cope with the "0 literal can be
886         converted to an enum" here, before we try to change the underlying
887         type.  This code exists, but it is a different code path than the
888         one used while encoding constants.
889
890         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
891         old bug: when converting from the null literal to a pointer,
892         return an EmptyCast, not the NullLiteral.
893
894         This fixes #69921, the recent null_type changes probably made this
895         bug more prominent.
896
897         (ImplicitReferenceConversionExists): In addition, resynchronized
898         the code here, so it matches the same code in
899         ImplicitReferenceConversionExists for the `from any class-type S
900         to any interface-type T'.
901         
902
903 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
904
905         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
906
907 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
908
909         * cs-parser.jay: Use verbosity accordingly. 
910
911 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
912
913         * expression.cs (Unary.ResolveOperator): Do not report warning;
914         AddressOf reads from variable.
915         
916         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
917
918 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
919
920         Fix bug #69462
921
922         * attribute.cs (Attributable): Removed CheckTargets.
923         (Attributes.Emit): Explicit attribute targets are tested here.
924
925         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
926         not enabled for interfaces.
927
928         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
929         (GetAssemblyName): Ouch next bug there.
930
931 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
932
933         * expression.cs: Error 275 added.
934         
935 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
936
937         Fix bug #69177 (Implemented decimal constant support)
938
939         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
940         (BinaryFold): Add DecimalConstant.
941
942         * const.cs (Define): Decimal constant 
943         (is not constant.
944         (ChangeType): Add decimal type handling.
945         (LookupConstantValue): Don't set value for decimal type but
946         emit DecimalConstantAttribute. Needed for constant optimization.
947
948         * constant.cs (ToDecimal): New method.
949         (ConvertToDecimal): New method.
950         (IntConstant): Implemented ConvertToDecimal.
951         (DecimalConstant.Emit): Emit optimized version for decimals in
952         int range.
953
954         * expression.cs (ResolveOperator): Changed order of constant
955         reduction to work correctly with native types which have
956         overloaded operators.
957         (ResolveMemberAccess): Extract constant value from attribute
958         for decimal type.
959
960         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
961
962         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
963         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
964         (ChangeType): Decimal is special.
965         (TypeToCoreType): Add decimal type.
966
967 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
968
969         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
970         decimal types.
971
972 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
973
974         * class.cs (EventField.ApplyAttributeBuilder): Fix error
975         test cs1667-5.cs.
976
977 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
978
979         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
980
981         * pending.cs (PendingImplementation): Grab only interfaces.
982
983 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
984
985         * statement.cs (ForeachHelperMethods): Add location member and
986         error 202 detection.
987
988 2004-11-19  Raja R Harinath  <rharinath@novell.com>
989
990         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
991         automatically handled by executable.make.
992         (PROGRAM): Make profile-specific.
993
994 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
995
996         * expression.cs (DoResolveBase): Fixed wrong warning for out
997         variables.
998
999 2004-11-18  Martin Baulig  <martin@ximian.com>
1000
1001         Merged latest changes into gmcs.  Please keep this comment in
1002         here, it makes it easier for me to see what changed in MCS since
1003         the last time I merged.
1004
1005 2004-11-17  Raja R Harinath  <rharinath@novell.com>
1006
1007         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
1008         (TypeHandle.GetMemberCache): New.
1009         (TypeHandle.TypeHandle): Update.
1010         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
1011         (TypeManager.LookupParentInterfacesCache):
1012         Rename from LookupInterfaceCache.  Optimize slightly.
1013         (TypeManager.MemberLookup_FindMembers): Update.
1014         * decl.cs (MemberCache.MemberCache): Set Container to null in the
1015         multi-type variant.
1016         (AddCacheContents): Rename from AddHashtable.
1017         * class.cs (TypeContainer.parent_container): Remove.
1018         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
1019         (TypeContainer.DoDefineMembers): Don't initialize it.
1020         Update to name changes.
1021         
1022 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
1023
1024         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
1025         that factors the code to check access modifiers on override.  
1026
1027         (PropertyBase): Use the code here.
1028
1029         Patch from Lluis S'anchez, fixes bug #69361.
1030
1031 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
1032
1033         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
1034         routine that is used to report the use of a captured variable
1035         whose address has been taken.
1036
1037         There are two checks: one when variables are being captured and
1038         the other check is when the address of a variable is taken. 
1039         
1040         (because an anonymous methods might be resolved before *or* after
1041         the address has been taken) and 
1042
1043         * expression.cs (Conditional.DoResolve): Remove the special
1044         casing that Martin added to trueExpr and falseExpr being both
1045         NullLiteral.  We get the right behavior now just by introducing
1046         the null_type into the compiler. 
1047
1048         * convert.cs (ExplicitConversion): Change the code to use
1049         null_type instead of testing `expr is NullLiteral'.
1050         (ImplicitConversionStandard): use null_type too.
1051         (ImplicitReferenceConversionExists): use null_type too.
1052         (ImplicitReferenceConversion): use null_type too.
1053
1054         * literal.cs: The type of `NullLiteral' is now null_type instead
1055         of object_type. 
1056         (Resolve): Set the type here.
1057
1058         * typemanager.cs: Introduce null_type.
1059
1060 2004-11-17  Martin Baulig  <martin@ximian.com>
1061
1062         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
1063         direction, like FindMembers() does.  Fixes #69546, testcase is in
1064         test-315.cs.    
1065
1066 2004-11-16  Martin Baulig  <martin@ximian.com>
1067
1068         This is based on a patch from Marek Safar, see bug #69082.
1069         Fixes bugs #63705 and #67130.
1070
1071         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
1072         method; create a MemberCache for an interface type and cache the
1073         result.
1074
1075         * decl.cs (IMemberContainer.ParentContainer): Removed.
1076         (IMemberContainer.ParentCache): New property.
1077         (MemberCache.SetupCacheForInterface): Removed.
1078         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
1079         to create a cache for an interface's "parent".
1080
1081         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
1082         interfaces too.
1083
1084 2004-11-16  Martin Baulig  <martin@ximian.com>
1085
1086         Merged back from gmcs; these changes already went into gmcs a
1087         couple of weeks ago.
1088
1089         * typemanager.cs
1090         (TypeManager.AddUserType): Removed the `ifaces' argument.
1091         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
1092         `TypeExpr []'.
1093         (TypeManager.AddUserInterface): Removed.
1094         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
1095         `TypeExpr []'.
1096         (TypeManager.GetInterfaces): Likewise.
1097         (TypeManager.GetExplicitInterfaces): Likewise.
1098
1099         * ecore.cs (TypeExpr.GetInterfaces): Removed.
1100
1101         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
1102         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
1103
1104 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
1105
1106         * statement.cs: Avoid adding bools to a hashtable.
1107
1108 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
1109
1110         * expression.cs (Invocation.OverloadResolve): Flag error if we are
1111         calling an unsafe method from a safe location.
1112
1113 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
1114
1115         Fix #69167
1116         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
1117
1118 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
1119
1120         * namespace.cs (VerifyUsing): use GetPartialName instead of
1121         ToString. 
1122
1123 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
1124
1125         * statement.cs (Return.Resolve): Fix regression in typo: if
1126         `in_exc', we have to request a NeedReturnLabel, this was a typo
1127         introduced in the anonymous method check-in.  Fixes #69131.
1128
1129         * Indexers were using the ShortName when defining themselves,
1130         causing a regression in the compiler bootstrap when applying the
1131         patch from 2004-11-02 (first part), now they use their full name
1132         and the bug is gone.
1133
1134 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
1135
1136         * driver.cs: Strip the path from the names of embedded resources. Fixes
1137         #68519.
1138
1139 2004-11-04  Raja R Harinath  <rharinath@novell.com>
1140
1141         Fix error message regression: cs0104-2.cs.
1142         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
1143         (AliasEntry.Resolve): Update.
1144         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
1145         'silent' flag.
1146         (RootContext.LookupType): Update.
1147
1148 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
1149
1150         * cs-parser.jay: Add support for handling accessor modifiers
1151         * class: Add support port accessor modifiers and error checking,
1152         define PropertyMethod.Define as virtual (not abstract anymore)
1153         * ecore.cs: Add checking for proeprties access with access modifiers
1154         * iterators.cs: Modify Accessor constructor call based in the modified
1155         constructor
1156 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
1157
1158         * expression.cs (StringConcat): Handle being called twice,
1159         as when we have a concat in a field init with more than two
1160         ctors in the class
1161
1162 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
1163
1164         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
1165         special case explicit implementations, we should always produce
1166         the .property or .event declaration.
1167         
1168         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
1169         since it will not return correct data if people use this
1170         unresolved in the presence of using statements (see test-313).
1171
1172         * class.cs (MethodData.Define): If we are an explicit interface
1173         implementation, set the method name to the full name of the
1174         interface plus the name of the method.  
1175
1176         Notice that using the method.MethodName.GetFullName() does not
1177         work, as it will only contain the name as declared on the source
1178         file (it can be a shorthand in the presence of using statements)
1179         and not the fully qualifed type name, for example:
1180
1181         using System;
1182
1183         class D : ICloneable {
1184                 object ICloneable.Clone ()  {
1185                 }
1186         }
1187
1188         Would produce a method called `ICloneable.Clone' instead of
1189         `System.ICloneable.Clone'.
1190
1191         * namespace.cs (Alias.Resolve): Use GetPartialName.
1192         
1193 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
1194
1195         * cs-parser.jay: Add error 1055 report.
1196
1197 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
1198
1199         * assign.cs (Assign.DoResolve): Only do the transform of
1200         assignment into a New if the types are compatible, if not, fall
1201         through and let the implicit code deal with the errors and with
1202         the necessary conversions. 
1203
1204 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
1205
1206         * cs-parser.jay: Add error 1031 report.
1207
1208         * cs-tokenizer.cs: Add location for error 1038.
1209
1210 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1211
1212         * cs-parser.jay: Add error 1016 report.
1213
1214 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1215
1216         * cs-parser.jay: Add errors 1575,1611 report.
1217
1218 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1219
1220         * cs-parser.jay: Add error 1001 report.
1221
1222 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1223
1224         Fix #68850
1225         * attribute.cs (GetMarshal): Add method argument for
1226         caller identification.
1227
1228         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
1229         agument for GetMarshal and RuntimeMissingSupport.
1230
1231 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1232
1233         * attribute.cs (ExtractSecurityPermissionSet): Removed
1234         TypeManager.code_access_permission_type.
1235
1236         * typemanager.cs: Removed TypeManager.code_access_permission_type.
1237
1238 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
1239
1240         * expression.cs (LocalVariableReference.DoResolveLValue): Check
1241         for obsolete use of a variable here.   Fixes regression on errors
1242         cs0619-25 and cs0619-26.
1243
1244 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
1245
1246         Fix #62358, implemented security attribute encoding.
1247
1248         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
1249         Tests permitted SecurityAction for assembly or other types.
1250         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
1251         data from SecurityPermissionAttribute to PermisionSet class.
1252
1253         * class.cs (ApplyAttributeBuilder): Added special handling
1254         for System.Security.Permissions.SecurityAttribute based types.
1255
1256         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
1257         special handling for System.Security.Permissions.SecurityAttribute
1258         based types.
1259
1260         * enum.cs (ApplyAttributeBuilder): Added special handling
1261         for System.Security.Permissions.SecurityAttribute based types.
1262
1263         * parameter.cs (ApplyAttributeBuilder): Added special handling
1264         for System.Security.Permissions.SecurityAttribute based types.
1265
1266         * rootcontext.cs: Next 2 core types.
1267
1268         * typemanager.cs (TypeManager.security_permission_attr_type):
1269         Built in type for the SecurityPermission Attribute.
1270         (code_access_permission_type): Build in type.
1271
1272 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
1273
1274         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
1275         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
1276         all of this information into
1277         EmitContext.EmitCapturedVariableInstance.
1278         
1279         * codegen.cs (EmitCapturedVariableInstance): move here the
1280         funcionality of emitting an ldarg.0 in the presence of a
1281         remapping.   This centralizes the instance emit code.
1282
1283         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
1284         then emit a load of this: it means that we have reached the
1285         topmost ScopeInfo: the one that contains the pointer to the
1286         instance of the class hosting the anonymous method.
1287
1288         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
1289         captures to the topmost CaptureContext.
1290
1291 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
1292
1293         * expression.cs (LocalVariableReference): Move the knowledge about
1294         the iterators into codegen's EmitCapturedVariableInstance.
1295
1296 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
1297
1298         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
1299         all code paths return a value from an anonymous method (it is the
1300         same as the 161 error, but for anonymous methods).
1301
1302 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
1303
1304         The introduction of anonymous methods in the compiler changed
1305         various ways of doing things in the compiler.  The most
1306         significant one is the hard split between the resolution phase
1307         and the emission phases of the compiler.
1308
1309         For instance, routines that referenced local variables no
1310         longer can safely create temporary variables during the
1311         resolution phase: they must do so from the emission phase,
1312         since the variable might have been "captured", hence access to
1313         it can not be done with the local-variable operations from the runtime.
1314         
1315         * statement.cs 
1316
1317         (Block.Flags): New flag `IsTopLevel' to indicate that this block
1318         is a toplevel block.
1319
1320         (ToplevelBlock): A new kind of Block, these are the blocks that
1321         are created by the parser for all toplevel method bodies.  These
1322         include methods, accessors and anonymous methods.
1323
1324         These contain some extra information not found in regular blocks:
1325         A pointer to an optional CaptureContext (for tracking captured
1326         local variables and parameters).  A pointer to the parent
1327         ToplevelBlock.
1328         
1329         (Return.Resolve): Catch missmatches when returning a value from an
1330         anonymous method (error 1662).
1331         Invoke NeedReturnLabel from the Resolve phase instead of the emit
1332         phase.
1333
1334         (Break.Resolve): ditto.
1335
1336         (SwitchLabel): instead of defining the labels during the
1337         resolution phase, we now turned the public ILLabel and ILLabelCode
1338         labels into methods called GetILLabelCode() and GetILLabel() that
1339         only define the label during the Emit phase.
1340
1341         (GotoCase): Track the SwitchLabel instead of the computed label
1342         (its contained therein).  Emit the code by using
1343         SwitchLabel.GetILLabelCode ().
1344
1345         (LocalInfo.Flags.Captured): A new flag has been introduce to track
1346         whether the Local has been captured or not.
1347
1348         (LocalInfo.IsCaptured): New property, used to tell whether the
1349         local has been captured.
1350         
1351         * anonymous.cs: Vastly updated to contain the anonymous method
1352         support.
1353
1354         The main classes here are: CaptureContext which tracks any
1355         captured information for a toplevel block and ScopeInfo used to
1356         track the activation frames for various local variables.   
1357
1358         Each toplevel block has an optional capture context associated
1359         with it.  When a method contains an anonymous method both the
1360         toplevel method and the anonymous method will create a capture
1361         context.   When variables or parameters are captured, they are
1362         recorded on the CaptureContext that owns them, for example:
1363
1364         void Demo () {
1365              int a;
1366              MyDelegate d = delegate {
1367                  a = 1;
1368              }
1369         }
1370
1371         Here `a' will be recorded as captured on the toplevel
1372         CapturedContext, the inner captured context will not have anything
1373         (it will only have data if local variables or parameters from it
1374         are captured in a nested anonymous method.
1375
1376         The ScopeInfo is used to track the activation frames for local
1377         variables, for example:
1378
1379         for (int i = 0; i < 10; i++)
1380                 for (int j = 0; j < 10; j++){
1381                    MyDelegate d = delegate {
1382                         call (i, j);
1383                    }
1384                 }
1385
1386         At runtime this captures a single captured variable `i', but it
1387         captures 10 different versions of the variable `j'.  The variable
1388         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
1389         recorded on a child.  
1390
1391         The toplevel ScopeInfo will also track information like the `this'
1392         pointer if instance variables were referenced (this is necessary
1393         as the anonymous method lives inside a nested class in the host
1394         type of the method). 
1395
1396         (AnonymousMethod): Expanded to track the Toplevel, implement
1397         `AnonymousMethod.Compatible' to tell whether an anonymous method
1398         can be converted to a target delegate type. 
1399
1400         The routine now also produces the anonymous method content
1401
1402         (AnonymousDelegate): A helper class that derives from
1403         DelegateCreation, this is used to generate the code necessary to
1404         produce the delegate for the anonymous method that was created. 
1405
1406         * assign.cs: API adjustments for new changes in
1407         Convert.ImplicitStandardConversionExists.
1408
1409         * class.cs: Adjustments to cope with the fact that now toplevel
1410         blocks are of type `ToplevelBlock'. 
1411
1412         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
1413         insteda of standard blocks.
1414
1415         Flag errors if params arguments are passed to anonymous methods.
1416
1417         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
1418         `CurrentAnonymousMethod' which points to the current Anonymous
1419         Method.  The variable points to the AnonymousMethod class that
1420         holds the code being compiled.  It is set in the new EmitContext
1421         created for the anonymous method.
1422
1423         (EmitContext.Phase): Introduce a variable and an enumeration to
1424         assist in enforcing some rules about when and where we are allowed
1425         to invoke certain methods (EmitContext.NeedsReturnLabel is the
1426         only one that enfonces this right now).
1427
1428         (EmitContext.HaveCaptureInfo): new helper method that returns
1429         whether we have a CapturedContext initialized.
1430
1431         (EmitContext.CaptureVariable): New method used to register that a
1432         LocalInfo must be flagged for capturing. 
1433
1434         (EmitContext.CapturedParameter): New method used to register that a
1435         parameters must be flagged for capturing. 
1436         
1437         (EmitContext.CapturedField): New method used to register that a
1438         field must be flagged for capturing. 
1439
1440         (EmitContext.HaveCapturedVariables,
1441         EmitContext.HaveCapturedFields): Return whether there are captured
1442         variables or fields. 
1443
1444         (EmitContext.EmitMethodHostInstance): This is used to emit the
1445         instance for the anonymous method.  The instance might be null
1446         (static methods), this (for anonymous methods that capture nothing
1447         and happen to live side-by-side with the current method body) or a
1448         more complicated expression if the method has a CaptureContext.
1449
1450         (EmitContext.EmitTopBlock): Routine that drives the emission of
1451         code: it will first resolve the top block, then emit any metadata
1452         and then emit the code.  The split is done so that we can extract
1453         any anonymous methods and flag any captured variables/parameters.
1454         
1455         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
1456         during this phase, the ILGenerator should not be used as labels
1457         and local variables declared here might not be accessible to any
1458         code that is part of an anonymous method.  
1459
1460         Exceptions to this include the temporary variables that are
1461         created by some statements internally for holding temporary
1462         variables. 
1463         
1464         (EmitContext.EmitMeta): New routine, in charge of emitting all the
1465         metadata for a cb
1466
1467         (EmitContext.TemporaryReturn): This method is typically called
1468         from the Emit phase, and its the only place where we allow the
1469         ReturnLabel to be defined other than the EmitMeta.  The reason is
1470         that otherwise we would have to duplicate a lot of logic in the
1471         Resolve phases of various methods that today is on the Emit
1472         phase. 
1473
1474         (EmitContext.NeedReturnLabel): This no longer creates the label,
1475         as the ILGenerator is not valid during the resolve phase.
1476
1477         (EmitContext.EmitThis): Extended the knowledge in this class to
1478         work in anonymous methods in addition to iterators. 
1479
1480         (EmitContext.EmitCapturedVariableInstance): This emits whatever
1481         code is necessary on the stack to access the instance to a local
1482         variable (the variable will be accessed as a field).
1483
1484         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
1485         EmitContext.EmitAddressOfParameter): Routines to support
1486         parameters (not completed at this point). 
1487         
1488         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
1489         will also remove the parameters.
1490
1491         * convert.cs (Convert): Define a `ConstantEC' which points to a
1492         null.  This is just to prefity some code that uses
1493         ImplicitStandardConversion code and do not have an EmitContext
1494         handy.
1495
1496         The idea is to flag explicitly that at that point in time, it is
1497         known that the conversion will not trigger the delegate checking
1498         code in implicit conversions (which requires a valid
1499         EmitContext). 
1500
1501         Everywhere: pass new EmitContext parameter since
1502         ImplicitStandardConversionExists now requires it to check for
1503         anonymous method conversions. 
1504
1505         (Convert.ImplicitStandardConversionExists): If the type of an
1506         expression is the anonymous_method_type, and the type is a
1507         delegate, we invoke the AnonymousMethod.Compatible method to check
1508         whether an implicit conversion is possible. 
1509
1510         (Convert.ImplicitConversionStandard): Only do implicit method
1511         group conversions if the language level is not ISO_1.
1512
1513         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
1514         MethodInfo for the Invoke method.  used by Delegate and
1515         AnonymousDelegate.
1516
1517         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
1518         method conversions if the target type is a delegate.
1519
1520         Removed extra debugging nops.
1521
1522         (LocalVariableReference): Turn the `local_info' into a public
1523         field. 
1524
1525         Add `prepared' field, the same hack used for FieldExprs to cope
1526         with composed assignments, as Local variables do not necessarily
1527         operate purely on the stack as they used to: they can be captured
1528         fields. 
1529
1530         Add `temp' for a temporary result, like fields.
1531
1532         Refactor DoResolve and DoResolveLValue into DoResolveBase.
1533
1534         It now copes with Local variables that are captured and emits the
1535         proper instance variable to load it from a field in the captured
1536         case. 
1537
1538         (ParameterReference.DoResolveBase): During the resolve phase,
1539         capture parameters if we are in an anonymous method.
1540
1541         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
1542         anonymous method, use the EmitContext helper routines to emit the
1543         parameter reference.
1544
1545         * iterators.cs: Set RemapToProxy to true/false during the
1546         EmitDispose class.
1547
1548         * parameters.cs (GetParameterByName): New helper method. 
1549
1550         * typemanager.cs (anonymous_method_type) a new type that
1551         represents an anonyous method.  This is always an internal type,
1552         used as a fencepost to test against the anonymous-methodness of an
1553         expression. 
1554         
1555 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
1556
1557         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
1558         561 report.
1559         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
1560
1561 2004-10-18  Martin Baulig  <martin@ximian.com>
1562
1563         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
1564         `Type' directly, but call ResolveType() on it.
1565         (Catch.Resolve): Likewise.
1566         (Foreach.Resolve): Likewise.
1567
1568 2004-10-18  Martin Baulig  <martin@ximian.com>
1569
1570         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
1571         `Type' directly, but call ResolveType() on it.
1572         (Probe.DoResolve): Likewise.
1573         (ArrayCreation.LookupType): Likewise.
1574         (TypeOf.DoResolve): Likewise.
1575         (SizeOf.DoResolve): Likewise.
1576
1577 2004-10-18  Martin Baulig  <martin@ximian.com>
1578
1579         * expression.cs (Invocation.BetterFunction): Put back
1580         TypeManager.TypeToCoreType().
1581
1582 2004-10-18  Raja R Harinath  <rharinath@novell.com>
1583
1584         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
1585         the ResolveType.
1586
1587 2004-10-18  Martin Baulig  <martin@ximian.com>
1588
1589         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
1590         `Type' directly, but call ResolveType() on it.
1591
1592 2004-10-18  Martin Baulig  <martin@ximian.com>
1593
1594         * class.cs (FieldMember.Define): Don't access the TypeExpr's
1595         `Type' directly, but call ResolveType() on it.
1596         (MemberBase.DoDefine): Likewise.
1597
1598         * expression.cs (New.DoResolve): Don't access the TypeExpr's
1599         `Type' directly, but call ResolveType() on it.
1600         (ComposedCast.DoResolveAsTypeStep): Likewise.
1601
1602         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
1603         `Type' directly, but call ResolveType() on it.
1604
1605 2004-10-17  John Luke  <john.luke@gmail.com>
1606
1607         * class.cs (Operator.GetSignatureForError): use CSharpName
1608
1609         * parameter.cs (Parameter.GetSignatureForError): Returns
1610         correct name even if was not defined.
1611
1612 2004-10-13  Raja R Harinath  <rharinath@novell.com>
1613
1614         Fix #65816.
1615         * class.cs (TypeContainer.EmitContext): New property.
1616         (DefineNestedTypes): Create an emitcontext for each part.
1617         (MethodCore.DoDefineParameters): Use container's emitcontext.
1618         Pass type array to InternalParameters.
1619         (MemberBase.DoDefine): Use container's emitcontext.
1620         (FieldMember.Define): Likewise.
1621         (Event.Define): Likewise.
1622         (SetMethod.GetParameterInfo): Change argument to EmitContext.
1623         Pass type array to InternalParameters.
1624         (SetIndexerMethod.GetParameterInfo): Likewise.
1625         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
1626         * delegate.cs (Define): Pass emitcontext to
1627         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
1628         array to InternalParameters.
1629         * expression.cs (ParameterReference.DoResolveBase): Pass
1630         emitcontext to GetParameterInfo.
1631         (ComposedCast.DoResolveAsTypeStep): Remove check on
1632         ec.ResolvingTypeTree.
1633         * parameter.cs (Parameter.Resolve): Change argument to
1634         EmitContext.  Use ResolveAsTypeTerminal.
1635         (Parameter.GetSignature): Change argument to EmitContext.
1636         (Parameters.ComputeSignature): Likewise.
1637         (Parameters.ComputeParameterTypes): Likewise.
1638         (Parameters.GetParameterInfo): Likewise.
1639         (Parameters.ComputeAndDefineParameterTypes): Likewise.
1640         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
1641         * support.cs (InternalParameters..ctor): Remove variant that takes
1642         a DeclSpace.
1643         * typemanager.cs (system_intptr_expr): New.
1644         (InitExpressionTypes): Initialize it.
1645
1646 2004-10-12  Chris Toshok  <toshok@ximian.com>
1647
1648         * cs-parser.jay: fix location for try_statement and catch_clause.
1649
1650 2004-10-11  Martin Baulig  <martin@ximian.com>
1651
1652         * report.cs: Don't make --fatal abort on warnings, we have
1653         -warnaserror for that.
1654
1655 2004-10-07  Raja R Harinath  <rharinath@novell.com>
1656
1657         More DeclSpace.ResolveType avoidance.
1658         * decl.cs (MemberCore.InUnsafe): New property.
1659         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
1660         with newly created EmitContext.
1661         (FieldMember.Define): Likewise.
1662         * delegate.cs (Delegate.Define): Likewise.
1663         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
1664         only if normal name-lookup fails.
1665         (TypeExpr.DoResolve): Enable error-checking.
1666         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
1667         (SizeOf.DoResolve): Likewise.
1668         (ComposedCast.DoResolveAsTypeStep): Likewise.
1669         (StackAlloc.DoResolve): Likewise.
1670         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
1671         (Block.Unsafe): New property.
1672         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
1673         (Unsafe): Set 'unsafe' flag of contained block.
1674         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
1675         (Fixed.Resolve): Likewise.
1676         (Catch.Resolve): Likewise.
1677         (Using.ResolveLocalVariableDecls): Likewise.
1678         (Foreach.Resolve): Likewise.
1679
1680 2004-10-05  John Luke <john.luke@gmail.com>
1681
1682         * cs-parser.jay: add location to error CS0175
1683
1684 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
1685
1686         * ecore.cs (Expression.Constantity): Add support for turning null
1687         into a constant.
1688
1689         * const.cs (Const.Define): Allow constants to be reference types
1690         as long as the value is Null.
1691
1692 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
1693
1694         * namespace.cs (NamespaceEntry.Using): No matter which warning
1695         level is set, check if this namespace name has already been added.
1696
1697 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
1698
1699         * expression.cs: reftype [!=]= null should always use br[true,false].
1700         # 67410
1701
1702 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
1703
1704         Fix #67108
1705         * attribute.cs: Enum conversion moved to 
1706         GetAttributeArgumentExpression to be applied to the all
1707         expressions.
1708
1709 2004-10-01  Raja R Harinath  <rharinath@novell.com>
1710
1711         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
1712         * class.c (TypeContainer.DefineType): Flag error if
1713         base types aren't accessible due to access permissions.
1714         * decl.cs (DeclSpace.ResolveType): Move logic to
1715         Expression.ResolveAsTypeTerminal.
1716         (DeclSpace.ResolveTypeExpr): Thin layer over
1717         Expression.ResolveAsTypeTerminal.
1718         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
1719         Refactor code into NestedAccess.  Use it.
1720         (DeclSpace.NestedAccess): New.
1721         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
1722         argument to silence errors.  Check access permissions.
1723         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
1724         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
1725         (Cast.DoResolve): Likewise.
1726         (New.DoResolve): Likewise.
1727         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
1728         (TypeOf.DoResolve): Likewise.
1729
1730         * expression.cs (Invocation.BetterConversion): Return the Type of
1731         the better conversion.  Implement section 14.4.2.3 more faithfully.
1732         (Invocation.BetterFunction): Make boolean.  Make correspondence to
1733         section 14.4.2.2 explicit.
1734         (Invocation.OverloadResolve): Update.
1735         (Invocation): Remove is_base field.
1736         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
1737         (Invocation.Emit): Likewise.
1738
1739 2004-09-27  Raja R Harinath  <rharinath@novell.com>
1740
1741         * README: Update to changes.
1742
1743 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
1744
1745         * cs-parser.jay: Reverted 642 warning fix.
1746
1747 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
1748
1749         Fix bug #66615
1750         * decl.cs (FindMemberWithSameName): Indexer can have more than
1751         1 argument.
1752
1753 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
1754
1755         * expression.cs (LocalVariableReference.DoResolveLValue):
1756         Do not report warning 219 for out values.
1757         (EmptyExpression.Null): New member to avoid extra allocations.
1758
1759 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
1760
1761         * cs-parser.jay: Fix wrong warning 642 report.
1762
1763         * cs-tokenizer.cs (CheckNextToken): New helper;
1764         Inspect next character if is same as expected.
1765
1766 2004-09-23  Martin Baulig  <martin@ximian.com>
1767
1768         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
1769         (Convert.ImplicitReferenceConversionExists): Likewise.
1770
1771 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
1772
1773         * class.cs (Operator.Define): Add error 448 and 559 report.
1774
1775 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
1776
1777         * class.cs (MemberBase.IsTypePermitted): New protected
1778         method for checking error CS0610.
1779
1780 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
1781
1782         * class.cs (TypeContainer.HasExplicitLayout): New property
1783         Returns whether container has StructLayout attribute set Explicit.
1784         (FieldMember): New abstract class for consts and fields.
1785         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
1786         (Field): Reuse FieldMember.
1787
1788         * const.cs (Const): Reuse FieldMember.
1789
1790         * rootcontext.cs: EmitConstants call moved to class.
1791
1792 2004-09-22  Martin Baulig  <martin@ximian.com>
1793
1794         Thanks to Peter Sestoft for this bug report.
1795
1796         * expression.cs (Conditional): If both the `trueExpr' and the
1797         `falseExpr' is a NullLiteral, return a NullLiteral.
1798
1799 2004-09-22  Martin Baulig  <martin@ximian.com>
1800
1801         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
1802         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
1803         for the "get_Current" call.
1804
1805 2004-09-22  Martin Baulig  <martin@ximian.com>
1806
1807         Marek and me just fixed one of our oldest bugs: #28562 :-)
1808
1809         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
1810
1811         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
1812         we're an EnumConstant, just return that.
1813         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
1814         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
1815         to get the value which'll actually be written into the attribute.
1816         However, we have to use GetValue() to access the attribute's value
1817         in the compiler.        
1818
1819 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
1820
1821         * constant.cs (Constant.IsNegative): New abstract property
1822         IsNegative.
1823
1824         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
1825         (StackAlloc.DoResolve): Reused IsNegative.
1826
1827 2004-09-21  Martin Baulig  <martin@ximian.com>
1828
1829         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
1830         if we're used in an iterator, we may be called from different
1831         methods.
1832
1833         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
1834         we actually have an exception block.
1835
1836 2004-09-20  John Luke <jluke@cfl.rr.com>
1837
1838         * class.cs, cs-parser.jay: Improve the error report for 1520:
1839         report the actual line where the error happens, not where the
1840         class was declared.
1841
1842         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
1843         Pass location information that was available elsewhere.
1844
1845 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
1846
1847         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
1848         runtime to delay sign assemblies.
1849
1850 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
1851
1852         * cs-parser.jay: Do not report the stack trace, this is barely
1853         used nowadays.
1854
1855 2004-08-22  John Luke  <john.luke@gmail.com>
1856  
1857         * driver.cs : check that a resource id is not already used
1858         before adding it, report CS1508 if it is, bug #63637
1859
1860 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
1861
1862         * ecore.cs: Removed dead code.
1863
1864 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
1865
1866         * class.cs: Do not report warning CS0067 on the interfaces.
1867
1868 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
1869
1870         * cs-parser.jay: Add error 504 report.
1871
1872 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
1873
1874         * rootcontext.cs: WarningLevel is 4 by default now.
1875
1876         * statement.cs (Fixed.Resolve): Do not null
1877         VariableInfo.
1878
1879 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
1880
1881         Fixed bug #55780
1882         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
1883         deep search when property is not virtual.
1884         (PropertyExpr.ResolveAccessors): Make one call for both
1885         accessors.
1886
1887 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
1888
1889         Fixed bug #65766
1890         * statement.cs: Error 152 report constains also location.
1891
1892 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
1893
1894         Fixed bug #65766
1895         * const.cs: Explicitly set constant as static.
1896
1897 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
1898
1899         Fixed bug #64226
1900         * cs-parser.jay: Add error 1017 report.
1901
1902 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
1903
1904         Fixed bug #59980, #64224
1905         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
1906
1907         * typemanager.cs (IsSpecialMethod): Simplified
1908
1909 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
1910
1911         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
1912         condition with better params.
1913
1914 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
1915
1916         Fixed bug #65238
1917         * attribute.cs (Resolve): Property has to have both
1918         accessors.
1919
1920 2004-09-14  Martin Baulig  <martin@ximian.com>
1921
1922         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
1923
1924 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
1925
1926         Fixed bug #61902
1927         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
1928         called and is obsolete then this member suppress message
1929         when call is inside next [Obsolete] method or type.
1930
1931         * expression.cs: Use TestObsoleteMethodUsage member.
1932
1933 2004-09-14  Martin Baulig  <martin@ximian.com>
1934
1935         * cs-parser.jay: Sync a bit with the GMCS version.
1936
1937 2004-09-14  Martin Baulig  <martin@ximian.com>
1938
1939         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
1940         (CSharpParser.yacc_verbose_flag): New public field.
1941
1942         * genericparser.cs: Removed.
1943
1944 2004-09-14  Raja R Harinath  <rharinath@novell.com>
1945
1946         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
1947
1948 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
1949
1950         * class.cs (MethodCore.CheckBase): Fix bug #65757.
1951
1952 2004-09-10  Martin Baulig  <martin@ximian.com>
1953
1954         Backported my MemberName changes from GMCS into MCS.
1955
1956         - we are now using a special `MemberName' class instead of using
1957         strings; in GMCS, the `MemberName' also contains the type
1958         arguments.
1959
1960         - changed the grammar rules a bit:
1961           * the old `member_name' is now a `namespace_or_type_name':
1962             The rule is that we use `namespace_or_type_name' everywhere
1963             where we expect either a "member name" (GetEnumerator) or a
1964             "member name" with an explicit interface name
1965             (IEnumerable.GetEnumerator).
1966             In GMCS, the explicit interface name may include type arguments
1967             (IEnumerable<T>.GetEnumerator).
1968           * we use `member_name' instead of just `IDENTIFIER' for
1969             "member names":
1970             The rule is that we use `member_name' wherever a member may
1971             have type parameters in GMCS.       
1972
1973         * decl.cs (MemberName): New public class.
1974         (MemberCore.MemberName): New public readonly field.
1975         (MemberCore.ctor): Take a `MemberName' argument, not a string.
1976         (DeclSpace): Likewise.
1977
1978         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
1979         * enum.cs (Enum.ctor): Likewise.
1980
1981         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
1982         MemberName.     
1983         (AliasEntry.ctor): Take a MemberName, not an Expression.
1984         (AliasEntry.UsingAlias): Likewise.
1985
1986         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
1987         (IMethodData.MemberName): Changed type from string to MemberName.
1988         (MemberBase.ExplicitInterfaceName): Likewise.
1989         (AbstractPropertyEventMethod.SetupName): Make this private.
1990         (AbstractPropertyEventMethod.ctor): Added `string prefix'
1991         argument; compute the member name here.
1992         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
1993         on the `member.MemberName' and the `prefix'.
1994
1995         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
1996         not `type_name'.
1997         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
1998         thus, we get a `MemberName' instead of a `string'.  These
1999         declarations may have type parameters in GMCS.
2000         (interface_method_declaration, delegate_declaration): Likewise.
2001         (class_declaration, interface_declaration): Likewise.
2002         (method_header): Use `namespace_or_type_name' instead of
2003         `member_name'.  We may be an explicit interface implementation.
2004         (property_declaration, event_declaration): Likewise.
2005         (member_name): This is now just an `IDENTIFIER', not a
2006         `namespace_or_type_name'.
2007         (type_name, interface_type): Removed.
2008         (namespace_or_type_name): Return a MemberName, not an Expression.
2009         (primary_expression): Use `member_name' instead of `IDENTIFIER';
2010         call GetTypeExpression() on the MemberName to get an expression.
2011         (IndexerDeclaration.interface_type): Changed type from string to
2012         MemberName.
2013         (MakeName): Operate on MemberName's instead of string's.
2014
2015 2004-09-13  Raja R Harinath  <rharinath@novell.com>
2016
2017         Fix bug #55770.
2018         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
2019         (NamespaceEntry.Lookup): Add new argument to flag if we want the
2020         lookup to avoid symbols introduced by 'using'.
2021         * rootcontext.cs (NamespaceLookup): Update.
2022
2023 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
2024
2025         * class.cs (TypeContainer.DoDefineMembers): Do not call
2026         DefineDefaultConstructor for static classes.
2027
2028 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
2029
2030         * attribute.cs (Attribute.Resolve): Add error 653 report.
2031
2032         * class.cs (Class.ApplyAttributeBuilder): Add error 641
2033         report.
2034         (Method.ApplyAttributeBuilder): Add error 685 report.
2035         (Operator.Define): Add error 564 report.
2036
2037         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
2038
2039         * expression.cs (Invocation.DoResolve): Add error
2040         245 and 250 report.
2041
2042         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
2043         error 674 report.
2044
2045 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2046
2047         * class.cs (ConstructorInitializer.Resolve):
2048         Wrong error number (515->516).
2049
2050 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2051
2052         * class.cs (Indexer.Define): Add error 631 report.
2053
2054 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2055
2056         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
2057
2058 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2059
2060         * expression.cs (Probe.DoResolve): Add error CS0241 report.
2061
2062 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
2063
2064         * cs-parser.jay: Added error CS0241 report.
2065
2066 2004-09-10  Raja R Harinath  <rharinath@novell.com>
2067
2068         * cs-parser.jay (fixed_statement): Introduce a scope for the
2069         declaration in the 'fixed' statement.
2070
2071 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2072
2073         * cs-parser.jay: Added CS0230 error report.
2074
2075 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2076
2077         * cs-parser.jay: Added errors CS0231 and CS0257 report.
2078
2079 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2080
2081         * expression.cs (Argument.Resolve): Added error CS0192 and
2082         CS0199 report.
2083
2084 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2085
2086         C# 2.0 #pragma warning feature
2087
2088         * cs-tokenizer.cs (PreProcessPragma): New method; 
2089         Handles #pragma directive.
2090
2091         * report.cs (WarningRegions): New class; Support
2092         class for #pragma warning directive. It tests whether
2093         warning is enabled for a given line.
2094
2095 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
2096
2097         * const.cs: Add more descriptive error report, tahnks to
2098         Sebastien. 
2099
2100 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
2101
2102         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
2103
2104 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
2105
2106         * expression.cs: Apply patch from Ben: Remove dead code from
2107         ArrayCreation, and remove the TurnintoConstant call in const.cs,
2108         as that code just threw an exception anwyays.
2109
2110         * const.cs: Remove the call to the turnintoconstant, for details
2111         see bug: #63144
2112         
2113         * literal.cs: The type of the null-literal is the null type;  So
2114         we use a placeholder type (literal.cs:System.Null, defined here)
2115         for it.
2116
2117         * expression.cs (Conditional.DoResolve): Remove some old code that
2118         is no longer needed, conversions have been fixed.
2119
2120         (ArrayCreationExpression.DoResolve): Return false if we fail to
2121         resolve the inner expression.
2122
2123 2004-09-07  Raja R Harinath  <rharinath@novell.com>
2124
2125         Fix test-290.cs.
2126         * cs-parser.jay (delegate_declaration): Record a delegate
2127         declaration as a type declaration.
2128         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
2129
2130 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
2131
2132         * parameter.cs: Do not crash if the type can not be resolved. 
2133
2134         * expression.cs: Report errors with unsafe pointers, fixes #64896
2135
2136 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
2137
2138         * expression.cs: Pointer arith always needs to do a conv.i
2139         if the operand is a long. fix 65320
2140
2141 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
2142
2143         Fixed cs0619-37.cs, cs0619-38.cs
2144
2145         * enum.cs (GetObsoleteAttribute): Removed.
2146
2147         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
2148         on Enum member is double staged. The first is tested member
2149         and then enum.
2150
2151 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
2152
2153         Fixed #56986, #63631, #65231
2154
2155         * class.cs: (TypeContainer.AddToMemberContainer): New method,
2156         adds member to name container.
2157         (TypeContainer.AddToTypeContainer): New method, adds type to
2158         name container.
2159         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
2160         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
2161         AddOperator): Simplified by reusing AddToMemberContainer.
2162         (TypeContainer.UserDefinedStaticConstructor): Changed to property
2163         instead of field.
2164         (Method.CheckForDuplications): Fixed implementation to test all
2165         possibilities.
2166         (MemberBase): Detection whether member is explicit interface
2167         implementation is now in constructor.
2168         (MemberBase.UpdateMemberName): Handles IndexerName.
2169         (Accessor): Changed to keep also location information.
2170         (AbstractPropertyEventMethod): Is derived from MemberCore.
2171         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
2172         will be emited or not.
2173         (PropertyBase.AreAccessorsDuplicateImplementation):
2174         Tests whether accessors are not in collision with some method.
2175         (Operator): Is derived from MethodCore to simplify common
2176         operations.
2177
2178         * decl.cs (Flags.TestMethodDuplication): Test for duplication
2179         must be performed.
2180         (DeclSpace.AddToContainer): Adds the member to defined_names
2181         table. It tests for duplications and enclosing name conflicts.
2182
2183         * enum.cs (EnumMember): Clean up to reuse the base structures
2184
2185 2004-09-03  Martin Baulig  <martin@ximian.com>
2186
2187         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
2188         into TypeContainer, to make partial classes work again.
2189
2190 2004-09-03  Martin Baulig  <martin@ximian.com>
2191
2192         * rootcontext.cs (RootContext.V2): Removed.
2193
2194 2004-03-23  Martin Baulig  <martin@ximian.com>
2195
2196         * expression.cs (Invocation.OverloadResolve): Added `bool
2197         may_fail' argument and use it instead of the Location.IsNull() hack.
2198
2199 2004-09-03  Martin Baulig  <martin@ximian.com>
2200
2201         Merged latest changes into gmcs.  Please keep this comment in
2202         here, it makes it easier for me to see what changed in MCS since
2203         the last time I merged.
2204
2205 2004-09-03  Raja R Harinath  <rharinath@novell.com>
2206
2207         Fix #61128.
2208         * expression.cs (BetterConversion): Don't allow either conversion 
2209         to be null.  Remove redundant implicit conversion test when 'q ==
2210         null' -- when this function is invoked, we already know that the
2211         implicit conversion exists.
2212         (BetterFunction): Assume that 'best' is non-null.  Remove
2213         redundant reimplementation of IsApplicable when 'best' is null.
2214         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
2215         number of arguments.
2216         (IsAncestralType): Extract from OverloadResolve.
2217         (OverloadResolve): Make robust to the MethodGroupExpr being
2218         unsorted.  Implement all the logic of Section 14.5.5.1, and
2219         support overloading of methods from multiple applicable types.
2220         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
2221
2222         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
2223         (RealError, Warning): Append type of report to related symbol.
2224
2225 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
2226
2227         * enum.cs: Fixed CLS-Compliance checks for enum members.
2228         Error tests cs3008-8.cs, cs3014-8.cs
2229
2230 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
2231
2232         Fixed bug #62342, #63102
2233         * class.cs: ImplementIndexer uses member.IsExplicitImpl
2234         like ImplementMethod.
2235
2236 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
2237
2238         * attribute.cs (Attribute.GetAttributeArgumentExpression):
2239         Fixed bug #65170.
2240
2241 2004-09-02  Martin Baulig  <martin@ximian.com>
2242
2243         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
2244         TypeManager.GetArgumentTypes() rather than calling GetParameters()
2245         on the MethodBase.
2246
2247 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
2248
2249         C# 2.0 Static classes implemented
2250
2251         * class.cs (TypeContainer): instance_constructors,
2252         initialized_fields, initialized_static_fields,
2253         default_constructor, base_inteface_types are protected to be
2254         accessible from StaticClass.
2255         (TypeContainer.DefineDefaultConstructor): New virtual method
2256         for custom default constructor generating
2257         (StaticClass): New class to handle "Static classes" feature.
2258
2259         * cs-parser.jay: Handle static keyword on class like instance
2260         of StaticClass.
2261
2262         * driver.cs: Added "/langversion" command line switch with two
2263         options (iso-1, default).
2264
2265 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
2266
2267         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
2268
2269 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
2270
2271         * delegate.cs: Style.
2272
2273 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
2274
2275         * delegate.cs: Add seperate instance expr field for miguel.
2276
2277 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
2278
2279         * PointerArithmetic (Resolve): make sure we are not doing
2280         pointer arith on void*. Also, make sure we are resolved
2281         by not setting eclass until resolve.
2282
2283         All callers: Make sure that PointerArithmetic gets resolved.
2284
2285 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
2286
2287         * ArrayCreation (LookupType): If the type does not resolve 
2288         to an array, give an error.
2289
2290 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
2291
2292         * statement.cs (Try.Resolve): Fixed bug #64222
2293
2294 2004-08-27  Martin Baulig  <martin@ximian.com>
2295
2296         * class.cs
2297         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
2298         crash here.     
2299
2300 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
2301
2302         * ecore.cs (Constantify): Get underlying type via
2303         System.Enum.GetUnderlyingType to avoid StackOverflow on the
2304         Windows in special cases.
2305
2306 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
2307
2308         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
2309         for obtaining also private methods.
2310         (GetRemoveMethod): Used GetRemoveMethod (true)
2311         for obtaining also private methods.
2312
2313 2004-08-24  Martin Baulig  <martin@ximian.com>
2314
2315         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
2316         MethodAttributes.HideBySig for operators.
2317
2318 2004-08-23  Martin Baulig  <martin@ximian.com>
2319
2320         Back to the old error reporting system :-)
2321
2322         * report.cs (Message): Removed.
2323         (Report.MessageData, ErrorData, WarningData): Removed.
2324         (Report.Error, Warning): Back to the old system.
2325
2326 2004-08-23  Martin Baulig  <martin@ximian.com>
2327
2328         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
2329
2330         * class.cs (TypeContainer.ParentContainer): New public virtual
2331         method; replaces the explicit interface implementation.
2332         (ClassPart.ParentContainer): Override.
2333
2334 2004-08-23  Martin Baulig  <martin@ximian.com>
2335
2336         * statement.cs (Switch): Added support for constant switches; see
2337         #59428 or test-285.cs.
2338
2339 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
2340
2341         Fixed bug #62740.
2342         * statement.cs (GetEnumeratorFilter): Removed useless
2343         logic because C# specs is strict. GetEnumerator must be
2344         public.
2345
2346 2004-08-22  Martin Baulig  <martin@ximian.com>
2347
2348         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
2349         a switch and may break, reset the barrier.  Fixes #59867.
2350
2351 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
2352
2353         CLS-Compliance speed up (~5% for corlib)
2354
2355         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
2356         New method. Tests container for CLS-Compliant names
2357
2358         * class.cs (TypeContainer.VerifyClsName): New method.
2359         Checks whether container name is CLS Compliant.
2360         (Constructor): Implements IMethodData.
2361
2362         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
2363         low-case table for CLS Compliance test.
2364         (MemberCache.VerifyClsParameterConflict): New method.
2365         Checks method parameters for CS3006 error.
2366
2367         * enum.cs (EnumMember): Is derived from MemberCore.
2368         (Enum.VerifyClsName): Optimized for better performance.
2369
2370 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
2371
2372         * report.cs: Renamed Error_T to Error and changed all
2373         references.
2374
2375 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
2376
2377         * class.cs (TypeContainer.IndexerArrayList): New inner class
2378         container for indexers.
2379         (TypeContainer.DefaultIndexerName): New constant for default
2380         indexer name. Replaced all "Item" with this constant.
2381         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
2382
2383         * typemanager.cs (TypeManager.default_member_ctor): Cache here
2384         DefaultMemberAttribute constructor.
2385
2386 2004-08-05  Martin Baulig  <martin@ximian.com>
2387
2388         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
2389         Fix bug #59429.
2390
2391 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
2392
2393         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
2394         multi platforms problem.
2395
2396         * compiler.csproj: Included shared files.
2397
2398 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
2399
2400         Fix bug 60333, 55971 in the more general way
2401         * attribute.cs (Attribute.GetAttributeArgumentExpression):
2402         Added arg_type argument for constant conversion.
2403         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
2404
2405 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
2406
2407         Fix bug #59760
2408         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
2409         OperatorArrayList, MethodCoreArrayList for typecontainer
2410         containers. Changed class member types to these new types.
2411         (MethodArrayList.DefineMembers): Added test for CS0659.
2412
2413 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
2414
2415         * cfold.cs: Synchronize the folding with the code in expression.cs
2416         Binary.DoNumericPromotions for uint operands.
2417
2418         * attribute.cs: Revert patch from Raja, it introduced a regression
2419         while building Blam-1.2.1 (hard to isolate a test case).
2420
2421 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
2422
2423         Fix for #55382
2424         * class.cs:
2425         (TypeContainer.Define): Renamed to DefineContainerMembers because of
2426         name collision.
2427         (MethodCore.parent_method): New member. The method we're overriding
2428         if this is an override method.
2429         (MethodCore.CheckBase): Moved from Method class and made common.
2430         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
2431         private.
2432         (MethodCore.CheckForDuplications): New abstract method. For custom
2433         member duplication search in a container
2434         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
2435         method and its return type.
2436         (Event.conflict_symbol): New member. Symbol with same name in the
2437         parent class.
2438
2439         * decl.cs:
2440         (MemberCache.FindMemberWithSameName): New method. The method
2441         is looking for conflict with inherited symbols.
2442
2443 2004-08-04  Martin Baulig  <martin@ximian.com>
2444
2445         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
2446
2447         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
2448
2449 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
2450
2451         * report.cs (Message): New enum for better error, warning reference in
2452         the code.
2453         (MessageData): New inner abstract class. It generally handles printing of
2454         error and warning messages.
2455         Removed unused Error, Warning, Message methods.
2456
2457 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
2458
2459         Fix for cs0592-8.cs test
2460         * attribute.cs
2461         (Attributable.ValidAttributeTargets): Made public.
2462         (Attribute.ExplicitTarget): New member for explicit target value.
2463         (Attribute.CheckTargets): Now we translate explicit attribute
2464         target to Target here.
2465
2466 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
2467
2468         * ecore.cs (MethodGroupExpr): new IsBase property.
2469
2470         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
2471
2472         * delegate.cs (DelegateCreation): store a MethodGroupExpr
2473         rather than an instance expr.
2474
2475         (DelegateCreation.Emit): Use the method group rather than
2476         the instance expression. Also, if you have base.Foo as the
2477         method for a delegate, make sure to emit ldftn, not ldftnvirt.
2478
2479         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
2480
2481         (NewDelegate.DoResolve): Only check for the existance of Invoke
2482         if the method is going to be needed. Use MethodGroupExpr.
2483
2484         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
2485
2486         * expression.cs: For pointer arith., make sure to use
2487         the size of the type, not the size of the pointer to
2488         the type.
2489
2490 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
2491
2492         Fix for #60722
2493         * class.cs (Class): Added error CS0502 test.
2494
2495 2004-08-03  John Luke  <jluke@cfl.rr.com>
2496             Raja R Harinath  <rharinath@novell.com>
2497
2498         Fix for #60997.
2499         * attribute.cs (Attribute.complained_before): New flag.
2500         (Attribute.ResolveType, Attribute.Resolve),
2501         (Attribute.DefinePInvokeMethod): Set it.
2502         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
2503         
2504 2004-08-03  Martin Baulig  <martin@ximian.com>
2505
2506         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
2507         use a user-defined operator; we still need to do numeric
2508         promotions in case one argument is a builtin type and the other
2509         one has an implicit conversion to that type.  Fixes #62322.
2510
2511 2004-08-02  Martin Baulig  <martin@ximian.com>
2512
2513         * statement.cs (LocalInfo.Flags): Added `IsThis'.
2514         (LocalInfo.IsThis): New public property.
2515         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
2516
2517 2004-08-01  Martin Baulig  <martin@ximian.com>
2518
2519         * class.cs (TypeContainer.GetClassBases): Don't set the default
2520         here since we may get called from GetPartialBases().
2521         (TypeContainer.DefineType): If GetClassBases() didn't return a
2522         parent, use the default one.
2523
2524 2004-07-30  Duncan Mak  <duncan@ximian.com>
2525
2526         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
2527
2528 2004-07-30  Martin Baulig  <martin@ximian.com>
2529
2530         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
2531
2532         * class.cs (SourceMethod): New public class, derive from the
2533         symbol writer's ISourceMethod.
2534         (Method): Use the new symbol writer API.
2535
2536         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
2537         as argument and use the new symbol writer.
2538
2539         * location.cs
2540         (SourceFile): Implement the symbol writer's ISourceFile.
2541         (Location.SymbolDocument): Removed.
2542         (Location.SourceFile): New public property.
2543
2544         * symbolwriter.cs: Use the new symbol writer API.
2545
2546 2004-07-30  Raja R Harinath  <rharinath@novell.com>
2547
2548         * Makefile (install-local): Remove.  Functionality moved to
2549         executable.make.
2550
2551 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
2552
2553         * Makefile: Install mcs.exe.config file together with mcs.exe.
2554         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
2555         correct runtime version.
2556         
2557 2004-07-25  Martin Baulig  <martin@ximian.com>
2558
2559         * class.cs
2560         (TypeContainer.RegisterOrder): Removed, this was unused.
2561         (TypeContainer, interface_order): Removed.
2562         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
2563         TypeContainer as argument since we can also be called with a
2564         `PartialContainer' for a partial class/struct/interface.
2565         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
2566         of checking whether we're an `Interface' - we could be a
2567         `PartialContainer'.
2568         (PartialContainer.Register): Override; call
2569         AddClass()/AddStruct()/AddInterface() on our parent.
2570
2571         * cs-parser.jay (interface_member_declaration): Add things to the
2572         `current_container', not the `current_class'.
2573
2574         * rootcontext.cs (RegisterOrder): The overloaded version which
2575         takes an `Interface' was unused, removed.
2576
2577         * typemanager.cs (TypeManager.LookupInterface): Return a
2578         `TypeContainer', not an `Interface'.
2579         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
2580         contain a `PartialContainer' for an interface, so check it's
2581         `Kind' to figure out what it is.
2582
2583 2004-07-25  Martin Baulig  <martin@ximian.com>
2584
2585         * class.cs (Class.DefaultTypeAttributes): New public constant.
2586         (Struct.DefaultTypeAttributes): Likewise.
2587         (Interface.DefaultTypeAttributes): Likewise.
2588         (PartialContainer.TypeAttr): Override this and add the
2589         DefaultTypeAttributes.
2590
2591 2004-07-25  Martin Baulig  <martin@ximian.com>
2592
2593         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
2594         we can just use the `Parent' field instead.
2595
2596 2004-07-25  Martin Baulig  <martin@ximian.com>
2597
2598         * class.cs (TypeContainer.Emit): Renamed to EmitType().
2599
2600 2004-07-25  Martin Baulig  <martin@ximian.com>
2601
2602         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
2603         our parts before defining any methods.
2604         (TypeContainer.VerifyImplements): Make this virtual.
2605         (ClassPart.VerifyImplements): Override and call VerifyImplements()
2606         on our PartialContainer.
2607
2608 2004-07-25  Martin Baulig  <martin@ximian.com>
2609
2610         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
2611
2612         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
2613         argument, we can just use the `Parent' field instead.
2614
2615         * class.cs
2616         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
2617         (MemberBase.DoDefine): Likewise.
2618
2619 2004-07-24  Martin Baulig  <martin@ximian.com>
2620
2621         * decl.cs (MemberCore.Parent): New public field.
2622         (DeclSpace.Parent): Moved to MemberCore.
2623
2624         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
2625         (MemberBase.ctor): Added TypeContainer argument, pass it to our
2626         parent's .ctor.
2627         (FieldBase, Field, Operator): Likewise.
2628         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
2629         (EventField, Event): Likewise.
2630
2631 2004-07-23  Martin Baulig  <martin@ximian.com>
2632
2633         * class.cs (PartialContainer): New public class.
2634         (ClassPart): New public class.
2635         (TypeContainer): Added support for partial classes.
2636         (TypeContainer.GetClassBases): Splitted some of the functionality
2637         out into GetNormalBases() and GetPartialBases().
2638
2639         * cs-tokenizer.cs (Token.PARTIAL): New token.
2640         (Tokenizer.consume_identifier): Added some hacks to recognize
2641         `partial', but only if it's immediately followed by `class',
2642         `struct' or `interface'.
2643
2644         * cs-parser.jay: Added support for partial clases.
2645
2646 2004-07-23  Martin Baulig  <martin@ximian.com>
2647
2648         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
2649         a `DeclSpace' and also made it readonly.
2650         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
2651         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
2652         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
2653
2654         * cs-parser.jay: Pass the `current_class', not the
2655         `current_container' (at the moment, this is still the same thing)
2656         to a new Method, Property, Event, Indexer or Constructor.
2657
2658 2004-07-23  Martin Baulig  <martin@ximian.com>
2659
2660         * cs-parser.jay (CSharpParser): Added a new `current_class' field
2661         and removed the `current_interface' one.
2662         (struct_declaration, class_declaration, interface_declaration):
2663         Set `current_class' to the newly created class/struct/interface;
2664         set their `Bases' and call Register() before parsing their body.
2665
2666 2004-07-23  Martin Baulig  <martin@ximian.com>
2667
2668         * class.cs (Kind): New public enum.
2669         (TypeContainer): Made this class abstract.
2670         (TypeContainer.Kind): New public readonly field.
2671         (TypeContainer.CheckDef): New public method; moved here from
2672         cs-parser.jay.
2673         (TypeContainer.Register): New public abstract method.
2674         (TypeContainer.GetPendingImplementations): New public abstract
2675         method.
2676         (TypeContainer.GetClassBases): Removed the `is_class' and
2677         `is_iface' parameters.
2678         (TypeContainer.DefineNestedTypes): Formerly known as
2679         DoDefineType().
2680         (ClassOrStruct): Made this class abstract.
2681
2682         * tree.cs (RootTypes): New public type. 
2683
2684 2004-07-20  Martin Baulig  <martin@ximian.com>
2685
2686         * tree.cs (Tree.RecordNamespace): Removed.
2687         (Tree.Namespaces): Removed.
2688
2689         * rootcontext.cs (RootContext.IsNamespace): Removed.
2690
2691         * cs-parser.jay (namespace_declaration): Just create a new
2692         NamespaceEntry here.
2693
2694 2004-07-20  Martin Baulig  <martin@ximian.com>
2695
2696         * statement.cs (ExceptionStatement): New abstract class.  This is
2697         now used as a base class for everyone who's using `finally'.
2698         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
2699         our local variables before using them.
2700
2701         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
2702         virtual method.  This is used by Yield.Resolve() to "steal" an
2703         outer block's `finally' clauses.
2704         (FlowBranchingException): The .ctor now takes an ExceptionStatement
2705         argument.
2706
2707         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
2708         version which takes an ExceptionStatement.  This version must be
2709         used to create exception branchings.
2710
2711         * iterator.cs
2712         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
2713         (Iterator.EmitMoveNext): Added exception support; protect the
2714         block with a `fault' clause, properly handle 'finally' clauses.
2715         (Iterator.EmitDispose): Run all the `finally' clauses here.
2716
2717 2004-07-20  Martin Baulig  <martin@ximian.com>
2718
2719         * iterator.cs: This is the first of a set of changes in the
2720         iterator code.  Match the spec more closely: if we're an
2721         IEnumerable, then GetEnumerator() must be called.  The first time
2722         GetEnumerator() is called, it returns the current instance; all
2723         subsequent invocations (if any) must create a copy.
2724
2725 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
2726
2727         * expression.cs: Resolve the constant expression before returning
2728         it. 
2729
2730 2004-07-19  Martin Baulig  <martin@ximian.com>
2731
2732         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
2733         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
2734         the return type of the new EmitContext.
2735
2736 2004-07-18  Martin Baulig  <martin@ximian.com>
2737
2738         * class.cs (Property.Define): Fix iterators.
2739
2740         * iterators.cs (Iterator.Define): Moved the
2741         `container.AddInterator (this)' call here from the .ctor; only do
2742         it if we resolved successfully.
2743
2744 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
2745
2746         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
2747         `true' for preprocessing directives that we parse.  The return
2748         value indicates whether we should return to regular tokenizing or
2749         not, not whether it was parsed successfully.
2750
2751         In the past if we were in: #if false ... #line #endif, we would
2752         resume parsing after `#line'.  See bug 61604.
2753
2754         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
2755         building: IsEnumType should return true only for enums, not for
2756         enums or System.Enum itself.  This fixes #61593.
2757
2758         Likely what happened is that corlib was wrong: mcs depended on
2759         this bug in some places.  The bug got fixed, we had to add the
2760         hack, which caused bug 61593.
2761
2762         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
2763         that was a workaround for the older conditions.
2764
2765 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
2766
2767         * assign.cs: IAssignMethod has a new interface, as documented
2768         inline. All assignment code now uses this new api.
2769
2770         * ecore.cs, expression.cs: All classes which implement
2771         IAssignMethod now use the new interface.
2772
2773         * expression.cs (Invocation): add a hack to EmitCall so that
2774         IndexerAccess can be the target of a compound assignment without
2775         evaluating its arguments twice.
2776
2777         * statement.cs: Handle changes in Invocation api.
2778
2779 2004-07-16  Martin Baulig  <martin@ximian.com>
2780
2781         * iterators.cs: Rewrote this.  We're now using one single Proxy
2782         class for both the IEnumerable and the IEnumerator interface and
2783         `Iterator' derives from Class so we can use the high-level API.
2784
2785         * class.cs (TypeContainer.AddIterator): New method.
2786         (TypeContainer.DoDefineType): New protected virtual method, which
2787         is called from DefineType().
2788         (TypeContainer.DoDefineMembers): Call DefineType() and
2789         DefineMembers() on all our iterators.
2790         (TypeContainer.Emit): Call Emit() on all our iterators.
2791         (TypeContainer.CloseType): Call CloseType() on all our iterators.
2792
2793         * codegen.cs (EmitContext.CurrentIterator): New public field.
2794
2795 2004-07-15  Martin Baulig  <martin@ximian.com>
2796
2797         * typemanager.cs
2798         (TypeManager.not_supported_exception_type): New type.   
2799
2800 2004-07-14  Martin Baulig  <martin@ximian.com>
2801
2802         * iterators.cs: Use real error numbers.
2803
2804 2004-07-14  Martin Baulig  <martin@ximian.com>
2805
2806         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
2807         requires this to be a System.Collection.IEnumerable and not a
2808         class implementing that interface.
2809         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
2810
2811 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
2812
2813         * class.cs: Fixed previous fix, it broke some error tests.
2814
2815 2004-07-12  Martin Baulig  <martin@ximian.com>
2816
2817         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
2818         Fixes #61293.
2819
2820 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
2821
2822         * assign.cs (LocalTemporary): Add new argument: is_address,If
2823         `is_address' is true, then the value that we store is the address
2824         to the real value, and not the value itself.
2825         
2826         * ecore.cs (PropertyExpr): use the new local temporary
2827         stuff to allow us to handle X.Y += z (where X is a struct)
2828
2829 2004-07-08  Martin Baulig  <martin@ximian.com>
2830
2831         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
2832         not always return, just like we're doing in Using.Resolve().
2833
2834 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
2835
2836         * cs-parser.jay (fixed_statement): flag this as Pinned.
2837
2838 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
2839
2840         * typemanager.cs (TypeManager): Removed MakePinned method, this
2841         mechanism is replaced with the .NET 2.x compatible mechanism of
2842         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
2843
2844         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
2845         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
2846         `IsFixed' property which has a different meaning.
2847
2848 2004-07-02  Raja R Harinath  <rharinath@novell.com>
2849
2850         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
2851         visible from inside a nested class, not just the names of the
2852         immediately enclosing class.
2853         Fix for bug #60730.
2854
2855 2004-06-24  Raja R Harinath  <rharinath@novell.com>
2856
2857         * expression.cs (BetterConversion): Remove buggy special-case
2858         handling of "implicit constant expression conversions".  At this
2859         point, we already know that the conversion is possible -- we're
2860         only checking to see which is better.
2861
2862 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
2863
2864         * cs-parser.jay: Added error CS0210 test.
2865
2866 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
2867
2868         * cs-parser.jay: Added error CS0134 test.
2869
2870 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
2871
2872         Fix bug #52507
2873         * cs-parser.jay: Added error CS0145 test.
2874
2875 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
2876
2877         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
2878
2879 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
2880         
2881         * expression.cs (StackAlloc.Resolve): The argument may not
2882         be a constant; deal with this case.
2883         
2884 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
2885
2886         * attribute.cs (IndexerName_GetIndexerName): Renamed to
2887         GetIndexerAttributeValue.
2888         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
2889
2890         * class.cs (Indexer.Define): Added error tests for CS0415,
2891         CS0609.
2892
2893 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
2894
2895         * attribute.cs (Attribute.Resolve): Keep field code in sync with
2896         property code.
2897
2898 2004-06-23  Martin Baulig  <martin@ximian.com>
2899
2900         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
2901         neither return nor throw, reset the barrier as well.  Fixes #60457.
2902
2903 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
2904
2905         * class.cs : EventAttributes is now set to None by default.
2906           This fixes bug #60459.
2907
2908 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
2909
2910         Fix bug #60219
2911         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
2912         Don't throw exception but return null (it's sufficient now).
2913
2914 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
2915
2916         * typemanager.cs (GetArgumentTypes): Faster implementation.
2917
2918 2004-06-18  Martin Baulig  <martin@ximian.com>
2919
2920         * attribute.cs (Attribute.Resolve): Check whether we're an
2921         EmptyCast which a Constant child.  Fixes #60333.
2922
2923 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
2924
2925         * statement.cs (EmitCollectionForeach): Account for the fact that
2926         not all valuetypes are in areas which we can take the address of.
2927         For these variables, we store to a temporary variable. Also, make
2928         sure that we dont emit a `callvirt' on a valuetype method.
2929
2930 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
2931
2932         * expression.cs (StackAlloc.DoReSolve): Added test for
2933         negative parameter (CS0247).
2934
2935 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
2936
2937         Fix bug #59792
2938         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
2939
2940 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
2941
2942         Fix bug #59781
2943         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
2944         ulong.
2945
2946 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
2947
2948         Fix bug #58254 & cs1555.cs, cs1556.cs
2949         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
2950
2951 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
2952
2953         * cs-parser.jay: Added error CS1669 test for indexers.
2954
2955 2004-06-11  Martin Baulig  <martin@ximian.com>
2956
2957         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
2958         call this twice: for params and varargs methods.
2959
2960 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
2961
2962         * class.cs:
2963         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
2964
2965 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
2966
2967         * attribute.cs (Attribute.GetValidTargets): Made public.
2968
2969         * class.cs: 
2970         (AbstractPropertyEventMethod): New class for better code sharing.
2971         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
2972         CS1667 report.
2973         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
2974
2975 2004-06-11  Raja R Harinath  <rharinath@novell.com>
2976
2977         Fix bug #59477.
2978         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
2979         that the call to Resolve is part of a MemberAccess.
2980         (Expression.Resolve): Use it for SimpleName resolution.
2981         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
2982         Add 'intermediate' boolean argument.
2983         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
2984         error message when the SimpleName can be resolved ambiguously
2985         between an expression and a type.
2986         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
2987         public.
2988         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
2989         call on the left-side.
2990
2991 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
2992
2993         * class.cs:
2994         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
2995
2996 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
2997
2998         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
2999
3000 2004-06-11  Martin Baulig  <martin@ximian.com>
3001
3002         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
3003         varargs methods if applicable.
3004
3005 2004-06-11  Martin Baulig  <martin@ximian.com>
3006
3007         * expression.cs (Invocation.EmitCall): Don't use
3008         `method.CallingConvention == CallingConventions.VarArgs' since the
3009         method could also have `CallingConventions.HasThis'.
3010
3011 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
3012
3013         * class.cs (Event.GetSignatureForError): Implemented.
3014         Fixed crash in error test cs3010.cs
3015
3016 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
3017
3018         * cs-tokenizer.cs: Change the way we track __arglist to be
3019         consistent with the other keywords.
3020
3021 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
3022
3023         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
3024         tomorrow.
3025
3026 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
3027
3028         * codegen.cs: Check that all referenced assemblies have a strongname
3029         before strongnaming the compiled assembly. If not report error CS1577.
3030         Fix bug #56563. Patch by Jackson Harper.
3031         * typemanager.cs: Added a method to return all referenced assemblies.
3032         Fix bug #56563. Patch by Jackson Harper.
3033
3034 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
3035
3036         * class.cs:
3037         (Method.ApplyAttributeBuilder): Moved and added conditional
3038         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
3039
3040         * delegate.cs:
3041         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
3042
3043 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
3044
3045         Fixed #59640
3046         * class.cs: (EventField.attribute_targets): Changed default target.
3047
3048 2004-06-08  Martin Baulig  <martin@ximian.com>
3049
3050         * expression.cs (Invocation.EmitCall): Enable varargs methods.
3051
3052 2004-06-08  Martin Baulig  <martin@ximian.com>
3053
3054         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
3055
3056 2004-06-07  Martin Baulig  <martin@ximian.com>
3057
3058         Added support for varargs methods.
3059
3060         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
3061         keyword.
3062
3063         * cs-parser.jay: Added support for `__arglist'.
3064
3065         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
3066
3067         * expression.cs (Argument.AType): Added `ArgList'.
3068         (Invocation): Added support for varargs methods.
3069         (ArglistAccess): New public class.
3070         (Arglist): New public class.
3071
3072         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
3073
3074         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
3075         a method's top-level block if the method has varargs.
3076
3077         * support.cs (ReflectionParameters, InternalParameters): Added
3078         support for varargs methods.    
3079
3080 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
3081
3082         * class.cs: Provide location in indexer error report.
3083
3084         * driver.cs: Use standard names.
3085
3086         * namespace.cs: Catch the use of using after a namespace has been
3087         declared also on using aliases.
3088
3089 2004-06-03  Raja R Harinath  <rharinath@novell.com>
3090
3091         Bug #50820.
3092         * typemanager.cs (closure_private_ok, closure_invocation_type)
3093         (closure_qualifier_type, closure_invocation_assembly)
3094         (FilterWithClosure): Move to ...
3095         (Closure): New internal nested class.
3096         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
3097         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
3098         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
3099         (MemberLookup, MemberLookupFailed): Use it.
3100         * expression.cs (New.DoResolve): Treat the lookup for the
3101         constructor as being qualified by the 'new'ed type.
3102         (Indexers.GetIndexersForTypeOrInterface): Update.
3103
3104 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
3105
3106         * attribute.cs
3107         (GetConditionalAttributeValue): New method. Returns
3108         condition of ConditionalAttribute.
3109         (SearchMulti): New method.  Returns all attributes of type 't'.
3110         Use it when attribute is AllowMultiple = true.
3111         (IsConditionalMethodExcluded): New method.
3112
3113         * class.cs
3114         (Method.IsExcluded): Implemented. Returns true if method has conditional
3115         attribute and the conditions is not defined (method is excluded).
3116         (IMethodData): Extended interface for ConditionalAttribute support.
3117         (PropertyMethod.IsExcluded): Implemented.
3118
3119         * decl.cs
3120         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
3121
3122         * expression.cs
3123         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
3124         on the method.
3125
3126 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
3127
3128         * expression.cs (ArrayCreationExpression): Make this just an
3129         `expression'. It can't be a statement, so the code here was
3130         dead.
3131
3132 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
3133
3134         Fixed #59072
3135         * typemanager.cs (GetFullNameSignature): New method for
3136         MethodBase types.
3137
3138 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
3139
3140         Fixed #56452
3141         * class.cs (MemberBase.GetSignatureForError): New virtual method.
3142         Use this method when MethodBuilder is null.
3143         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
3144         Added test for error CS0626 (MONO reports error for this situation).
3145         (IMethodData.GetSignatureForError): Extended interface.
3146
3147 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
3148
3149         * attribute.cs
3150         (AttributeTester.GetObsoleteAttribute): Returns instance of
3151         ObsoleteAttribute when type is obsolete.
3152
3153         * class.cs
3154         (TypeContainer.VerifyObsoleteAttribute): Override.
3155         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
3156         (MethodCode.VerifyObsoleteAttribute): Override.
3157         (MemberBase.VerifyObsoleteAttribute): Override.
3158
3159         * decl.cs
3160         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
3161         and report proper error.
3162
3163         *delegate.cs
3164         Delegate.VerifyObsoleteAttribute): Override.
3165
3166         * ecore.cs
3167         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
3168         and report proper error.
3169         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
3170
3171         * enum.cs
3172         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
3173         and enum member.
3174
3175         * expression.cs
3176         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
3177         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
3178         Added test for ObsoleteAttribute.
3179
3180         * statement.cs
3181         (Catch): Derived from Statement.
3182
3183 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
3184  
3185         Fixed bug #59071 & cs0160.cs
3186  
3187         * statement.cs (Try.Resolve): Check here whether order of catch
3188         clauses matches their dependencies.
3189
3190 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
3191
3192         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
3193         caused a regression: #59343.  Referencing nested classes from an
3194         assembly stopped working.
3195
3196 2004-05-31  Martin Baulig  <martin@ximian.com>
3197
3198         MCS is now frozen for beta 2.
3199
3200 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3201
3202         * convert.cs: add a trivial cache for overload operator resolution.
3203
3204 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3205
3206         * decl.cs: If possible, use lookuptypedirect here. We can only do
3207         this if there is no `.' after the namespace. Avoids using
3208         LookupType, which does lots of slow processing.
3209         (FindNestedType) New method, does what it says :-).
3210         * namespace.cs: use LookupTypeDirect.
3211         * rootcontext.cs: use membercache, if possible.
3212         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
3213
3214 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3215
3216         * expression.cs:
3217         According to the spec, 
3218
3219         In a member access of the form E.I, if E is a single identifier,
3220         and if the meaning of E as a simple-name (§7.5.2) is a constant,
3221         field, property, localvariable, or parameter with the same type as
3222         the meaning of E as a type-name (§3.8), then both possible
3223         meanings of E are permitted.
3224
3225         We did not check that E as a simple-name had the same type as E as
3226         a type name.
3227
3228         This trivial check gives us 5-7% on bootstrap time.
3229
3230 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3231
3232         * expression.cs (Invocation.OverloadResolve): Avoid the
3233         use of hashtables and boxing here by allocating on demand.
3234
3235 2004-05-30  Martin Baulig  <martin@ximian.com>
3236
3237         * rootcontext.cs (RootContext.LookupType): Don't cache things if
3238         we're doing a silent lookup.  Don't try to lookup nested types in
3239         TypeManager.object_type (thanks to Ben Maurer).
3240
3241 2004-05-30  Martin Baulig  <martin@ximian.com>
3242
3243         Committing a patch from Ben Maurer.
3244
3245         * rootcontext.cs (RootContext.LookupType): Cache negative results.
3246
3247 2004-05-29  Martin Baulig  <martin@ximian.com>
3248
3249         * class.cs (IMethodData.ShouldIgnore): New method.
3250
3251         * typemanager.cs (TypeManager.MethodFlags): Don't take a
3252         `Location' argument, we don't need it anywhere.  Use
3253         `IMethodData.ShouldIgnore ()' instead of
3254         `MethodData.GetMethodFlags ()'.
3255         (TypeManager.AddMethod): Removed.
3256         (TypeManager.AddMethod2): Renamed to AddMethod.
3257
3258 2004-05-29  Martin Baulig  <martin@ximian.com>
3259
3260         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
3261
3262         * convert.cs (Convert.ImplicitReferenceConversion): If we're
3263         converting from a class type S to an interface type and we already
3264         have an object on the stack, don't box it again.  Fixes #52578.
3265
3266 2004-05-29  Martin Baulig  <martin@ximian.com>
3267
3268         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
3269         Added support for `params' parameters.  Fixes #59267.
3270
3271 2004-05-29  Martin Baulig  <martin@ximian.com>
3272
3273         * literal.cs (NullPointer): Provide a private .ctor which sets
3274         `type' to TypeManager.object_type.  Fixes #59048.
3275
3276 2004-05-29  Martin Baulig  <martin@ximian.com>
3277
3278         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
3279         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
3280
3281         * ecore.cs (EventExpr.instance_expr): Make the field private.
3282
3283 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
3284
3285         Fixed bug #50080 & cs0214-2.cs
3286         * expression.cs (Cast.DoResolve): Check unsafe context here.
3287         
3288         * statement.cs (Resolve.DoResolve): Likewise.
3289
3290 2004-05-26  Martin Baulig  <martin@ximian.com>
3291
3292         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
3293
3294         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
3295         (RootContext.LookupType): Pass down the `silent' flag.
3296
3297 2004-05-25  Martin Baulig  <martin@ximian.com>
3298
3299         * expression.cs
3300         (MethodGroupExpr.IdenticalTypeName): New public property.
3301         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
3302         expression actually refers to a type.
3303
3304 2004-05-25  Martin Baulig  <martin@ximian.com>
3305
3306         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
3307         for #56176 and made it actually work.
3308
3309 2004-05-25  Martin Baulig  <martin@ximian.com>
3310
3311         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
3312         (FieldExpr, PropertyExpr): Override and implement
3313         CacheTemporaries.  Fixes #52279.
3314
3315 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
3316
3317         * location.cs: In the new compiler listing a file twice is a
3318         warning, not an error.
3319
3320 2004-05-24  Martin Baulig  <martin@ximian.com>
3321
3322         * enum.cs (Enum.DefineType): For the `BaseType' to be a
3323         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
3324
3325 2004-05-24  Martin Baulig  <martin@ximian.com>
3326
3327         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
3328         walking the `using' list.  Fixes #53921.
3329
3330 2004-05-24  Martin Baulig  <martin@ximian.com>
3331
3332         * const.cs (Const.LookupConstantValue): Added support for
3333         EmptyCast's; fixes #55251.
3334
3335 2004-05-24  Martin Baulig  <martin@ximian.com>
3336
3337         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
3338         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
3339         which does the CS0135 check.  The reason is that we first need to
3340         check whether the variable actually exists.
3341
3342 2004-05-24  Martin Baulig  <martin@ximian.com>
3343
3344         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
3345         than RootContext.LookupType() to find the explicit interface
3346         type.  Fixes #58584.
3347
3348 2004-05-24  Raja R Harinath  <rharinath@novell.com>
3349
3350         * Makefile: Simplify.  Use executable.make.
3351         * mcs.exe.sources: New file.  List of sources of mcs.exe.
3352
3353 2004-05-24  Anders Carlsson  <andersca@gnome.org>
3354
3355         * decl.cs:
3356         * enum.cs:
3357         Use the invariant culture when doing String.Compare for CLS case
3358         sensitivity.
3359         
3360 2004-05-23  Martin Baulig  <martin@ximian.com>
3361
3362         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
3363         don't have any dots.  Fixes #52622, added cs0246-8.cs.
3364
3365         * namespace.cs (NamespaceEntry.Lookup): Likewise.
3366         
3367 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
3368
3369         * class.cs (MemberBase.Define): Reuse MemberType member for 
3370         resolved type. Other methods can use it too.
3371
3372 2004-05-23  Martin Baulig  <martin@ximian.com>
3373
3374         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
3375         the variable also exists in the current block (otherwise, we need
3376         to report a CS0103).  Fixes #58670.
3377
3378 2004-05-23  Martin Baulig  <martin@ximian.com>
3379
3380         * flowanalysis.cs (Reachability.Reachable): Compute this
3381         on-the-fly rather than storing it as a field.
3382
3383 2004-05-23  Martin Baulig  <martin@ximian.com>
3384
3385         * flowanalysis.cs (Reachability.And): Manually compute the
3386         resulting `barrier' from the reachability.      
3387        
3388 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
3389
3390         Fix bug #57835
3391         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
3392         instance of ObsoleteAttribute when symbol is obsolete.
3393
3394         * class.cs
3395         (IMethodData): Extended interface for ObsoleteAttribute support.
3396
3397 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
3398
3399         * attribute.cs: Fix bug #55970
3400
3401 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
3402
3403         Fix bug #52705
3404         * attribute.cs
3405         (GetObsoleteAttribute): New method. Creates the instance of
3406         ObsoleteAttribute.
3407         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
3408         ObsoleteAttribute when member is obsolete.
3409         (AttributeTester.Report_ObsoleteMessage): Common method for
3410         Obsolete error/warning reporting.
3411
3412         * class.cs
3413         (TypeContainer.base_classs_type): New member for storing parent type.
3414
3415         * decl.cs
3416         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
3417         for this MemberCore.
3418
3419 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
3420
3421         * attribute.cs, const.cs: Fix bug #58590
3422
3423 2004-05-21  Martin Baulig  <martin@ximian.com>
3424
3425         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
3426         out parameters if the end of the method is unreachable.  Fixes
3427         #58098. 
3428
3429 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
3430
3431         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
3432         Hari was right, why extra method.
3433
3434 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
3435
3436         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
3437
3438 2004-05-20  Martin Baulig  <martin@ximian.com>
3439
3440         Merged this back from gmcs to keep the differences to a minumum.
3441
3442         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
3443         instead of a Declspace.
3444         (Attribute.ResolveType): Likewise.
3445         (Attributes.Search): Likewise.
3446         (Attributes.Contains): Likewise.
3447         (Attributes.GetClsCompliantAttribute): Likewise.
3448
3449         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
3450         argument.
3451         (MethodData.ApplyAttributes): Take an EmitContext instead of a
3452         DeclSpace.
3453
3454 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
3455
3456         Fix bug #58688 (MCS does not report error when the same attribute
3457         is assigned twice)
3458
3459         * attribute.cs (Attribute.Emit): Distinction between null and default.
3460
3461 2004-05-19  Raja R Harinath  <rharinath@novell.com>
3462
3463         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
3464         of a top-level attribute without an attribute target.
3465         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
3466         Make non-static.
3467         (Attribute.Conditional_GetConditionName), 
3468         (Attribute.Obsolete_GetObsoleteMessage): Update.
3469         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
3470         part of ScanForIndexerName.
3471         (Attribute.CanIgnoreInvalidAttribute): New function.
3472         (Attribute.ScanForIndexerName): Move to ...
3473         (Attributes.ScanForIndexerName): ... here.
3474         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
3475         (Attributes.Search): New internal variant that can choose not to
3476         complain if types aren't resolved.  The original signature now
3477         complains.
3478         (Attributes.GetClsCompliantAttribute): Use internal variant, with
3479         complaints suppressed.
3480         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
3481         only if it not useful.
3482         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
3483         top-level for attributes that are shared between the assembly
3484         and a top-level class.
3485         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
3486         * class.cs: Update to reflect changes.
3487         (DefineIndexers): Fuse loops.
3488         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
3489         a couple more variants of attribute names.
3490
3491 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
3492
3493         Fix bug #52585 (Implemented explicit attribute declaration)
3494
3495         * attribute.cs:
3496         (Attributable.ValidAttributeTargets): New abstract method. It gets
3497         list of valid attribute targets for explicit target declaration.
3498         (Attribute.Target): It holds target itself.
3499         (AttributeSection): Removed.
3500         (Attribute.CheckTargets): New method. It checks whether attribute
3501         target is valid for the current element.
3502
3503         * class.cs:
3504         (EventProperty): New class. For events that are declared like
3505         property (with add and remove accessors).
3506         (EventField): New class. For events that are declared like field.
3507         class.cs
3508
3509         * cs-parser.jay: Implemented explicit attribute target declaration.
3510
3511         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
3512         Override ValidAttributeTargets.
3513
3514         * parameter.cs:
3515         (ReturnParameter): Class for applying custom attributes on 
3516         the return type.
3517         (ParameterAtribute): New class. Class for applying custom
3518         attributes on the parameter type.
3519
3520 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
3521
3522         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
3523         definitions. 
3524
3525         (Method): Allow UNSAFE here.
3526
3527         * modifiers.cs: Support unsafe reporting.
3528
3529 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
3530
3531         * decl.cs: Fix bug #58478.
3532
3533 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
3534
3535         * statement.cs: When checking for unreachable code on an EmptyStatement,
3536         set the location. Fixes bug #58488.
3537
3538 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
3539
3540         * driver.cs: Add -pkg handling.
3541
3542         From Gonzalo: UseShelLExecute=false
3543
3544 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
3545
3546         * attribute.cs:
3547         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
3548         for attribute.
3549         (Attribute.IsClsCompliaceRequired): Moved to base for better
3550         accesibility.
3551         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
3552         when attribute is AttributeUsageAttribute.
3553         (Attribute.GetValidTargets): Simplified.
3554         (Attribute.GetAttributeUsage): New method returns AttributeUsage
3555         attribute for this type.
3556         (Attribute.ApplyAttributes): Method renamed to Emit and make
3557         non-static.
3558         (GlobalAttributeSection): New class for special handling of global
3559         attributes (assembly, module).
3560         (AttributeSection.Emit): New method.
3561
3562         * class.cs: Implemented Attributable abstract methods.
3563         (MethodCore.LabelParameters): Moved to Parameter class.
3564         (Accessor): Is back simple class.
3565         (PropertyMethod): Implemented Attributable abstract class.
3566         (DelegateMethod): Implemented Attributable abstract class.
3567         (Event): New constructor for disctintion between normal Event
3568         and Event with accessors.
3569
3570         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
3571
3572         * codegen.cs, const.cs, decl.cs, delegate.cs:
3573         (CommonAssemblyModulClass): Implemented Attributable abstract class
3574         and simplified.
3575
3576         * enum.cs: Implement IAttributeSupport interface.
3577         (EnumMember): New class for emum members. Implemented Attributable
3578         abstract class
3579
3580         * parameter.cs:
3581         (ParameterBase): Is abstract.
3582         (ReturnParameter): New class for easier [return:] attribute handling.
3583
3584         * typemanager.cs: Removed builder_to_attr.
3585
3586 2004-05-11  Raja R Harinath  <rharinath@novell.com>
3587
3588         Fix bug #57151.
3589         * attribute.cs (Attribute.GetPositionalValue): New function.
3590         * class.cs (TypeContainer.VerifyMembers): New function.
3591         (TypeContainer.Emit): Use it.
3592         (ClassOrStruct): New base class for Class and Struct.
3593         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
3594         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
3595         class.
3596         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
3597         then each non-static field should have a FieldOffset attribute.
3598         Otherwise, none of the fields should have a FieldOffset attribute.
3599         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
3600         and FieldOffset attributes.
3601         * typemanager.cs (TypeManager.struct_layout_attribute_type)
3602         (TypeManager.field_offset_attribute_type): New core types.
3603         (TypeManager.InitCoreTypes): Initialize them.
3604
3605 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
3606
3607         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
3608         Return correct type.
3609         From bug #58270.
3610
3611 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
3612
3613         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
3614         be implicitly converted to ulong.
3615         
3616         * expression.cs: The logic for allowing operator &, | and ^ worked
3617         was wrong, it worked before because we did not report an error in
3618         an else branch.  Fixes 57895.
3619
3620         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
3621         allow volatile fields to be reference types.
3622
3623 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
3624
3625         * driver.cs: Add support for /debug-
3626
3627 2004-05-07  Raja R Harinath  <rharinath@novell.com>
3628
3629         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
3630         Add a 'complain' parameter to silence errors.
3631         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
3632         silently overlooked type-resolutions.
3633         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
3634         to reflect changes.
3635         (Attributes.Search): New function.
3636         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
3637         (Attributes.GetAttributeFullName): Remove hack.
3638         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
3639         Update to reflect changes.
3640         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
3641         Use Attributes.Search instead of nested loops.
3642
3643 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
3644
3645         * decl.cs:
3646         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
3647         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
3648         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
3649
3650         * report.cs: (Report.Warning): Renamed to Warning_T because of
3651         parameter collision.
3652
3653 2004-05-05  Raja R Harinath  <rharinath@novell.com>
3654
3655         * expression.cs (MemberAccess.ResolveMemberAccess):
3656         Exit with non-zero status after Report.Error.
3657         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
3658         Likewise.
3659         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
3660
3661 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
3662
3663         * support.cs: Don't hang when the file is empty.
3664
3665 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
3666
3667         * support.cs: In SeekableStreamReader, compute the preamble size of the
3668           underlying stream. Position changes should take into account that initial
3669           count of bytes.
3670
3671 2004-05-03  Todd Berman  <tberman@sevenl.net>
3672
3673         * driver.cs: remove unused GetSysVersion function.
3674
3675 2004-05-03  Todd Berman  <tberman@sevenl.net>
3676
3677         * driver.cs: Remove the hack from saturday, as well as the hack
3678         from jackson (LoadAssemblyFromGac), also adds the CWD to the
3679         link_paths to get that bit proper.
3680
3681 2004-05-01  Todd Berman  <tberman@sevenl.net>
3682
3683         * driver.cs: Try a LoadFrom before a Load, this checks the current
3684         path. This is currently a bug in mono that is be fixed, however, this
3685         provides a workaround for now. This will be removed when the bug
3686         is fixed.
3687
3688 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
3689
3690         * CryptoConvert.cs: Updated to latest version. Fix issue with 
3691         incomplete key pairs (#57941).
3692
3693 2004-05-01  Todd Berman  <tberman@sevenl.net>
3694
3695         * driver.cs: Remove '.' from path_chars, now System.* loads properly
3696         from the GAC
3697
3698 2004-04-30  Jackson Harper  <jackson@ximian.com>
3699
3700         * codegen.cs: Open keys readonly.
3701         
3702 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
3703
3704         * typemanager.cs: don't report cyclic struct layout when a struct
3705         contains 2 or more fields of the same type. Failed for Pango.AttrShape
3706         which has 2 Pango.Rectangle fields.
3707
3708 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
3709
3710         * expression.cs: Handle IntPtr comparisons with IL code
3711         rather than a method call.
3712
3713 2004-04-29  Martin Baulig  <martin@ximian.com>
3714
3715         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
3716         the list of PropertyInfo's in class hierarchy and find the
3717         accessor.  Fixes #56013.
3718
3719 2004-04-29  Martin Baulig  <martin@ximian.com>
3720
3721         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
3722
3723 2004-04-29  Martin Baulig  <martin@ximian.com>
3724
3725         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
3726
3727         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
3728
3729 2004-04-29  Martin Baulig  <martin@ximian.com>
3730
3731         * class.cs (ConstructorInitializer.Resolve): Check whether the
3732         parent .ctor is accessible.  Fixes #52146.
3733
3734 2004-04-29  Martin Baulig  <martin@ximian.com>
3735
3736         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
3737
3738         * statement.cs (Using.EmitLocalVariableDecls): Use
3739         TypeManager.idisposable_type, not typeof (IDisposable).
3740         (Foreach.EmitCollectionForeach): Added support for valuetypes.
3741
3742 2004-04-29  Martin Baulig  <martin@ximian.com>
3743
3744         * class.cs (Event.Define): Don't emit the field and don't set
3745         RTSpecialName and SpecialName for events on interfaces.  Fixes
3746         #57703. 
3747
3748 2004-04-29  Raja R Harinath  <rharinath@novell.com>
3749
3750         Refactor Attribute.ApplyAttributes.
3751         * attribute.cs (Attributable): New base class for objects that can
3752         have Attributes applied on them.
3753         (Attribute): Make AttributeUsage fields public.
3754         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
3755         (Attribute.IsInternalCall): New property.
3756         (Attribute.UsageAttr): Convert to a public read-only property.
3757         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
3758         (Attribute.ResolveType, Attribute.Resolve)
3759         (Attribute.ScanForIndexerName): Update to reflect changes.
3760         (Attribute.CheckAttributeTarget): Re-format.
3761         (Attribute.ApplyAttributes): Refactor, to various
3762         Attributable.ApplyAttributeBuilder methods.
3763         * decl.cs (MemberCore): Make Attributable.
3764         * class.cs (Accessor): Make Attributable.
3765         (MethodData.ApplyAttributes): Use proper attribute types, not
3766         attribute names.
3767         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
3768         (TypeContainer.ApplyAttributeBuilder)
3769         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
3770         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
3771         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
3772         (Operator.ApplyAttributeBuilder): New factored-out methods.
3773         * const.cs (Const.ApplyAttributeBuilder): Likewise.
3774         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
3775         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
3776         * parameter.cs (ParameterBase): New Attributable base class
3777         that can also represent Return types.
3778         (Parameter): Update to the changes.
3779
3780 2004-04-29  Jackson Harper  <jackson@ximian.com>
3781
3782         * driver.cs: Prefer the corlib system version when looking for
3783         assemblies in the GAC. This is still a hack, but its a better hack
3784         now.
3785         
3786 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
3787
3788         * decl.cs, enum.cs: Improved error 3005 reporting.
3789   
3790         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
3791         (related_symbols): New private member for list of symbols
3792         related to reported error/warning.
3793         
3794         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
3795
3796 2004-04-29  Martin Baulig  <martin@ximian.com>
3797
3798         * ecore.cs (Expression.Constantify): If we're an enum and
3799         TypeManager.TypeToCoreType() doesn't give us another type, use
3800         t.UnderlyingSystemType.  Fixes #56178.  
3801
3802 2004-04-29  Martin Baulig  <martin@ximian.com>
3803
3804         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
3805         interfaces and for each interface, only add members directly
3806         declared in that interface.  Fixes #53255.
3807
3808 2004-04-28  Martin Baulig  <martin@ximian.com>
3809
3810         * expression.cs (ConditionalLogicalOperator): Use a temporary
3811         variable for `left' to avoid that we evaluate it more than once;
3812         bug #52588.
3813
3814 2004-04-28  Martin Baulig  <martin@ximian.com>
3815
3816         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
3817         `void[]' (CS1547).
3818
3819 2004-04-28  Martin Baulig  <martin@ximian.com>
3820
3821         * statement.cs (LocalInfo.Resolve): Check whether the type is not
3822         void (CS1547).
3823
3824         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
3825         whether the type is not void (CS1547).
3826
3827 2004-04-28  Martin Baulig  <martin@ximian.com>
3828
3829         * expression.cs (Unary.DoResolveLValue): Override this and report
3830         CS0131 for anything but Operator.Indirection.
3831
3832 2004-04-28  Martin Baulig  <martin@ximian.com>
3833
3834         Committing a patch from Ben Maurer; see bug #50820.
3835
3836         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
3837         check for classes.
3838
3839         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
3840         classes.        
3841
3842 2004-04-28  Martin Baulig  <martin@ximian.com>
3843
3844         Committing a patch from Ben Maurer; see bug #50820.
3845
3846         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
3847         check for classes.
3848
3849         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
3850         classes.        
3851
3852 2004-04-28  Martin Baulig  <martin@ximian.com>
3853
3854         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
3855         (Block.AddLabel): Call DoLookupLabel() to only search in the
3856         current block.
3857
3858 2004-04-28  Martin Baulig  <martin@ximian.com>
3859
3860         * cfold.cs (ConstantFold.BinaryFold): Added special support for
3861         comparing StringConstants and NullLiterals in Equality and Inequality.
3862
3863 2004-04-28  Jackson Harper  <jackson@ximian.com>
3864
3865         * driver.cs: Attempt to load referenced assemblies from the
3866         GAC. This is the quick and dirty version of this method that
3867         doesnt take into account versions and just takes the first
3868         canidate found. Will be good enough for now as we will not have more
3869         then one version installed into the GAC until I update this method.
3870
3871 2004-04-28  Martin Baulig  <martin@ximian.com>
3872
3873         * typemanager.cs (TypeManager.CheckStructCycles): New public
3874         static method to check for cycles in the struct layout.
3875
3876         * rootcontext.cs (RootContext.PopulateTypes): Call
3877         TypeManager.CheckStructCycles() for each TypeContainer.
3878         [Note: We only need to visit each type once.]
3879
3880 2004-04-28  Martin Baulig  <martin@ximian.com>
3881
3882         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
3883
3884         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
3885         success and added `out object value'.  Use a `bool resolved' field
3886         to check whether we've already been called rather than
3887         `ConstantValue != null' since this breaks for NullLiterals.
3888
3889 2004-04-28  Raja R Harinath  <rharinath@novell.com>
3890
3891         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
3892         setting of this flag, since the 'set' method may be non-public.
3893
3894 2004-04-28  Raja R Harinath  <rharinath@novell.com>
3895
3896         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
3897         check on current_vector.Block.
3898
3899 2004-04-27  Martin Baulig  <martin@ximian.com>
3900
3901         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
3902         a field initializer.  Fixes #56459.
3903
3904 2004-04-27  Martin Baulig  <martin@ximian.com>
3905
3906         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
3907         we're not attempting to use an indexer.  Fixes #52154.
3908
3909 2004-04-27  Martin Baulig  <martin@ximian.com>
3910
3911         * statement.cs (Return): Don't create a return label if we don't
3912         need it; reverts my change from January 20th.  Thanks to Ben
3913         Maurer for this.
3914
3915 2004-04-27  Martin Baulig  <martin@ximian.com>
3916
3917         According to the spec, `goto' can only leave a nested scope, but
3918         never enter it.
3919
3920         * statement.cs (Block.LookupLabel): Only lookup in the current
3921         block, don't recurse into parent or child blocks.
3922         (Block.AddLabel): Check in parent and child blocks, report
3923         CS0140/CS0158 if we find a duplicate.
3924         (Block): Removed this indexer for label lookups.
3925         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
3926         this already does the error reporting for us.
3927
3928         * flowanalysis.cs
3929         (FlowBranching.UsageVector.Block): New public variable; may be null.
3930         (FlowBranching.CreateSibling): Added `Block' argument.
3931         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
3932         label for the target of a `goto' and check whether we're not
3933         leaving a `finally'.
3934
3935 2004-04-27  Martin Baulig  <martin@ximian.com>
3936
3937         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
3938         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
3939         just for returns).
3940
3941 2004-04-27  Martin Baulig  <martin@ximian.com>
3942
3943         * statement.cs (Block.AddLabel): Also check for implicit blocks
3944         and added a CS0158 check.
3945
3946 2004-04-27  Martin Baulig  <martin@ximian.com>
3947
3948         * flowanalysis.cs (FlowBranchingLoop): New class.
3949         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
3950         UsageVector's instead of an ArrayList.
3951         (FlowBranching.Label): Likewise.
3952         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
3953         (FlowBranching.AddBreakVector): New method.
3954
3955 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
3956
3957         * attribute.cs: Small regression fix: only convert the type if we
3958         the type is different, fixes System.Drawing build.
3959
3960 2004-04-27  Martin Baulig  <martin@ximian.com>
3961
3962         * attribute.cs (Attribute.Resolve): If we have a constant value
3963         for a named field or property, implicity convert it to the correct
3964         type.
3965
3966 2004-04-27  Raja R Harinath  <rharinath@novell.com>
3967
3968         * statement.cs (Block.Block): Implicit blocks share
3969         'child_variable_names' fields with parent blocks.
3970         (Block.AddChildVariableNames): Remove.
3971         (Block.AddVariable): Mark variable as "used by a child block" in
3972         every surrounding block.
3973         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
3974         been used in a child block, complain about violation of "Invariant
3975         meaning in blocks" rule.
3976         * cs-parser.jay (declare_local_variables): Don't use
3977         AddChildVariableNames.
3978         (foreach_statement): Don't create an implicit block: 'foreach'
3979         introduces a scope.
3980
3981 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
3982
3983         * convert.cs (ImplicitNumericConversion): 0 is also positive when
3984         converting from 0L to ulong.  Fixes 57522.
3985
3986 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
3987
3988         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
3989         derived class hides via 'new' keyword field from base class (test-242.cs).
3990         TODO: Handle this in the more general way.
3991         
3992         * class.cs (CheckBase): Ditto.
3993
3994 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
3995
3996         * decl.cs (caching_flags): New member for storing cached values
3997         as bit flags.
3998         (MemberCore.Flags): New enum where bit flags for caching_flags
3999         are defined.
4000         (MemberCore.cls_compliance): Moved to caching_flags.
4001         (DeclSpace.Created): Moved to caching_flags.
4002
4003         * class.cs: Use caching_flags instead of DeclSpace.Created
4004         
4005 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
4006
4007         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
4008         if we are only a derived class, not a nested class.
4009
4010         * typemanager.cs: Same as above, but do this at the MemberLookup
4011         level (used by field and methods, properties are handled in
4012         PropertyExpr).   Allow for the qualified access if we are a nested
4013         method. 
4014
4015 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
4016
4017         * class.cs: Refactoring.
4018         (IMethodData): New inteface; Holds links to parent members
4019         to avoid member duplication (reduced memory allocation).
4020         (Method): Implemented IMethodData interface.
4021         (PropertyBase): New inner classes for get/set methods.
4022         (PropertyBase.PropertyMethod): Implemented IMethodData interface
4023         (Event): New inner classes for add/remove methods.
4024         (Event.DelegateMethod): Implemented IMethodData interface.
4025
4026         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
4027         EmitContext (related to class.cs refactoring).
4028
4029 2004-04-21  Raja R Harinath  <rharinath@novell.com>
4030
4031         * delegate.cs (Delegate.VerifyApplicability): If the number of
4032         arguments are the same as the number of parameters, first try to
4033         verify applicability ignoring  any 'params' modifier on the last
4034         parameter.
4035         Fixes #56442.
4036
4037 2004-04-16  Raja R Harinath  <rharinath@novell.com>
4038
4039         * class.cs (TypeContainer.AddIndexer): Use
4040         'ExplicitInterfaceName' to determine if interface name was
4041         explicitly specified.  'InterfaceType' is not initialized at this time.
4042         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
4043         Indexers array is already in the required order.  Initialize
4044         'IndexerName' only if there are normal indexers.
4045         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
4046         (TypeContainer.Emit): Emit DefaultMember attribute only if
4047         IndexerName is initialized.
4048         Fixes #56300.
4049
4050 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
4051
4052         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
4053         Fixes #57007
4054
4055 2004-04-15  Raja R Harinath  <rharinath@novell.com>
4056
4057         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
4058         attributes.
4059         Fix for #56456.
4060
4061         * attribute.cs (Attribute.Resolve): Check for duplicate named
4062         attributes.
4063         Fix for #56463.
4064
4065 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
4066
4067         * iterators.cs (MarkYield): track whether we are in an exception,
4068         and generate code accordingly.  Use a temporary value to store the
4069         result for our state.
4070
4071         I had ignored a bit the interaction of try/catch with iterators
4072         since their behavior was not entirely obvious, but now it is
4073         possible to verify that our behavior is the same as MS .NET 2.0
4074
4075         Fixes 54814
4076
4077 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
4078
4079         * iterators.cs: Avoid creating temporaries if there is no work to
4080         do. 
4081
4082         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
4083         Enumerations, use TypeManager.EnumToUnderlying and call
4084         recursively. 
4085
4086         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
4087         bug #57013
4088
4089         (This.Emit): Use EmitContext.EmitThis to emit our
4090         instance variable.
4091
4092         (This.EmitAssign): Ditto.
4093
4094         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
4095         codepaths, we will move all the functionality into
4096         Mono.CSharp.This 
4097
4098         (FieldExpr.EmitAssign): Ditto.
4099
4100         This fixes several hidden bugs that I uncovered while doing a code
4101         review of this today.
4102
4103         * codegen.cs (EmitThis): reworked so the semantics are more clear
4104         and also support value types "this" instances.
4105
4106         * iterators.cs: Changed so that for iterators in value types, we
4107         do not pass the value type as a parameter.  
4108
4109         Initialization of the enumerator helpers is now done in the caller
4110         instead of passing the parameters to the constructors and having
4111         the constructor set the fields.
4112
4113         The fields have now `assembly' visibility instead of private.
4114
4115 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
4116
4117         * expression.cs (Argument.Resolve): Check if fields passed as ref
4118         or out are contained in a MarshalByRefObject.
4119
4120         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
4121         another compiler type.
4122
4123 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
4124
4125         * class.cs (Indexer.Define): use the new name checking method.
4126         Also, return false on an error.
4127         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
4128         (is_identifier_[start/part]_character): make static.
4129
4130 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
4131
4132         * expression.cs (Binary.ResolveOperator): Do no append strings
4133         twice: since we can be invoked more than once (array evaluation)
4134         on the same concatenation, take care of this here.  Based on a fix
4135         from Ben (bug #56454)
4136
4137 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
4138
4139         * codegen.cs: Fix another case where CS1548 must be reported (when 
4140         delay-sign isn't specified and no private is available #56564). Fix
4141         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
4142         error when MCS is used on the MS runtime and we need to delay-sign 
4143         (which seems unsupported by AssemblyBuilder - see #56621).
4144
4145 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
4146
4147         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
4148         (TypeManager.ComputeNamespaces): Faster implementation for
4149         Microsoft runtime.
4150
4151         * compiler.csproj: Updated AssemblyName to mcs.
4152
4153 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
4154
4155         * rootcontext.cs: Add new types to the boot resolution.
4156
4157         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
4158         MulticastDelegate is not allowed.
4159
4160         * typemanager.cs: Add new types to lookup: System.TypedReference
4161         and ArgIterator.
4162
4163         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
4164         check for TypedReference or ArgIterator, they are not allowed. 
4165
4166         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
4167         makes us properly catch 1510 in some conditions (see bug 56016 for
4168         details). 
4169
4170 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
4171
4172         * CryptoConvert.cs: update from corlib version
4173         with endian fixes.
4174
4175 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
4176
4177         * class.cs (Indexer.Define): Check indexername declaration
4178
4179 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
4180
4181         * attribute.cs (IsClsCompliant): Fixed problem with handling
4182         all three states (compliant, not-compliant, undetected).
4183
4184 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
4185
4186         * attribute.cs (Attribute): Location is now public.
4187         (Resolve): Store resolved arguments (pos_values) in attribute class.
4188         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
4189         (GetClsCompliantAttributeValue): New method that gets
4190         CLSCompliantAttribute value.
4191         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
4192         if exists else null.
4193         (AttributeTester): New class for CLS-Compliant verification routines.
4194
4195         * class.cs (Emit): Add CLS-Compliant verification.
4196         (Method.GetSignatureForError): Implemented.
4197         (Constructor.GetSignatureForError): Implemented
4198         (Constructor.HasCompliantArgs): Returns if constructor has
4199         CLS-Compliant arguments.
4200         (Constructor.Emit): Override.
4201         (Construcor.IsIdentifierClsCompliant): New method; For constructors
4202         is needed to test only parameters.
4203         (FieldBase.GetSignatureForError): Implemented.
4204         (TypeContainer): New member for storing base interfaces.
4205         (TypeContainer.FindMembers): Search in base interfaces too.
4206
4207         * codegen.cs (GetClsComplianceAttribute): New method that gets
4208         assembly or module CLSCompliantAttribute value.
4209         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
4210         for assembly.
4211         (ModuleClass.Emit): Add error 3012 test.
4212
4213         * const.cs (Emit): Override and call base for CLS-Compliant tests.
4214
4215         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
4216         state for all decl types.
4217         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
4218         if CLS-Compliant tests are required.
4219         (IsClsCompliaceRequired): New method. Analyze whether code
4220         must be CLS-Compliant.
4221         (IsExposedFromAssembly): New method. Returns true when MemberCore
4222         is exposed from assembly.
4223         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
4224         value or gets cached value.
4225         (HasClsCompliantAttribute): New method. Returns true if MemberCore
4226         is explicitly marked with CLSCompliantAttribute.
4227         (IsIdentifierClsCompliant): New abstract method. This method is
4228         used to testing error 3005.
4229         (IsIdentifierAndParamClsCompliant): New method. Common helper method
4230         for identifier and parameters CLS-Compliant testing.
4231         (VerifyClsCompliance): New method. The main virtual method for
4232         CLS-Compliant verifications.
4233         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
4234         null. I don't know why is null (too many public members !).
4235         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
4236         and get value of first CLSCompliantAttribute that found.
4237
4238         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
4239         (VerifyClsCompliance): Override and add extra tests.
4240
4241         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
4242         clscheck- disable CLS-Compliant verification event if assembly is has
4243         CLSCompliantAttribute(true).
4244
4245         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
4246         ApllyAttribute is now called in emit section as in the other cases.
4247         Possible future Emit integration.
4248         (IsIdentifierClsCompliant): New override.
4249         (VerifyClsCompliance): New override.
4250         (GetEnumeratorName): Returns full enum name.
4251
4252         * parameter.cs (GetSignatureForError): Implemented.
4253
4254         * report.cs (WarningData): New struct for Warning message information.
4255         (LocationOfPreviousError): New method.
4256         (Warning): New method. Reports warning based on the warning table.
4257         (Error_T): New method. Reports error based on the error table.
4258
4259         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
4260         verifications are done here.
4261
4262         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
4263
4264         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
4265         CLSCompliantAttribute.
4266         (all_imported_types): New member holds all imported types from other
4267         assemblies.
4268         (LoadAllImportedTypes): New method fills static table with exported types
4269         from all referenced assemblies.
4270         (Modules): New property returns all assembly modules.
4271
4272 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
4273
4274         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
4275         throwing a parser error.
4276
4277         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
4278         which removes the hardcoded get_/set_ prefixes for properties, as
4279         IL allows for the properties to be named something else.  
4280
4281         Bug #56013
4282
4283         * expression.cs: Do not override operand before we know if it is
4284         non-null.  Fix 56207
4285
4286 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4287
4288         * typemanager.cs: support for pinned variables.
4289
4290 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4291
4292         * decl.cs, typemanager.cs: Avoid using an arraylist
4293         as a buffer if there is only one result set.
4294
4295 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4296
4297         * expression.cs: Make sure you cant call a static method
4298         with an instance expression, bug #56174.
4299
4300 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
4301
4302         * class.cs (IsDuplicateImplementation): Improve error reporting to
4303         flag 663 (method only differs in parameter modifier).
4304
4305         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
4306         in preprocessor directives.
4307
4308         * location.cs (LookupFile): Allow for the empty path.
4309
4310         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
4311         better approach for some of that patch, but its failing with the
4312         CharSet enumeration.  For now try/catch will do.
4313
4314         * typemanager.cs: Do not crash if a struct does not have fields.
4315         Fixes 56150.
4316
4317 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4318
4319         * expression.cs: cs0213, cant fix a fixed expression.
4320         fixes 50231.
4321
4322 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4323
4324         * cs-parser.jay: detect invalid embeded statements gracefully.
4325         bug #51113.
4326
4327 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4328
4329         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
4330         As a regex:
4331         s/
4332         the invocation type may not be a subclass of the tye of the item/
4333         The type of the item must be a subclass of the invocation item.
4334         /g
4335
4336         Fixes bug #50820.
4337
4338 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
4339
4340         * attribute.cs: Added methods to get a string and a bool from an
4341         attribute. Required to information from AssemblyKeyFileAttribute,
4342         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
4343         * codegen.cs: Modified AssemblyName creation to include support for
4344         strongnames. Catch additional exceptions to report them as CS1548.
4345         * compiler.csproj: Updated include CryptoConvert.cs.
4346         * compiler.csproj.user: Removed file - user specific configuration.
4347         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
4348         Mono.Security assembly. The original class is maintained and tested in
4349         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
4350         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
4351         like CSC 8.0 (C# v2) supports.
4352         * Makefile: Added CryptoConvert.cs to mcs sources.
4353         * rootcontext.cs: Added new options for strongnames.
4354
4355 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
4356
4357         * driver.cs: For --expect-error, report error code `2'
4358         if the program compiled with no errors, error code `1' if
4359         it compiled with an error other than the one expected.
4360
4361 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
4362
4363         * compiler.csproj: Updated for Visual Studio .NET 2003.
4364         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
4365         * compiler.sln: Updated for Visual Studio .NET 2003.
4366
4367 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
4368
4369         * expression.cs: Fix bug #47234. We basically need to apply the
4370         rule that we prefer the conversion of null to a reference type
4371         when faced with a conversion to 'object' (csc behaviour).
4372
4373 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4374
4375         * statement.cs: Shorter form for foreach, eliminates
4376         a local variable. r=Martin.
4377
4378 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4379
4380         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
4381         checks if we can use brtrue/brfalse to test for 0.
4382         * expression.cs: use the above in the test for using brtrue/brfalse.
4383         cleanup code a bit.
4384
4385 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4386
4387         * expression.cs: Rewrite string concat stuff. Benefits:
4388
4389         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
4390         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
4391         rather than a concat chain.
4392
4393         * typemanager.cs: Add lookups for more concat overloads.
4394
4395 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4396
4397         * expression.cs: Emit shorter il code for array init.
4398
4399         newarr
4400         dup
4401         // set 1
4402
4403         // set 2
4404
4405         newarr
4406         stloc.x
4407
4408         ldloc.x
4409         // set 1
4410
4411         ldloc.x
4412         // set 2
4413
4414 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
4415
4416         * statement.cs: Before, two switch blocks would be merged if the
4417         total size of the blocks (end_item - begin_item + 1) was less than
4418         two times the combined sizes of the blocks.
4419
4420         Now, it will only merge if after the merge at least half of the
4421         slots are filled.
4422
4423         fixes 55885.
4424
4425 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
4426
4427         * class.cs : csc build fix for GetMethods(). See bug #52503.
4428
4429 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
4430
4431         * expression.cs: Make sure fp comparisons work with NaN.
4432         This fixes bug #54303. Mig approved this patch a long
4433         time ago, but we were not able to test b/c the runtime
4434         had a related bug.
4435
4436 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
4437
4438         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
4439
4440 2004-03-19  Martin Baulig  <martin@ximian.com>
4441
4442         * class.cs (MemberCore.IsDuplicateImplementation): Report the
4443         error here and not in our caller.
4444
4445 2004-03-19  Martin Baulig  <martin@ximian.com>
4446
4447         * interface.cs: Completely killed this file.
4448         (Interface): We're now a TypeContainer and live in class.cs.
4449
4450         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
4451         argument; we're now also called for interfaces.
4452         (TypeContainer.DefineMembers): Allow this method being called
4453         multiple times.
4454         (TypeContainer.GetMethods): New public method; formerly known as
4455         Interface.GetMethod().  This is used by PendingImplementation.
4456         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
4457         it's now private and non-static.
4458         (Interface): Moved this here; it's now implemented similar to
4459         Class and Struct.
4460         (Method, Property, Event, Indexer): Added `bool is_interface'
4461         argument to their .ctor's.
4462         (MemberBase.IsInterface): New public field.
4463
4464         * cs-parser.jay: Create normal Method, Property, Event, Indexer
4465         instances instead of InterfaceMethod, InterfaceProperty, etc.
4466         (opt_interface_base): Removed; we now use `opt_class_base' instead.
4467         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
4468
4469 2004-03-19  Martin Baulig  <martin@ximian.com>
4470
4471         * class.cs (MethodCore.IsDuplicateImplementation): New private
4472         method which does the CS0111 checking.
4473         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
4474         Use IsDuplicateImplementation().
4475
4476 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
4477
4478         * decl.cs (FindMemberToOverride): New method to find the correct
4479         method or property to override in the base class.
4480         * class.cs
4481             - Make Method/Property use the above method to find the
4482               version in the base class.
4483             - Remove the InheritableMemberSignatureCompare as it is now
4484               dead code.
4485
4486         This patch makes large code bases much faster to compile, as it is
4487         O(n) rather than O(n^2) to do this validation.
4488
4489         Also, it fixes bug 52458 which is that nested classes are not
4490         taken into account when finding the base class member.
4491
4492         Reviewed/Approved by Martin.
4493
4494 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
4495
4496         * interface.cs: In all interface classes removed redundant
4497         member initialization.
4498
4499 2004-03-16  Martin Baulig  <martin@ximian.com>
4500
4501         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
4502
4503 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
4504
4505         * decl.cs (DefineTypeAndParents): New helper method to define a
4506         type's containers before the type itself is defined;  This is a
4507         bug exposed by the recent changes to Windows.Forms when an
4508         implemented interface was defined inside a class that had not been
4509         built yet.   
4510
4511         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
4512
4513         (Check): Loop correctly to report errors modifiers
4514         (UNSAFE was not in the loop, since it was the same as TOP).
4515
4516         * interface.cs: Every interface member now takes a ModFlags,
4517         instead of a "is_new" bool, which we set on the base MemberCore. 
4518
4519         Every place where we called "UnsafeOk" in the interface, now we
4520         call the proper member (InterfaceMethod.UnsafeOK) instead to get
4521         the unsafe settings from the member declaration instead of the
4522         container interface. 
4523
4524         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
4525
4526         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
4527         `set_indexer_name' to the pending bits (one per type).
4528
4529         We fixed a bug today that was picking the wrong method to
4530         override, since for properties the existing InterfaceMethod code
4531         basically ignored the method name.  Now we make sure that the
4532         method name is one of the valid indexer names.
4533
4534 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
4535  
4536         * support.cs (SeekableStreamReader): Keep track of stream byte
4537         positions and don't mix them with character offsets to the buffer.
4538
4539         Patch from Gustavo Giráldez
4540
4541 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
4542
4543         * interface.cs (InterfaceSetGetBase): Removed double member
4544         initialization, base class does it as well.
4545
4546 2004-03-13  Martin Baulig  <martin@ximian.com>
4547
4548         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
4549         when compiling corlib.
4550
4551 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
4552
4553         * convert.cs (ExplicitConversion): We were reporting an error on
4554         certain conversions (object_type source to a value type, when the
4555         expression was `null') before we had a chance to pass it through
4556         the user defined conversions.
4557
4558         * driver.cs: Replace / and \ in resource specifications to dots.
4559         Fixes 50752
4560
4561         * class.cs: Add check for duplicate operators.  Fixes 52477
4562
4563 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
4564
4565         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
4566         that are in the middle of the statements, not only at the end.
4567         Fixes #54987
4568
4569         * class.cs (TypeContainer.AddField): No longer set the
4570         `HaveStaticConstructor' flag, now we call it
4571         `UserDefineStaticConstructor' to diferentiate the slightly
4572         semantic difference.
4573
4574         The situation is that we were not adding BeforeFieldInit (from
4575         Modifiers.TypeAttr) to classes that could have it.
4576         BeforeFieldInit should be set to classes that have no static
4577         constructor. 
4578
4579         See:
4580
4581         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
4582
4583         And most importantly Zoltan's comment:
4584
4585         http://bugzilla.ximian.com/show_bug.cgi?id=44229
4586
4587         "I think beforefieldinit means 'it's ok to initialize the type sometime 
4588          before its static fields are used', i.e. initialization does not need
4589          to be triggered by the first access to the type. Setting this flag
4590          helps the JIT to compile better code, since it can run the static
4591          constructor at JIT time, and does not need to generate code to call it
4592          (possibly lots of times) at runtime. Unfortunately, mcs does not set
4593          this flag for lots of classes like String. 
4594          
4595          csc sets this flag if the type does not have an explicit static 
4596          constructor. The reasoning seems to be that if there are only static
4597          initalizers for a type, and no static constructor, then the programmer
4598          does not care when this initialization happens, so beforefieldinit
4599          can be used.
4600          
4601          This bug prevents the AOT compiler from being usable, since it 
4602          generates so many calls to mono_runtime_class_init that the AOT code
4603          is much slower than the JITted code. The JITted code is faster, 
4604          because it does not generate these calls if the vtable is type is
4605          already initialized, which is true in the majority of cases. But the
4606          AOT compiler can't do this."
4607
4608 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
4609
4610         * class.cs (MethodData.Emit): Refactor the code so symbolic
4611         information is generated for destructors;  For some reasons we
4612         were taking a code path that did not generate symbolic information
4613         before. 
4614
4615 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
4616
4617         * class.cs: Create a Constructor.CheckBase method that
4618         takes care of all validation type code. The method
4619         contains some code that was moved from Define.
4620
4621         It also includes new code that checks for duplicate ctors.
4622         This fixes bug #55148.
4623
4624 2004-03-09  Joshua Tauberer <tauberer@for.net>
4625
4626         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
4627         a { ... }-style array creation invokes EmitStaticInitializers
4628         which is not good for reference-type arrays.  String, decimal
4629         and now null constants (NullCast) are not counted toward
4630         static initializers.
4631
4632 2004-03-05  Martin Baulig  <martin@ximian.com>
4633
4634         * location.cs (SourceFile.HasLineDirective): New public field;
4635         specifies whether the file contains or is referenced by a "#line"
4636         directive.
4637         (Location.DefineSymbolDocuments): Ignore source files which
4638         either contain or are referenced by a "#line" directive.        
4639
4640 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
4641
4642         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
4643         direct access to our parent, so check the method inline there.
4644
4645 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
4646
4647         * expression.cs (Invocation.EmitCall): Miguel's last commit
4648         caused a regression. If you had:
4649
4650             T t = null;
4651             t.Foo ();
4652
4653         In Foo the implict this would be null.
4654
4655 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
4656
4657         * expression.cs (Invocation.EmitCall): If the method is not
4658         virtual, do not emit a CallVirt to it, use Call.
4659
4660         * typemanager.cs (GetFullNameSignature): Improve the method to
4661         cope with ".ctor" and replace it with the type name.
4662
4663         * class.cs (ConstructorInitializer.Resolve): Now the method takes
4664         as an argument the ConstructorBuilder where it is being defined,
4665         to catch the recursive constructor invocations.
4666
4667 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
4668
4669         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
4670         routines to check if a type is an enumerable/enumerator allow
4671         classes that implement the IEnumerable or IEnumerator interfaces.
4672
4673         * class.cs (Property, Operator): Implement IIteratorContainer, and
4674         implement SetYields.
4675
4676         (Property.Define): Do the block swapping for get_methods in the
4677         context of iterators.   We need to check if Properties also
4678         include indexers or not.
4679
4680         (Operator): Assign the Block before invoking the
4681         OperatorMethod.Define, so we can trigger the Iterator code
4682         replacement. 
4683
4684         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
4685         Property and Operator classes are not created when we parse the
4686         declarator but until we have the block completed, so we use a
4687         singleton SimpleIteratorContainer.Simple to flag whether the
4688         SetYields has been invoked.
4689
4690         We propagate this setting then to the Property or the Operator to
4691         allow the `yield' to function.
4692
4693 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
4694
4695         * codegen.cs: Implemented attribute support for modules.
4696         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
4697         Assembly/Module functionality.
4698
4699         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
4700         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
4701         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
4702
4703 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
4704
4705         * interface.cs (FindMembers): The operation is performed on all base
4706         interfaces and not only on the first. It is required for future CLS Compliance patch.
4707
4708 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
4709
4710         * statement.cs, codegen.cs:
4711         This patch deals with patterns such as:
4712
4713         public class List : IEnumerable {
4714
4715                 public MyEnumerator GetEnumerator () {
4716                         return new MyEnumerator(this);
4717                 }
4718
4719                 IEnumerator IEnumerable.GetEnumerator () {
4720                         ...
4721                 }
4722                 
4723                 public struct MyEnumerator : IEnumerator {
4724                         ...
4725                 }
4726         }
4727
4728         Before, there were a few things we did wrong:
4729         1) we would emit callvirt on a struct, which is illegal
4730         2) we emited ldarg when we needed to emit ldarga
4731         3) we would mistakenly call the interface methods on an enumerator
4732         type that derived from IEnumerator and was in another assembly. For example:
4733
4734         public class MyEnumerator : IEnumerator
4735
4736         Would have the interface methods called, even if there were public impls of the
4737         method. In a struct, this lead to invalid IL code.
4738
4739 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
4740
4741         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
4742           renamed to Emit.
4743
4744         * delegate.cs (Define): Fixed crash when delegate type is undefined.
4745
4746 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
4747
4748         * cs-parser.jay: Fix small regression: we were not testing V2
4749         compiler features correctly.
4750
4751         * interface.cs: If the emit context is null, then create one
4752
4753 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
4754
4755         * decl.cs (GetSignatureForError): New virtual method to get full name
4756           for error messages.
4757
4758         * attribute.cs (IAttributeSupport): New interface for attribute setting.
4759           Now it is possible to rewrite ApplyAttributes method to be less if/else.
4760
4761         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
4762           Duplicated members and code in these classes has been removed.
4763           Better encapsulation in these classes.
4764
4765 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
4766
4767         * assign.cs (Assign.DoResolve): When dealing with compound
4768         assignments, there is a new rule in ECMA C# 2.4 (might have been
4769         there before, but it is documented here) that states that in:
4770
4771         a op= b;
4772
4773         If b is of type int, and the `op' is a shift-operator, then the
4774         above is evaluated as:
4775
4776         a = (int) a op b 
4777
4778         * expression.cs (Binary.ResolveOperator): Instead of testing for
4779         int/uint/long/ulong, try to implicitly convert to any of those
4780         types and use that in pointer arithmetic.
4781
4782         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
4783         method to print information for from the type, not from the
4784         null-method we were given.
4785
4786 2004-02-01  Duncan Mak  <duncan@ximian.com>
4787
4788         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
4789         parsing for cmd, fixes bug #53694.
4790
4791 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
4792
4793         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
4794         in the member name duplication tests. Property and operator name duplication
4795         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
4796
4797 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
4798
4799         * interface.cs (PopulateMethod): Fixed crash when interface method
4800         returns not existing type (error test cs0246-3.cs).
4801
4802 2004-02-02  Ravi Pratap M <ravi@ximian.com>
4803
4804         * cs-parser.jay (interface_accessors): Re-write actions to also
4805         store attributes attached to get and set methods. Fix spelling
4806         while at it.
4807
4808         (inteface_property_declaration): Modify accordingly.
4809
4810         (InterfaceAccessorInfo): New helper class to store information to pass
4811         around between rules that use interface_accessors.
4812
4813         * interface.cs (Emit): Apply attributes on the get and set
4814         accessors of properties and indexers too.
4815
4816         * attribute.cs (ApplyAttributes): Modify accordingly to use the
4817         right MethodBuilder when applying attributes to the get and set accessors.
4818
4819 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
4820
4821         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
4822
4823 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
4824
4825         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
4826
4827 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
4828
4829         * cs-parser.jay: Remove YIELD token, instead use the new grammar
4830         changes that treat `yield' specially when present before `break'
4831         or `return' tokens.
4832
4833         * cs-tokenizer.cs: yield is no longer a keyword.
4834
4835 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
4836
4837         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
4838         setting for default constructors.
4839         For default constructors are almost every time set wrong Modifier. The
4840         generated IL code has been alright. But inside mcs this values was
4841         wrong and this was reason why several of my CLS Compliance tests
4842         failed.
4843
4844 2004-01-22  Martin Baulig  <martin@ximian.com>
4845
4846         * cs-parser.jay (namespace_or_type_name): Return an Expression,
4847         not a QualifiedIdentifier.  This is what `type_name_expression'
4848         was previously doing.
4849         (type_name_expression): Removed; the code is now in
4850         `namespace_or_type_name'.
4851         (qualified_identifier): Removed, use `namespace_or_type_name'
4852         instead.
4853         (QualifiedIdentifier): Removed this class.      
4854
4855 2004-01-22  Martin Baulig  <martin@ximian.com>
4856
4857         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
4858         not a string as alias name.
4859
4860 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
4861
4862         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
4863         #52730 bug, and instead compute correctly the need to use a
4864         temporary variable when requesting an address based on the
4865         static/instace modified of the field and the constructor.
4866  
4867 2004-01-21  Martin Baulig  <martin@ximian.com>
4868
4869         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
4870         class and namespace before looking up aliases.  Fixes #52517.
4871
4872 2004-01-21  Martin Baulig  <martin@ximian.com>
4873
4874         * flowanalysis.cs (UsageVector.Merge): Allow variables being
4875         assinged in a 'try'; fixes exception4.cs.
4876
4877 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
4878         * class.cs : Implemented parameter-less constructor for TypeContainer
4879
4880         * decl.cs: Attributes are now stored here. New property OptAttributes
4881
4882         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
4883
4884         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
4885
4886 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
4887
4888         * typemanager.cs (CSharpSignature): Now reports also inner class name.
4889           (CSharpSignature): New method for indexer and property signature.
4890
4891 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
4892
4893         * pending.cs (IsVirtualFilter): Faster implementation.
4894
4895 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
4896
4897         * typemanager.cs: Avoid inclusion of same assembly more than once.
4898
4899 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
4900
4901         * cs-parser.jay: Fixed problem where the last assembly attribute
4902           has been applied also to following declaration (class, struct, etc.)
4903           
4904 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
4905
4906         * class.cs: Added error CS0538, CS0539 reporting.
4907         Fixed crash on Microsoft runtime when field type is void.
4908
4909         * cs-parser.jay: Added error CS0537 reporting.
4910
4911         * pending.cs: Added error CS0535 reporting.
4912         Improved error report for errors CS0536, CS0534.
4913
4914 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
4915
4916         Merge a few bits from the Anonymous Method MCS tree.
4917
4918         * statement.cs (ToplevelBlock): New class for toplevel methods,
4919         will hold anonymous methods, lifted variables.
4920
4921         * cs-parser.jay: Create toplevel blocks for delegates and for
4922         regular blocks of code. 
4923
4924 2004-01-20  Martin Baulig  <martin@ximian.com>
4925
4926         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
4927         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
4928         and `NeedExplicitReturn'; added `IsLastStatement'.
4929         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
4930         have a `ReturnLabel' or we're not unreachable.
4931
4932         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
4933         child's reachability; don't just override ours with it.  Fixes
4934         #58058 (lluis's example).
4935         (FlowBranching): Added public InTryOrCatch(), InCatch(),
4936         InFinally(), InLoop(), InSwitch() and
4937         BreakCrossesTryCatchBoundary() methods.
4938
4939         * statement.cs (Return): Do all error checking in Resolve().
4940         Unless we are the last statement in a top-level block, always
4941         create a return label and jump to it.
4942         (Break, Continue): Do all error checking in Resolve(); also make
4943         sure we aren't leaving a `finally'.
4944         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
4945         statement in a top-level block.
4946         (Block.Flags): Added `IsDestructor'.
4947         (Block.IsDestructor): New public property.
4948
4949 2004-01-20  Martin Baulig  <martin@ximian.com>
4950
4951         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
4952
4953 2004-01-20  Martin Baulig  <martin@ximian.com>
4954
4955         * statement.cs (Statement.ResolveUnreachable): New public method.
4956         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
4957         (Block.Resolve): Resolve unreachable statements.
4958
4959 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
4960
4961         * expression.cs: We need to fix the case where we do
4962         not have a temp variable here.
4963
4964         * assign.cs: Only expression compound assignments need
4965         temporary variables.
4966
4967 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
4968
4969         * flowanalysis.cs: Reduce memory allocation in a few ways:
4970           - A block with no variables should not allocate a bit
4971             vector for itself.
4972           - A method with no out parameters does not need any tracking
4973             for assignment of the parameters, so we need not allocate
4974             any data for it.
4975           - The arrays:
4976                 public readonly Type[] VariableTypes;
4977                 public readonly string[] VariableNames;
4978             Are redundant. The data is already stored in the variable
4979             map, so we need not allocate another array for it.
4980           - We need to add alot of checks for if (params | locals) == null
4981             due to the first two changes.
4982
4983 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
4984
4985         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
4986         implement IMemoryLocation, we store a copy on a local variable and
4987         take the address of it.  Patch from Benjamin Jemlich
4988
4989         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
4990         to use a special "type_name_expression" rule which reduces the
4991         number of "QualifiedIdentifier" classes created, and instead
4992         directly creates MemberAccess expressions.
4993
4994 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
4995
4996         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
4997         that fixes #52853.  Null literal assignment to ValueType
4998
4999         * class.cs (MethodData.Emit): Instead of checking the name of the
5000         method to determine if its a destructor, create a new derived
5001         class from Method called Destructor, and test for that.  
5002
5003         * cs-parser.jay: Create a Destructor object instead of a Method.  
5004
5005         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
5006
5007         Fixes: 52933
5008
5009 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
5010
5011         * expression.cs (Binary.ResolveOperator): Perform an implicit
5012         conversion from MethodGroups to their delegate types on the
5013         Addition operation.
5014
5015         * delegate.cs: Introduce a new class DelegateCreation that is the
5016         base class for `NewDelegate' and `ImplicitDelegateCreation',
5017         factor some code in here.
5018
5019         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
5020         conversion from MethodGroups to compatible delegate types. 
5021
5022         * ecore.cs (Expression.Resolve): Do not flag error 654
5023         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
5024         we allow conversions from MethodGroups to delegate types now.
5025
5026         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
5027         assignments in v2 either.
5028
5029 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
5030
5031         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
5032         static read-only fields in ctors.
5033
5034         Applied patch from Benjamin Jemlich 
5035
5036         * expression.cs (UnaryMutator): Avoid leaking local variables. 
5037
5038 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
5039
5040         * cs-tokenizer.cs (IsCastToken): Allow the various native types
5041         here to return true, as they can be used like this:
5042
5043                 (XXX) int.MEMBER ()
5044
5045         Fixed 49836 and all the other dups
5046
5047 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
5048
5049         * driver.cs: Implement /win32res and /win32icon.
5050
5051 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
5052
5053         * cs-parser.jay: Add a rule to improve error handling for the
5054         common mistake of placing modifiers after the type.
5055
5056 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
5057
5058         * cs-parser.jay (interface_event_declaration): Catch
5059         initialization of events on interfaces, and report cs0068
5060
5061         * cs-parser.jay (interface_event_declaration): Catch
5062         initialization of events. 
5063
5064         * ecore.cs: Better report missing constructors.
5065
5066         * expression.cs (Binary.ResolveOperator): My previous bug fix had
5067         the error reporting done in the wrong place.  Fix.
5068
5069         * expression.cs (Binary.ResolveOperator): Catch the 
5070         operator + (E x, E y) error earlier, and later allow for implicit
5071         conversions in operator +/- (E e, U x) from U to the underlying
5072         type of E.
5073
5074         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
5075         52596, if the container class is abstract, the default constructor
5076         is protected otherwise its public (before, we were always public).
5077
5078         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
5079         fixed statement.
5080
5081         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
5082         Jemlich that fixes bug #52597, MCS was generating invalid code for
5083         idisposable structs.   Thanks to Ben for following up with this
5084         bug as well.
5085
5086 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
5087
5088         * driver.cs: Allow assemblies without code to be generated, fixes
5089         52230.
5090
5091 2004-01-07  Nick Drochak <ndrochak@gol.com>
5092
5093         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
5094
5095 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
5096
5097         * cs-parser.jay: Add rules to improve error reporting if fields or
5098         methods are declared at the namespace level (error 116)
5099
5100         * Add rules to catch event add/remove
5101
5102 2004-01-04  David Sheldon <dave-mono@earth.li>
5103
5104   * expression.cs: Added matching ")" to error message for 
5105   CS0077
5106
5107 2004-01-03 Todd Berman <tberman@gentoo.org>
5108
5109         * ecore.cs, attribute.cs:
5110         Applying fix from #52429.
5111
5112 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5113
5114         * ecore.cs, expression.cs, statement.cs:
5115         Total rewrite of how we handle branching. We
5116         now handle complex boolean expressions with fewer
5117         jumps. As well if (x == 0) no longer emits a ceq.
5118
5119         if (x is Foo) is much faster now, because we generate
5120         better code.
5121
5122         Overall, we get a pretty big improvement on our benchmark
5123         tests. The code we generate is smaller and more readable.
5124
5125         I did a full two-stage bootstrap. The patch was reviewed
5126         by Martin and Miguel.
5127
5128 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5129
5130         * cs-parser.jay: Make primary_expression not take a QI.
5131         we dont need this because the member_access rule covers
5132         us here. So we replace the rule with just IDENTIFIER.
5133
5134         This has two good effects. First, we remove a s/r conflict.
5135         Second, we allocate many fewer QualifiedIdentifier objects.
5136
5137 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5138
5139         * attribute.cs: Handle MarshalAs attributes as pseudo, and
5140         set the correct information via SRE. This prevents
5141         hanging on the MS runtime. Fixes #29374.
5142
5143 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5144
5145         * convert.cs: correctly handle conversions to value types
5146         from Enum and ValueType as unboxing conversions.
5147
5148         Fixes bug #52569. Patch by Benjamin Jemlich.
5149
5150 2004-01-02  Ravi Pratap  <ravi@ximian.com>
5151
5152         * expression.cs (BetterConversion): Prefer int -> uint
5153         over int -> ulong (csc's behaviour). This fixed bug #52046.
5154
5155 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
5156
5157         * decl.cs (MemberCache.FindMembers): now returns a
5158         MemberInfo [].
5159
5160         * typemanager.cs: In general, go with with ^^.
5161         (CopyNewMethods): take an IList.
5162         (RealMemberLookup): Only allocate an arraylist
5163         if we copy from two sets of methods.
5164
5165         This change basically does two things:
5166         1) Fewer array lists allocated due to CopyNewMethods.
5167         2) the explicit cast in MemberList costed ALOT.
5168
5169 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
5170
5171         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
5172         a hashtable to avoid needless string allocations when an identifier is
5173         used more than once (the common case).
5174
5175 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
5176
5177         * pending.cs: MS's TypeBuilder.GetInterfaces ()
5178         is broken, it will not return anything. So, we
5179         have to use the information we have in mcs to
5180         do the task.
5181
5182         * typemanager.cs: Add a cache for GetInterfaces,
5183         since this will now be used more often (due to ^^)
5184
5185         (GetExplicitInterfaces) New method that gets the
5186         declared, not effective, interfaces on a type
5187         builder (eg, if you have interface IFoo, interface
5188         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
5189         { IBar }.
5190
5191         This patch makes MCS able to bootstrap itself on
5192         Windows again.
5193
5194 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
5195
5196         * expression.cs: Remove the Nop's that Miguel put
5197         in by mistake.
5198
5199 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
5200
5201         * report.cs, codegen.cs: Give the real stack trace to
5202         the error when an exception is thrown.
5203
5204 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
5205
5206         * decl.cs: only allocate hashtables for ifaces if 
5207         it is an iface!
5208
5209 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
5210
5211         * expression.cs: fix the error from cs0121-2.cs
5212         (a parent interface has two child interfaces that
5213         have a function with the same name and 0 params
5214         and the function is called through the parent).
5215
5216 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
5217
5218         * class.cs, rootcontext.cs, typmanager.cs: do not
5219         leak pointers.
5220
5221 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
5222
5223         * codegen.cs: remove stack for the ec flow branching.
5224         It is already a linked list, so no need.
5225
5226 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
5227
5228         * Makefile: Allow custom profiler here.
5229
5230 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
5231
5232         * typemanager.cs (LookupType):
5233           - Use a static char [], because split takes
5234             a param array for args, so it was allocating
5235             every time.
5236           - Do not store true in a hashtable, it boxes.
5237
5238 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
5239
5240         * flowanalysis.cs: bytify common enums.
5241
5242 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
5243
5244         * modifiers.cs: Add a new set of flags for the
5245         flags allowed on explicit interface impls.
5246         * cs-parser.jay: catch the use of modifiers in
5247         interfaces correctly.
5248         * class.cs: catch private void IFoo.Blah ().
5249
5250         All related to bug #50572.
5251
5252 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
5253
5254         * decl.cs: Rewrite the consistant accessability checking.
5255         Accessability is not linear, it must be implemented in
5256         a tableish way. Fixes #49704.
5257
5258 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
5259
5260         * expression.cs: Handle negation in a checked context.
5261         We must use subtraction from zero. Fixes #38674.
5262
5263 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
5264
5265         * class.cs: Ignore static void main in DLLs.
5266         * rootcontext.cs: Handle the target type here,
5267         since we are have to access it from class.cs
5268         * driver.cs: account for the above.
5269
5270 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
5271
5272         * report.cs: Give line numbers and files if available.
5273
5274 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
5275
5276         * driver.cs: Implement /addmodule.
5277
5278         * typemanager.cs:  Change 'modules' field so it now contains Modules not
5279         ModuleBuilders.
5280
5281 2003-12-20  Martin Baulig  <martin@ximian.com>
5282
5283         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
5284         (FieldBase.IsAssigned): Removed this field.
5285         (FieldBase.SetAssigned): New public method.
5286         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
5287
5288 2003-12-20  Martin Baulig  <martin@ximian.com>
5289
5290         * expression.cs (LocalVariableReference.DoResolve): Don't set
5291         `vi.Used' if we're called from DoResolveLValue().
5292
5293         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
5294         returns the usage vector it just merged into the current one -
5295         pass this one to UsageWarning().
5296         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
5297         of the `EmitContext', don't call this recursively on our children.
5298
5299 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
5300
5301         * driver.cs: Implement /target:module.
5302
5303 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
5304
5305         * support.cs (CharArrayHashtable): New helper class.
5306
5307         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
5308         char arrays, not strings, so we can avoid creating a string in
5309         consume_identifier if the identifier is a keyword.
5310
5311 2003-12-16  Martin Baulig  <martin@ximian.com>
5312
5313         * statement.cs (LocalInfo.Assigned): Removed this property.
5314         (LocalInfo.Flags): Removed `Assigned'.
5315         (LocalInfo.IsAssigned): New public method; takes the EmitContext
5316         and uses flow analysis.
5317         (Block.UsageWarning): Made this method private.
5318         (Block.Resolve): Call UsageWarning() if appropriate.
5319
5320         * expression.cs (LocalVariableReference.DoResolve): Always set
5321         LocalInfo.Used here.
5322
5323 2003-12-13  Martin Baulig  <martin@ximian.com>
5324
5325         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
5326         any value here; we're now using flow analysis to figure out
5327         whether a statement/block returns a value.
5328
5329 2003-12-13  Martin Baulig  <martin@ximian.com>
5330
5331         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
5332         working again.
5333         (FlowBranching.MergeFinally): Don't call
5334         `branching.CheckOutParameters()' here, this is called in
5335         MergeTopBlock().
5336         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
5337         when adding the `finally' vector.       
5338
5339 2003-12-13  Martin Baulig  <martin@ximian.com>
5340
5341         * flowanalysis.cs
5342         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
5343         actually work and also fix #48962.
5344
5345 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
5346
5347         * decl.cs: Do not check System.Object for nested types,
5348         since we know it does not have any. Big bang for buck:
5349
5350         BEFORE:
5351            Run 1:   8.35 seconds
5352            Run 2:   8.32 seconds
5353            corlib:  17.99 seconds
5354         AFTER:
5355            Run 1:   8.17 seconds
5356            Run 2:   8.17 seconds
5357            corlib:  17.39 seconds
5358
5359 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
5360
5361         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
5362         time we are returning 0 members, so we save alot here.
5363
5364 2003-12-11  Martin Baulig  <martin@ximian.com>
5365
5366         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
5367         `MergeChild()', also just take the `FlowBranching' as argument;
5368         call Merge() on it and return the result.
5369         (FlowBranching.Merge): We don't need to do anything if we just
5370         have one sibling.
5371
5372 2003-12-11  Martin Baulig  <martin@ximian.com>
5373
5374         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
5375         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
5376         Maurer for this idea.
5377
5378 2003-12-11  Martin Baulig  <martin@ximian.com>
5379
5380         * flowanalysis.cs (MergeResult): This class is now gone; we now
5381         use the `UsageVector' for this.  The reason for this is that if a
5382         branching just has one sibling, we don't need to "merge" them at
5383         all - that's the next step to do.
5384         (FlowBranching.Merge): We now return a `UsageVector' instead of a
5385         `MergeResult'.
5386
5387 2003-12-11  Martin Baulig  <martin@ximian.com>
5388
5389         Reworked flow analyis and made it more precise and bug-free.  The
5390         most important change is that we're now using a special `Reachability'
5391         class instead of having "magic" meanings of `FlowReturns'.  I'll
5392         do some more cleanups and optimizations and also add some more
5393         documentation this week.
5394
5395         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
5396         largely reworked this class.
5397         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
5398         the new `Reachability' class instead of having "magic" values here.
5399         (FlowBranching): We're now using an instance of `Reachability'
5400         instead of having separate `Returns', `Breaks' etc. fields.
5401
5402         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
5403         based on flow analysis; ignore the return value of block.Emit ().
5404
5405 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
5406
5407         * driver.cs typemanager.cs: Find the mono extensions to corlib even
5408         if they are private.
5409
5410 2003-12-09  Martin Baulig  <martin@ximian.com>
5411
5412         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
5413         call them directly on the UsageVector.
5414
5415 2003-12-09  Martin Baulig  <martin@ximian.com>
5416
5417         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
5418         Changed return type from `FlowReturns' to `Reachability'.
5419
5420 2003-12-09  Martin Baulig  <martin@ximian.com>
5421
5422         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
5423         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
5424         `Reachable' fields with a single `Reachability' one.
5425
5426 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
5427
5428         * class.cs (FindMembers): Remove foreach's.
5429
5430         Bootstrap times:
5431
5432         BEFORE
5433                 Run 1:   8.74 seconds
5434                 Run 2:   8.71 seconds
5435
5436         AFTER
5437                 Run 1:   8.64 seconds
5438                 Run 2:   8.58 seconds
5439
5440
5441 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
5442
5443         * cs-parser.jay:
5444         * gen-treedump.cs:
5445         * statement.cs:
5446         This patch does a few things:
5447                 1. EmptyStatement is now a singleton, so it is never reallocated.
5448                 2. All blah is EmptyStatement constructs have been changed to
5449                    blah == EmptyStatement.Value, which is much faster and valid
5450                    now that EmptyStatement is a singleton.
5451                 3. When resolving a block, rather than allocating a new array for
5452                    the non-empty statements, empty statements are replaced with
5453                    EmptyStatement.Value
5454                 4. Some recursive functions have been made non-recursive.
5455         Mainly the performance impact is from (3), however (1) and (2) are needed for
5456         this to work. (4) does not make a big difference in normal situations, however
5457         it makes the profile look saner.
5458
5459         Bootstrap times:
5460
5461         BEFORE
5462         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
5463         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
5464         Total memory allocated: 56397 KB
5465
5466         AFTER
5467         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
5468         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
5469         Total memory allocated: 55666 KB
5470
5471 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
5472
5473         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
5474         than the hashtable in a hashtable version
5475
5476         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
5477         we always end up concating a string. This results in a huge perf
5478         loss, because many strings have to be tracked by the GC. In this
5479         patch, we first use a hashtable that works with two keys, so that
5480         the strings do not need to be concat'ed.
5481
5482         Bootstrap times:
5483         BEFORE
5484                 Run 1:   8.74 seconds
5485                 Run 2:   8.71 seconds
5486
5487         AFTER
5488                 Run 1:   8.65 seconds
5489                 Run 2:   8.56 seconds
5490
5491 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
5492
5493         * Makefile: Add a new target `do-time' that does a quick and simple
5494         profile, leaving easy to parse output.
5495
5496 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
5497
5498         * codegen.cs (Init): Create the dynamic assembly with 
5499         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
5500
5501 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
5502
5503         * support.cs: Make the PtrHashtable use only one
5504         instance of its comparer.
5505
5506 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
5507
5508         * typemanager.cs: Fix lookup of GetNamespaces.
5509
5510 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
5511
5512         * expression.cs: Removed redundant line.
5513
5514         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
5515         ArrayLists, use for loops with bounds.  
5516
5517         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
5518         arraylist.
5519
5520         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
5521         arraylists, use for loop with bounds.
5522
5523         The above three changes give us a 0.071 second performance
5524         improvement out of 3.294 seconds down to 3.223.  On my machine
5525         the above changes reduced the memory usage by 1,387 KB during
5526         compiler bootstrap.
5527
5528         * cs-parser.jay (QualifiedIdentifier): New class used to represent
5529         QualifiedIdentifiers.  Before we created a new string through
5530         concatenation, and mostly later on, the result would be
5531         manipulated by DecomposeQI through string manipulation.
5532
5533         This reduced the compiler memory usage for bootstrapping from
5534         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
5535         compile times in 0.05 seconds.
5536
5537 2003-11-28  Dick Porter  <dick@ximian.com>
5538
5539         * support.cs: Do string compares with the Invariant culture.
5540
5541         * rootcontext.cs: 
5542         * gen-treedump.cs: 
5543         * expression.cs: 
5544         * driver.cs: 
5545         * decl.cs: 
5546         * codegen.cs: 
5547         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
5548         the comparison is done with the Invariant culture.
5549
5550 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
5551
5552         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
5553         GetEnumerator method.
5554
5555         (ProbeCollectionType): Iterate starting at the most specific type
5556         upwards looking for a GetEnumerator
5557
5558         * expression.cs: Shift count can be up to 31 for int/uint and 63
5559         for long/ulong.
5560
5561 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
5562
5563         * statement.cs (Block.LookupLabel): Also look for the label on the
5564         children blocks.  Use a hash table to keep track of visited
5565         nodes. 
5566
5567         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
5568         we actually did transform the other operand, otherwise fall back
5569         to the common codepath that casts to long.
5570
5571         * cs-tokenizer.cs: Use the same code pattern as the int case.
5572         Maybe I should do the parsing myself, and avoid depending on the
5573         Parse routines to get this done.
5574
5575 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
5576
5577         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
5578         which fixes bug 51347.  This time test it.
5579
5580         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
5581         attributes for example can not tell the difference between these.
5582         The difference was only a syntax feature of the language. 
5583
5584         * attribute.cs: Apply attributes to delegates.
5585
5586         * delegate.cs: Call the apply attributes method.
5587
5588 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
5589
5590         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
5591         comparing 0 vs Byte.MinValue, not the value
5592
5593         (ImplicitConversionRequired): When reporting a conversion error,
5594         use error 31 to print out the constant error instead of the
5595         simpler 29.
5596
5597         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
5598         which fixes bug 51347.
5599
5600 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
5601
5602         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
5603         which fixes the -warnaserror command line option.
5604
5605 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
5606
5607         * cfold.cs (DoNumericPromotions): During constant folding of
5608         additions on UIntConstant, special case intconstants with
5609         IntConstants like we do on the expression binary operator. 
5610
5611 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
5612
5613         * convert.cs (ImplicitReferenceConversion): We were missing a case
5614         (System.Enum are not value types or class types, so we need to
5615         classify them separatedly).
5616
5617         * driver.cs: We do not support error 2007.
5618
5619 2003-11-12 Jackson Harper <jackson@ximian.com>
5620
5621         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
5622         system directory. Also use the full file name so users can
5623         libraries names mscorlib-o-tron.dll in a non system dir.
5624
5625 2003-11-10  Martin Baulig  <martin@ximian.com>
5626
5627         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
5628         (TypeManager.InitCoreTypes): Initialize them here, but instead of
5629         calling `ResolveType()' on them, directly assign their `Type'.
5630
5631 2003-11-08  Martin Baulig  <martin@ximian.com>
5632
5633         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
5634         return value and the `out parent' parameter.
5635         (TypeContainer.DefineType): Moved the CS0644 check into
5636         GetClassBases().  Don't pass the interface types to the
5637         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
5638         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
5639
5640         * ecore.cs (TypeExpr.IsAttribute): New property.
5641         (TypeExpr.GetInterfaces): New method.
5642
5643         * interface.cs (Interface.GetInterfaceTypeByName): Return a
5644         TypeExpr instead of a Type.
5645         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
5646         (Interface.DefineType): Don't pass the interface types to the
5647         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
5648         them later and then call `TypeBulider.AddInterfaceImplementation()'.
5649
5650         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
5651         instead of a `Type[]'.
5652         (TypeManager.RegisterBuilder): Likewise.
5653         (TypeManager.AddUserInterface): Likewise.
5654         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
5655         `Type[]' and also return a `TypeExpr[]'.
5656         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
5657
5658 2003-11-08  Martin Baulig  <martin@ximian.com>
5659
5660         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
5661         Expression.     
5662
5663 2003-11-08  Martin Baulig  <martin@ximian.com>
5664
5665         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
5666         TypeManager.ResolveExpressionTypes().
5667
5668         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
5669         instead of an Expression.
5670         (TypeExpr): This is now an abstract base class for `TypeExpression'.
5671         (TypeExpression): New public class; formerly known as `TypeExpr'.
5672
5673         * expression.cs (ComposedCast): Derive from TypeExpr.
5674
5675         * typemanager.cs (TypeManager.system_*_expr): These are now
5676         TypExpr's instead of Expression's.
5677         (TypeManager.ResolveExpressionTypes): New public static function;
5678         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
5679         of them.        
5680
5681 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
5682
5683         * expression.cs (New.DoResolve): Do not dereference value that
5684         might be a null return.
5685
5686         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
5687         sure that the constant value has the right type.  Fixes an
5688         unreported bug, similar to 50425.
5689
5690         * const.cs (Const.LookupConstantValue): Call
5691         ImplicitStandardConversionExists before doing a conversion to
5692         avoid havng the TypeManager.ChangeType do conversions.
5693
5694         Reduced the number of casts used
5695
5696         (Const.ChangeType): New routine to enable reuse of the constant
5697         type changing code from statement.
5698
5699         * typemanager.cs (ChangeType): Move common initialization to
5700         static global variables.
5701
5702         Fixes #50425.
5703
5704         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
5705         every value type to go through, even if it was void.  Fix that. 
5706
5707         * cs-tokenizer.cs: Use is_identifier_start_character on the start
5708         character of the define, and the is_identifier_part_character for
5709         the rest of the string.
5710
5711 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
5712
5713         * expression.cs (UnaryMutator.EmitCode): When I updated
5714         LocalVariableReference.DoResolve, I overdid it, and dropped an
5715         optimization done on local variable references.
5716
5717 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
5718
5719         * ecore.cs: Convert the return from Ldlen into an int.
5720
5721 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
5722
5723         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
5724         the accessibility, this is a special case for toplevel non-public
5725         classes (internal for instance).
5726
5727 2003-10-20  Nick Drochak <ndrochak@gol.com>
5728
5729         * ecore.cs: Fix typo and build.  Needed another right paren.
5730
5731 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
5732
5733         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
5734         `internal' case regular and protected, but not allowing protected
5735         to be evaluated later.  Bug 49840
5736
5737 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
5738
5739         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
5740         to kb.Nlast, and not the kb.nFirst to isolate the switch
5741         statement.
5742
5743         Extract the underlying type, so enumerations of long/ulong are
5744         treated like long/ulong.
5745
5746 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
5747
5748         * expression.cs (New): Overload the meaning of RequestedType to
5749         track the possible creation of the NewDelegate type, since
5750         DoResolve is invoked more than once for new constructors on field
5751         initialization.
5752
5753         See bugs: #48800 and #37014
5754
5755         * cs-parser.jay (declare_local_constants): Take an arraylist
5756         instead of a single constant.
5757
5758         (local_constant_declaration): It should take a
5759         constant_declarators, not a constant_declarator.  Fixes 49487
5760
5761         * convert.cs: Fix error report.
5762
5763 2003-10-13 Jackson Harper <jackson@ximian.com>
5764
5765         * typemanager.cs (TypeToCoreType): Add float and double this fixes
5766         bug #49611
5767
5768 2003-10-09  Martin Baulig  <martin@ximian.com>
5769
5770         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
5771         to the .ctor.
5772         (MethodCore.DoDefineParameters): Removed the TypeContainer
5773         argument; use the DeclSpace which was passed to the .ctor instead.
5774         (MethodCore.CheckParameter): Take a DeclSpace instead of a
5775         TypeContainer; we only need a DeclSpace here.
5776
5777 2003-10-09  Martin Baulig  <martin@ximian.com>
5778
5779         * class.cs (MethodData): Added additional `DeclSpace ds' argument
5780         to the .ctor.
5781         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
5782         EmitContext's .ctor.    
5783
5784 2003-10-09  Martin Baulig  <martin@ximian.com>
5785
5786         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
5787         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
5788         AsAccessible(), moved them as well.
5789
5790         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
5791
5792 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
5793
5794         * cs-parser.jay : Renamed yyName to yyNames related to jay.
5795
5796 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
5797
5798         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
5799         generation for >=, as spotted by Paolo, bug 48679.  
5800         Patch from David Waite.
5801
5802         * cs-tokenizer.cs: Add handling for #pragma.
5803
5804         * cs-parser.jay: Allow for both yield and yield return in the
5805         syntax.  The anti-cobolization of C# fight will go on!
5806
5807         * class.cs (TypeBuilder.DefineType): Catch error condition here
5808         (Parent.DefineType erroring out and returning null).
5809
5810         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
5811         coping with enumerations variables, we were mistakenly processing
5812         them as a regular value type instead of built-in types.  Fixes the
5813         bug #48063
5814
5815         * typemanager.cs (IsBuiltinOrEnum): New method.
5816
5817 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
5818
5819         * cs-parser.jay: Upgrade: yield now needs the return clause.
5820
5821 2003-09-19  Martin Baulig  <martin@ximian.com>
5822
5823         * decl.cs (MemberCache.SetupCacheForInterface): Take a
5824         `MemberCache parent' argument.  Normally, an interface doesn't
5825         have a parent type except System.Object, but we use this in gmcs
5826         for generic type parameters.
5827
5828 2003-09-18  Martin Baulig  <martin@ximian.com>
5829
5830         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
5831         on `type.IsInterface'; don't check whether the type has a parent
5832         to determine whether it's an interface.
5833
5834 2003-09-15  Martin Baulig  <martin@ximian.com>
5835
5836         * class.cs (TypeContainer.DefineType): Added an error flag to
5837         avoid reporting duplicate CS0146's ("class definition is
5838         circular.").
5839
5840         * driver.cs (Driver.MainDriver): Abort if
5841         RootContext.ResolveTree() reported any errors.
5842
5843 2003-09-07  Martin Baulig  <martin@ximian.com>
5844
5845         * report.cs (Error, Warning): Added overloaded versions which take
5846         a `params object[] args' and call String.Format().
5847
5848 2003-09-07  Martin Baulig  <martin@ximian.com>
5849
5850         * decl.cs (DeclSpace..ctor): Don't call
5851         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
5852         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
5853         (DeclSpace.RecordDecl): New method.
5854
5855         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
5856
5857 2003-09-02  Ravi Pratap  <ravi@ximian.com>
5858
5859         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
5860         value attributes to be applied to ParameterBuilders.
5861
5862         * class.cs (MethodCore.LabelParameters): Make static and more
5863         generic so that it can be used from other places - like interface
5864         methods, for instance.
5865
5866         * interface.cs (Interface.Emit): Call LabelParameters before
5867         emitting attributes on the InterfaceMethod.
5868
5869 2003-08-26  Martin Baulig  <martin@ximian.com>
5870
5871         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
5872         resolving aliases; fixes #47927.
5873
5874 2003-08-26  Martin Baulig  <martin@ximian.com>
5875
5876         * statement.cs (Using.DoResolve): This is internally emitting a
5877         try/finally clause, so we need to set ec.NeedExplicitReturn if we
5878         do not always return.  Fixes #47681.
5879
5880 2003-08-26  Martin Baulig  <martin@ximian.com>
5881
5882         * decl.cs (MemberCore): Moved WarningNotHiding(),
5883         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
5884         into MemberBase.
5885         (AdditionResult): Make this nested in DeclSpace.
5886         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
5887         argument; call NamespaceEntry.Define() unless we're nested in a
5888         class or struct.
5889
5890         * namespace.cs (Namespace.DefineName): New public function.  This
5891         is called from DeclSpace's .ctor to add 
5892         (Namespace.Lookup): Include DeclSpaces in the lookup.
5893
5894         * class.cs (Operator): Derive from MemberBase, not MemberCore.
5895
5896         * const.cs (Const): Derive from MemberBase, not MemberCore.     
5897
5898 2003-08-25  Martin Baulig  <martin@ximian.com>
5899
5900         * convert.cs (Convert.ExplicitReferenceConversion): When
5901         converting from an interface type to a class, unbox if the target
5902         type is a struct type.  Fixes #47822.
5903
5904 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
5905
5906         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
5907         #47854.
5908
5909 2003-08-22  Martin Baulig  <martin@ximian.com>
5910
5911         * class.cs (TypeManager.DefineType): When defining a nested type,
5912         call DefineType() on our parent; fixes #47801.
5913
5914 2003-08-22  Martin Baulig  <martin@ximian.com>
5915
5916         * class.cs (MethodData.Define): While checking if a method is an
5917         interface implementation, improve the test a bit more to fix #47654.
5918
5919 2003-08-22  Martin Baulig  <martin@ximian.com>
5920
5921         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
5922         correctly; fixes #47722.
5923
5924 2003-08-22  Martin Baulig  <martin@ximian.com>
5925
5926         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
5927         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
5928
5929         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
5930
5931 2003-08-22  Martin Baulig  <martin@ximian.com>
5932
5933         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
5934         can only be assigned in static constructors.  Fixes #47161.
5935
5936 2003-08-22  Martin Baulig  <martin@ximian.com>
5937
5938         Rewrote and improved the flow analysis code.
5939
5940         * flowbranching.cs (FlowBranching): Make this class abstract.
5941         (FlowBranching.CreateBranching): New static function to create a
5942         new flow branching.
5943         (FlowBranchingBlock, FlowBranchingException): New classes.
5944         (FlowBranching.UsageVector.Type): New public readonly field.
5945         (FlowBranching.UsageVector.Breaks): Removed the setter.
5946         (FlowBranching.UsageVector.Returns): Removed the setter.
5947         (FlowBranching.UsageVector): Added Break(), Return(),
5948         NeverReachable() and Throw() methods to modify the reachability.
5949         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
5950         done by FlowBranching.Merge().
5951         (FlowBranching.UsageVector.MergeChild): New method; merges the
5952         merge result into the current vector.
5953         (FlowBranching.Merge): New abstract method to merge a branching.
5954
5955 2003-08-12  Martin Baulig  <martin@ximian.com>
5956
5957         * expression.cs (Indirection.CacheTemporaries): Create the
5958         LocalTemporary with the pointer type, not its element type.
5959
5960 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
5961
5962         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
5963         token was a keyword or not.
5964
5965         Add `error' options where an IDENTIFIER was expected;  Provide
5966         CheckToken and CheckIdentifierToken convenience error reporting
5967         functions. 
5968
5969         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
5970
5971         * decl.cs: Rename `NamespaceEntry Namespace' public field into
5972         NameSpaceEntry NameSpaceEntry.
5973
5974         (LookupInterfaceOrClass): Avoid creating a full qualified name
5975         from namespace and name: avoid doing lookups when we know the
5976         namespace is non-existant.   Use new Tree.LookupByNamespace which
5977         looks up DeclSpaces based on their namespace, name pair.
5978
5979         * driver.cs: Provide a new `parser verbose' to display the
5980         exception thrown during parsing.  This is turned off by default
5981         now, so the output of a failure from mcs is more graceful.
5982
5983         * namespace.cs: Track all the namespaces defined in a hashtable
5984         for quick lookup.
5985
5986         (IsNamespace): New method
5987
5988 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
5989
5990         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
5991         we know that we need to concatenate (full typename can never be
5992         null). 
5993
5994         * class.cs: ditto.
5995
5996         * statement.cs: Use a bitfield;  Do not initialize to null things
5997         which are done by the constructor by default.
5998
5999         * cs-parser.jay: bug fix, parameter was 4, not 3.
6000
6001         * expression.cs: Just use the property;
6002
6003         * statement.cs: No need for GetVariableInfo method.
6004
6005 2003-08-08  Martin Baulig  <martin@ximian.com>
6006
6007         * flowanalysis.cs (FlowReturns): This is now nested in the
6008         `FlowBranching' class.
6009         (MyBitVector): Moved this here from statement.cs.
6010         (FlowBranching.SiblingType): New enum type.
6011         (FlowBranching.CreateSibling): Added `SiblingType' argument.
6012
6013 2003-08-07  Martin Baulig  <martin@ximian.com>
6014
6015         * flowanalysis.cs (FlowBranchingType): This is now nested in the
6016         `FlowBranching' class and called `BranchingType'.
6017
6018 2003-08-07  Martin Baulig  <martin@ximian.com>
6019
6020         * flowanalysis.cs: Moved all the control flow analysis code into
6021         its own file.
6022
6023 2003-08-07  Martin Baulig  <martin@ximian.com>
6024
6025         * assign.cs (Assign.DoResolve): `target' must either be an
6026         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
6027         #37319.
6028
6029 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
6030
6031         * expression.cs (BinaryMethod): This kind of expression is created by the
6032         Binary class if it determines that the operator has to be handled
6033         by a method.
6034
6035         (BinaryDelegate): This kind of expression is created if we are
6036         dealing with a + or - operator on delegates.
6037
6038         (Binary): remove method, argumetns, and DelegateOperator: when
6039         dealing with methods, 
6040
6041         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
6042
6043         * statement.cs (Block): use bitfields for the three extra booleans
6044         we had in use.   Remove unused topblock parameter.
6045
6046         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
6047
6048         * assign.cs: Drop extra unneeded tests.
6049
6050 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
6051
6052         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
6053
6054         * statement.cs (Foreach): Use VariableStorage instead of
6055         LocalBuilders.   
6056
6057         * codegen.cs (VariableStorage): New class used by clients that
6058         require a variable stored: locals or fields for variables that
6059         need to live across yield.
6060
6061         Maybe provide a convenience api for EmitThis+EmitLoad?
6062
6063         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
6064         these bad boys.
6065
6066 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
6067
6068         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
6069         RemapParameterLValue): New methods that are used to turn a
6070         precomputed FieldInfo into an expression like this:
6071
6072                 instance.FieldInfo
6073
6074         The idea is to use this instead of making LocalVariableReference
6075         have more than one meaning.
6076
6077         * cs-parser.jay: Add error production to BASE.
6078
6079         * ecore.cs: Deal with TypeManager.GetField returning null, which
6080         is now a valid return value.
6081
6082         (FieldExprNoAddress): New expression for Fields whose address can
6083         not be taken.
6084
6085         * expression.cs (LocalVariableReference): During the resolve
6086         phases, create new expressions if we are in a remapping context.
6087         Remove code that dealt with remapping here.
6088
6089         (ParameterReference): same.
6090
6091         (ProxyInstance): New expression, like the `This' expression, but
6092         it is born fully resolved.  We know what we are doing, so remove
6093         the errors that are targeted to user-provided uses of `this'.
6094
6095         * statement.cs (Foreach): our variable is now stored as an
6096         Expression;  During resolution, follow the protocol, dont just
6097         assume it will return this.
6098
6099 2003-08-06  Martin Baulig  <martin@ximian.com>
6100
6101         * support.cs (SeekableStreamReader.cs): New public class.
6102
6103         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
6104         SeekableStreamReader instead of the normal StreamReader.
6105
6106 2003-08-04  Martin Baulig  <martin@ximian.com>
6107
6108         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
6109         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
6110         deambiguate casts and delegate invocations.
6111         (parenthesized_expression): Use the new tokens to ensure this is
6112         not a cast of method invocation.
6113
6114         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
6115         when reading a `)' and Deambiguate_CloseParens () was previously
6116         called.
6117
6118         * expression.cs (ParenthesizedExpression): New class.  This is
6119         just used for the CS0075 test.
6120         (Binary.DoResolve): Check for CS0075.   
6121
6122 2003-07-29  Ravi Pratap  <ravi@ximian.com>
6123
6124         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
6125         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
6126         reference comparison.
6127
6128         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
6129         examine the ReturnType for equality - this is necessary in the
6130         cases of implicit and explicit operators whose signature also
6131         includes the return type.
6132
6133 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
6134
6135         * namespace.cs: Cache the result of the namespace computation,
6136         instead of computing it every time.
6137
6138 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
6139
6140         * decl.cs: Use a global arraylist that we reuse over invocations
6141         to avoid excesive memory consumption.  Reduces memory usage on an
6142         mcs compile by one meg (45 average).
6143
6144         * typemanager.cs (LookupTypeReflection): In .NET pointers are
6145         private, work around that.
6146
6147 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
6148
6149         * literal.cs (IntLiteral): Define Zero and One static literals. 
6150
6151         * cs-parser.jay (integer_literal): use static literals to reduce
6152         memory usage for the most used literals (0, 1 and -1).  211kb
6153         reduced in memory usage.
6154
6155         Replace all calls to `new ArrayList' with `new
6156         ArrayList(4)' which is a good average number for most allocations,
6157         and also requires only 16 bytes of memory for its buffer by
6158         default. 
6159
6160         This reduced MCS memory usage in seven megabytes for the RSS after
6161         bootstrapping.
6162
6163 2003-07-28  Ravi Pratap  <ravi@ximian.com>
6164
6165         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
6166         handle params methods the correct way by forming only one
6167         applicable set with params and normal methods in them. Earlier we
6168         were looking at params methods only if we found no normal methods
6169         which was not the correct thing to do.
6170
6171         (Invocation.BetterFunction): Take separate arguments indicating
6172         when candidate and the best method are params methods in their
6173         expanded form.
6174
6175         This fixes bugs #43367 and #46199.
6176
6177         * attribute.cs: Documentation updates.
6178
6179         (CheckAttribute): Rename to CheckAttributeTarget.
6180         (GetValidPlaces): Rename to GetValidTargets.
6181
6182         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
6183         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
6184
6185         Fixes bug #44468.
6186
6187 2003-07-28  Martin Baulig  <martin@ximian.com>
6188
6189         * class.cs (TypeContainer.DefineMembers): Use the base type's full
6190         name when looking up the base class of a nested class.  Fixes #46977.
6191
6192 2003-07-26  Martin Baulig  <martin@ximian.com>
6193
6194         * expression.cs (Indexers.Indexer): New nested struct; contains
6195         getter, setter and the indexer's type.
6196         (Indexers.Properties): This is now an ArrayList of
6197         Indexers.Indexer's.
6198         (IndexerAccess.DoResolveLValue): Correctly set the type if the
6199         indexer doesn't have any getters.
6200
6201         * assign.cs (Assign.DoResolve): Also do the implicit conversions
6202         for embedded property and indexer assignments.
6203
6204 2003-07-26  Martin Baulig  <martin@ximian.com>
6205
6206         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
6207         preprocessor directive is not the first non-whitespace character
6208         on a line.
6209
6210 2003-07-26  Martin Baulig  <martin@ximian.com>
6211
6212         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
6213         namespace parsing, follow the spec more closely.
6214
6215         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
6216         NamespaceEntry.Lookup().
6217
6218 2003-07-25  Martin Baulig  <martin@ximian.com>
6219
6220         * MethodCore.cs (OverridesSomething): New public field; it's set
6221         from TypeContainer.DefineMembers if this method overrides
6222         something (which doesn't need to be a method).  Fix #39462.
6223
6224 2003-07-25  Ravi Pratap  <ravi@ximian.com>
6225
6226         * typemanager.cs (GetMembers): Ensure that the list of members is
6227         reversed. This keeps things in sync.
6228
6229         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
6230         find an AttributeUsage attribute.
6231
6232         * expression.cs (Invocation.OverloadResolve): Perform the check
6233         which disallows Invoke to be directly called on a Delegate.
6234
6235         (Error_InvokeOnDelegate): Report error cs1533.
6236
6237 2003-07-25  Martin Baulig  <martin@ximian.com>
6238
6239         * expression.cs (Indexers.GetIndexersForType): Only look in the
6240         interface hierarchy if the requested type is already an
6241         interface.  Fixes #46788 while keeping #46502 fixed.
6242
6243 2003-07-25  Martin Baulig  <martin@ximian.com>
6244
6245         * class.cs (TypeContainer.DefineMembers): Check whether all
6246         readonly fields have been assigned and report warning CS0649 if
6247         not.
6248
6249         * statement.cs (LocalInfo.IsFixed): Always return true if this is
6250         a valuetype.
6251
6252 2003-07-24  Ravi Pratap  <ravi@ximian.com>
6253
6254         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
6255         returned from GetMethods to make things consistent with the
6256         assumptions MCS makes about ordering of methods.
6257
6258         This should comprehensively fix bug #45127 and it does :-)
6259
6260         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
6261         ordering is actually reverse.
6262
6263         * Clean up some debug messages I left lying around.
6264
6265         * interface.cs (Populate*): Get rid of code which emits attributes
6266         since the stage in which we emit attributes is the 'Emit' stage,
6267         not the define stage.
6268
6269         (Emit): Move attribute emission for interface members here.
6270
6271 2003-07-22  Ravi Pratap  <ravi@ximian.com>
6272
6273         * expression.cs (Invocation.OverloadResolve): Follow the spec more
6274         closely: we eliminate methods in base types when we have an
6275         applicable method in a top-level type.
6276
6277         Please see section 14.5.5.1 for an exact description of what goes
6278         on. 
6279
6280         This fixes bug #45127 and a host of other related to corlib compilation.
6281
6282         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
6283         array is the method corresponding to the top-level type (this is
6284         because of the changes made to icall.c) so we change this
6285         accordingly.
6286
6287         (MethodGroupExpr.Name): This too.
6288
6289         * typemanager.cs (GetElementType): New method which does the right
6290         thing when compiling corlib. 
6291
6292         * everywhere: Make use of the above in the relevant places.
6293
6294 2003-07-22  Martin Baulig  <martin@ximian.com>
6295
6296         * cs-parser.jay (invocation_expression): Moved
6297         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
6298         `cast_expression', but create a InvocationOrCast which later
6299         resolves to either an Invocation or a Cast.
6300
6301         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
6302         method; call this before EmitStatement() to make sure that this
6303         expression can be used as a statement.
6304
6305         * expression.cs (InvocationOrCast): New class; resolves to either
6306         an Invocation or a Cast.
6307
6308         * statement.cs (StatementExpression): Call ResolveStatement() on
6309         the ExpressionStatement before emitting it.
6310
6311 2003-07-21  Martin Baulig  <martin@ximian.com>
6312
6313         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
6314         `ref' and `out' attributes match; fixes #46220.
6315         (MemberAccess.ResolveMemberAccess): You can't reference a type
6316         through an expression; fixes #33180.
6317         (Indexers.GetIndexersForType): Don't return the indexers from
6318         interfaces the class implements; fixes #46502.
6319
6320 2003-07-21  Martin Baulig  <martin@ximian.com>
6321
6322         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
6323         CS0661 checks; fixes bug #30442.
6324
6325 2003-07-21  Martin Baulig  <martin@ximian.com>
6326
6327         * decl.cs (AdditionResult): Added `Error'.
6328
6329         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
6330
6331         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
6332         makes cs0031.cs actually work.
6333
6334 2003-07-20  Martin Baulig  <martin@ximian.com>
6335
6336         * namespace.cs: Fixed that bug which caused a crash when compiling
6337         the debugger's GUI.
6338
6339 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
6340
6341         * typemanager.cs (LookupTypeReflection): Never expose types which
6342         are NotPublic, NestedPrivate, NestedAssembly, or
6343         NestedFamANDAssem.  We used to return these, and later do a check
6344         that would report a meaningful error, but the problem is that we
6345         would not get the real match, if there was a name override.
6346
6347 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
6348
6349         * namespace.cs (Namespace, Name): Do not compute the namespace
6350         name dynamically, compute it in the constructor.  This reduced
6351         memory usage by 1697 KB.
6352
6353         * driver.cs: Use --pause to pause at the end.
6354
6355 2003-07-17  Peter Williams  <peter@newton.cx>
6356
6357         * Makefile: Change the name of the test target so that it doesn't
6358         conflict with the recursive test target.
6359
6360 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
6361
6362         * expression.cs (LocalVariableReference.Emit, EmitAssign,
6363         AddressOf): Do not use EmitThis, that was wrong, use the actual
6364         this pointer.
6365
6366 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
6367
6368         * class.cs (MethodData.Define): While checking if a method is an
6369         interface implementation, improve the test: If we are not public
6370         (use new test here: use the computed MethodAttributes directly,
6371         instead of the parsed modifier flags) check if the `implementing'
6372         method comes from an interface or not.
6373
6374         * pending.cs (VerifyPendingMethods): Slightly better error
6375         message.
6376
6377         * makefile: add test target that does the mcs bootstrap.
6378
6379 2003-07-16  Ravi Pratap  <ravi@ximian.com>
6380
6381         * interface.cs (Define): Do nothing here since there are no
6382         members to populate etc. Move the attribute emission out of here
6383         since this was just totally the wrong place to put it. Attribute
6384         application happens during the 'Emit' phase, not in the 'Define'
6385         phase.
6386
6387         (Emit): Add this method and move the attribute emission here
6388
6389         * rootcontext.cs (EmitCode): Call the Emit method on interface
6390         types too.
6391
6392 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
6393
6394         * expression.cs (OverloadResolve): Report error only if Location
6395         is not 'Null' which means that there was a probe going on.
6396
6397 2003-07-14  Martin Baulig  <martin@ximian.com>
6398
6399         * expression.cs (ConditionalLogicalOperator): New public class to
6400         implement user defined conditional logical operators.
6401         This is section 14.11.2 in the spec and bug #40505.
6402
6403 2003-07-14  Martin Baulig  <martin@ximian.com>
6404
6405         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
6406
6407 2003-07-14  Martin Baulig  <martin@ximian.com>
6408
6409         * codegen.cs (EmitContext.InFixedInitializer): New public field.
6410
6411         * ecore.cs (IVariable.VerifyFixed): New interface method.
6412
6413         * expression.cs (Unary.ResolveOperator): When resolving the `&'
6414         operator, check whether the variable is actually fixed.  Fixes bug
6415         #36055.  Set a variable definitely assigned when taking its
6416         address as required by the spec.
6417
6418         * statement.cs (LocalInfo.IsFixed): New field.
6419         (LocalInfo.MakePinned): Set `IsFixed' to true.
6420
6421 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
6422
6423         * attribute.cs (Attribute.Resolve): While doing a Member lookup
6424         for .ctors, ensure that we only ask for members declared in the
6425         attribute type (BindingFlags.DeclaredOnly).
6426
6427         Fixes bug #43632.
6428
6429         * expression.cs (Error_WrongNumArguments): Report error 1501
6430         correctly the way CSC does.
6431
6432 2003-07-13  Martin Baulig  <martin@ximian.com>
6433
6434         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
6435         lookup on the fully qualified name, to make things like "X.X" work
6436         where "X.X" is a fully qualified type name, but we also have a
6437         namespace "X" in the using list.  Fixes #41975.
6438
6439 2003-07-13  Martin Baulig  <martin@ximian.com>
6440
6441         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
6442         function. If we're a CompoundAssign, we need to create an embedded
6443         CompoundAssign, not an embedded Assign.
6444         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
6445         Fixes #45854.
6446
6447 2003-07-13  Martin Baulig  <martin@ximian.com>
6448
6449         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
6450         work to fix bug #46088.
6451
6452 2003-07-13  Ravi Pratap <ravi@ximian.com>
6453
6454         * class.cs (Operator.Emit): Do not emit attributes here - it is
6455         taken care of by the Method class that we delegate too. This takes
6456         care of bug #45876.
6457
6458 2003-07-10  Martin Baulig  <martin@ximian.com>
6459
6460         * expression.cs (TypeOfVoid): New class.
6461         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
6462
6463 2003-07-10  Martin Baulig  <martin@ximian.com>
6464
6465         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
6466         bug #35957.
6467
6468 2003-07-10  Martin Baulig  <martin@ximian.com>
6469
6470         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
6471         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
6472
6473         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
6474
6475         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
6476
6477 2003-07-10  Martin Baulig  <martin@ximian.com>
6478
6479         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
6480         of decimal.  Fixes #42850.
6481
6482         NOTE: I also fixed the created byte blob, but this doesn't work on
6483         the MS runtime and csc never produces any byte blobs for decimal
6484         arrays.
6485
6486 2003-07-10  Martin Baulig  <martin@ximian.com>
6487
6488         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
6489         structs; fixes #32068.
6490         (Block.AddChildVariableNames): Fixed #44302.
6491
6492 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
6493
6494         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
6495
6496 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
6497
6498         * attribute.cs: And this test is onger needed.
6499
6500 2003-07-08  Martin Baulig  <martin@ximian.com>
6501
6502         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
6503         inaccessible types.  Fixes #36313.
6504
6505         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
6506
6507         * namespace.cs (NamespaceEntry): Create implicit entries for all
6508         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
6509         implicit entries for N1.N2 and N1.
6510
6511 2003-07-08  Martin Baulig  <martin@ximian.com>
6512
6513         Rewrote the handling of namespaces to fix a lot of the issues
6514         wrt. `using' aliases etc.
6515
6516         * namespace.cs (Namespace): Splitted this class into a
6517         per-assembly `Namespace' and a per-file `NamespaceEntry'.
6518
6519         * typemanager.cs (TypeManager.IsNamespace): Removed.
6520         (TypeManager.ComputeNamespaces): Only compute namespaces from
6521         loaded assemblies here, not the namespaces from the assembly we're
6522         currently compiling.
6523
6524 2003-07-08  Martin Baulig  <martin@ximian.com>
6525
6526         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
6527
6528 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
6529
6530         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
6531         already fixed it.  
6532
6533         I thought about the memory savings here, but LookupTypeReflection
6534         is used under already very constrained scenarios.  Compiling
6535         corlib or mcs only exposes one hit, so it would not really reduce
6536         any memory consumption.
6537
6538 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
6539
6540         * typemanager.cs: fixes bug #45889 by only adding public types from
6541         other assemblies to the list of known types.
6542
6543 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
6544
6545         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
6546         on the type we resolved.
6547
6548 2003-07-05  Martin Baulig  <martin@ximian.com>
6549
6550         * pending.cs (PendingImplementation.ParentImplements): Don't
6551         create the proxy if the parent is abstract.
6552
6553         * class.cs (TypeContainer.DefineIndexers): Process explicit
6554         interface implementations first.  Fixes #37714.
6555
6556 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
6557
6558         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
6559         defined recursively;  but since we modify the input parameters
6560         (left is set to `this' temporarily), we reset this value if the
6561         left_is_explicit is false, which gives the original semantics to
6562         the code.  
6563
6564         * literal.cs (NullPointer): new class used to represent a null
6565         literal in a pointer context.
6566
6567         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
6568         type is a pointer, use a NullPointer object instead of a
6569         NullLiteral.   Closes 43687
6570
6571         (ExplicitConversion): Convert pointer values using
6572         the conv opcode to the proper type.
6573
6574         * ecore.cs (New): change ValueTypeVariable property into a method,
6575         that returns whether the valuetype is suitable for being used.
6576
6577         * expression.cs (Binary.DoNumericPromotions): Only return if we
6578         the int constant was a valid uint, and we can return both left and
6579         right as uints.  If not, we continue processing, to trigger the
6580         type conversion.  This fixes 39018.
6581
6582         * statement.cs (Block.EmitMeta): During constant resolution, set
6583         the CurrentBlock property on the emitcontext, so that we resolve
6584         constants propertly.
6585
6586 2003-07-02  Martin Baulig  <martin@ximian.com>
6587
6588         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
6589         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
6590
6591         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
6592         than emitting it here.
6593
6594         * statement.cs: Fixed some more flow analysis bugs.
6595
6596 2003-07-02  Martin Baulig  <martin@ximian.com>
6597
6598         * class.cs (MethodData.Define): When implementing interface
6599         methods, set Final unless we're Virtual.
6600
6601         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
6602         check work for interface methods.
6603
6604 2003-07-01  Martin Baulig  <martin@ximian.com>
6605
6606         * ecore.cs (EmitContext.This): Replaced this property with a
6607         GetThis() method which takes a Location argument.  This ensures
6608         that we get the correct error location for a CS0188.
6609
6610 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
6611
6612         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
6613         ImplicitStandardConversion.
6614
6615         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
6616
6617 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
6618
6619         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
6620         optimization.
6621
6622 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
6623
6624         * class.cs (Constructor.Define): Turn off initlocals for unsafe
6625         constructors.
6626
6627         (MethodData.Define): Turn off initlocals for unsafe methods.
6628
6629 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
6630
6631         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
6632         complete;  Fixes #37521.
6633
6634         * delegate.cs: Use Modifiers.TypeAttr to compute the
6635         TypeAttributes, instead of rolling our own.  This makes the flags
6636         correct for the delegates.
6637
6638 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
6639
6640         * class.cs (Constructor.Define): Set the private flag for static
6641         constructors as well.
6642
6643         * cs-parser.jay (statement_expression): Set the return value to
6644         null, to avoid a crash when we catch an error.
6645
6646 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
6647
6648         * cs-parser.jay: Applied patch from Jackson that adds support for
6649         extern and unsafe modifiers to destructor declarations.
6650
6651         * expression.cs: Report error 21 if the user is trying to index a
6652         System.Array.
6653
6654         * driver.cs: Add an error message, suggested by the bug report.
6655
6656         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
6657         if we do not have a ": this ()" constructor initializer.  Fixes 45149
6658
6659 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
6660
6661         * namespace.cs: Add some information to reduce FAQs.
6662
6663 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
6664
6665         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
6666         underlying enumeration types.  Fixes #43915.
6667
6668         * expression.cs: Treat ushort/short as legal values to be used in
6669         bitwise operations.
6670
6671 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
6672
6673         * delegate.cs: transfer custom attributes for paramenters from
6674         the delegate declaration to Invoke and BeginInvoke.
6675
6676 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
6677
6678         * attribute.cs: handle custom marshalers and emit marshal info
6679         for fields, too.
6680
6681 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
6682
6683         * makefile.gnu: Added anonymous.cs to the compiler sources.
6684
6685 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
6686
6687         * iterators.cs: Change the name of the proxy class to include two
6688         underscores.
6689
6690         * cs-parser.jay: Update grammar to include anonymous methods.
6691
6692         * anonymous.cs: new file.
6693
6694 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
6695
6696         * class.cs (Field.Define): Add missing test for pointers and
6697         safety. 
6698
6699 2003-05-27  Ravi Pratap  <ravi@ximian.com>
6700
6701         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
6702         we use the stobj opcode.
6703
6704         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
6705         since it wasn't the correct fix. 
6706
6707         It still is puzzling that we are required to use stobj for IntPtr
6708         which seems to be a ValueType.
6709
6710 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
6711
6712         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
6713         during regular simple name resolution.   Now, the trick is that
6714         instead of returning for processing the simplename, we do a
6715         TypeManager.LookupType (ie, a rooted lookup as opposed to a
6716         contextual lookup type).   If a match is found, return that, if
6717         not, return for further composition.
6718
6719         This fixes long-standing 30485.
6720
6721         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
6722         using the address to initialize an object, do an Stobj instead of
6723         using the regular Stelem.
6724
6725         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
6726         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
6727         Because if we are a BaseIndexerAccess that value will be true.
6728         Fixes 43643.
6729
6730         * statement.cs (GotoCase.Resolve): Return after reporting an
6731         error, do not attempt to continue. 
6732
6733         * expression.cs (PointerArithmetic.Emit): If our operand is a
6734         long, convert our constants to match the operand before
6735         multiplying.  Convert to I type before adding.   Fixes 43670.
6736
6737 2003-05-14  Ravi Pratap  <ravi@ximian.com>
6738
6739         * enum.cs (ImplicitConversionExists) : Rename to
6740         ImplicitEnumConversionExists to remove ambiguity. 
6741
6742         * ecore.cs (NullCast): New type of cast expression class which
6743         basically is very similar to EmptyCast with the difference being
6744         it still is a constant since it is used only to cast a null to
6745         something else
6746         (eg. (string) null)
6747
6748         * convert.cs (ImplicitReferenceConversion): When casting a null
6749         literal, we return a NullCast.
6750
6751         * literal.cs (NullLiteralTyped): Remove - I don't see why this
6752         should be around anymore.
6753
6754         The renaming (reported was slightly wrong). Corrections:
6755
6756         ConvertImplicitStandard -> ImplicitConversionStandard
6757         ConvertExplicitStandard -> ExplicitConversionStandard
6758
6759         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
6760         before passing them in !
6761
6762         * convert.cs (ImplicitConversionStandard): When comparing for
6763         equal expr and target types, ensure that expr is not a
6764         NullLiteral.
6765
6766         In general, we must not be checking (expr_type ==
6767         target_type) in the top level conversion methods
6768         (ImplicitConversion, ExplicitConversion etc). This checking is
6769         done in the methods that they delegate to.
6770
6771 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
6772
6773         * convert.cs: Move Error_CannotConvertType,
6774         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
6775         ImplicitNumericConversion, ImplicitConversionExists,
6776         ImplicitUserConversionExists, StandardConversionExists,
6777         FindMostEncompassedType, FindMostSpecificSource,
6778         FindMostSpecificTarget, ImplicitUserConversion,
6779         ExplicitUserConversion, GetConversionOperators,
6780         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
6781         TryImplicitIntConversion, Error_CannotConvertImplicit,
6782         ConvertImplicitRequired, ConvertNumericExplicit,
6783         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
6784         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
6785         its own file.
6786
6787         Perform the following renames:
6788
6789         StandardConversionExists -> ImplicitStandardConversionExists
6790         ConvertImplicit -> ImplicitConversion
6791         ConvertImplicitStandard -> ImplicitStandardConversion
6792         TryImplicitIntConversion -> ImplicitIntConversion
6793         ConvertImplicitRequired -> ImplicitConversionRequired
6794         ConvertNumericExplicit -> ExplicitNumericConversion
6795         ConvertReferenceExplicit -> ExplicitReferenceConversion
6796         ConvertExplicit -> ExplicitConversion
6797         ConvertExplicitStandard -> ExplicitStandardConversion
6798
6799 2003-05-19  Martin Baulig  <martin@ximian.com>
6800
6801         * statement.cs (TypeInfo.StructInfo): Made this type protected.
6802         (TypeInfo): Added support for structs having structs as fields.
6803
6804         * ecore.cs (FieldExpr): Implement IVariable.
6805         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
6806         VariableInfo for the field.
6807
6808 2003-05-18  Martin Baulig  <martin@ximian.com>
6809
6810         * expression.cs (This.DoResolve): Report a CS0027 if we're
6811         emitting a field initializer.
6812
6813 2003-05-18  Martin Baulig  <martin@ximian.com>
6814
6815         * expression.cs (This.ResolveBase): New public function.
6816         (This.DoResolve): Check for CS0188.
6817
6818         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
6819         This.Resolve().
6820
6821         * ecore.cs (MethodGroupExpr.DoResolve): Set the
6822         `instance_expression' to null if we don't have any non-static
6823         methods.
6824
6825 2003-05-18  Martin Baulig  <martin@ximian.com>
6826
6827         Reworked the way how local variables and parameters are handled by
6828         the flow analysis code.
6829
6830         * statement.cs (TypeInfo, VariableMap): New public classes.
6831         (VariableInfo): New public class.  This is now responsible for
6832         checking whether a variable has been assigned.  It is used for
6833         parameters and local variables.
6834         (Block.EmitMeta): Take the InternalParameters as argument; compute
6835         the layout of the flow vectors here.
6836         (Block.LocalMap, Block.ParameterMap): New public properties.
6837         (FlowBranching): The .ctor doesn't get the InternalParameters
6838         anymore since Block.EmitMeta() now computes the layout of the flow
6839         vector.
6840         (MyStructInfo): This class is now known as `StructInfo' and nested
6841         in `TypeInfo'; we don't access this directly anymore.
6842
6843         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
6844         property and removed IsAssigned(), IsFieldAssigned(),
6845         SetAssigned() and SetFieldAssigned(); we now call them on the
6846         VariableInfo so we don't need to duplicate this code everywhere.
6847
6848         * expression.cs (ParameterReference): Added `Block block' argument
6849         to the .ctor.
6850         (LocalVariableReference, ParameterReference, This): The new
6851         VariableInfo class is now responsible for all the definite
6852         assignment stuff.
6853
6854         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
6855         IsParameterAssigned, SetParameterAssigned): Removed.
6856
6857 2003-05-18  Martin Baulig  <martin@ximian.com>
6858
6859         * typemanager.cs (InitCoreTypes): Try calling
6860         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
6861         the 3-args-version.  Corlib now also needs our `void_type'.
6862         (GetMethod): Added overloaded version which takes an optional
6863         `bool report_errors' to allow lookups of optional methods.
6864
6865 2003-05-12  Martin Baulig  <martin@ximian.com>
6866
6867         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
6868         only used for locals and not for parameters.
6869
6870 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
6871
6872         * support.cs (InternalParameters.ParameterType): Return the
6873         ExternalType of the parameter.
6874
6875         * parameter.cs (Parameter.ExternalType): drop the two arguments,
6876         they were unused.
6877
6878 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
6879
6880         * class.cs (MethodData.Define): Do not set the `newslot' on
6881         interface members, if they are also flagged as "override".
6882
6883         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
6884         better code for ++i and i++.  This only works for static fields
6885         and local variables.
6886
6887         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
6888         want to pull the DeclSpace out of the builder_to_declspace instead
6889         of the TypeBuilder (like in TypeContainer.FindMembers).
6890
6891         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
6892         instead of LookupTypeContainer.  Fixes the crash on .NET for
6893         looking up interface members.
6894
6895         * const.cs: Create our own emit context during the Definition
6896         stage, so that constants are evaluated in the proper context, when
6897         a recursive definition happens.
6898
6899 2003-05-11  Martin Baulig  <martin@ximian.com>
6900
6901         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
6902         new block for a switch section.
6903         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
6904         the adding/lookup in the switch block.  Fixes #39828.
6905
6906 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
6907
6908         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
6909         functionality: I needed to convert the data after I had performed
6910         the add/sub operation into the operands type size.
6911
6912         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
6913         pass the type for the box operation, otherwise the resulting
6914         object would have been of type object.
6915
6916         (BoxedCast): Add constructor to specify the type to box as.
6917
6918 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
6919
6920         * iterators.cs: I was reusing the `count' variable inadvertently,
6921         take steps to not allow this to happen.
6922
6923 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
6924
6925         * attribute.cs (Attribute.Resolve): Params attributes are encoded
6926         by creating an array at the point where the params starts and
6927         putting all those arguments there, then adjusting the size of the
6928         array.
6929
6930 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
6931
6932         * expression.cs (New.AddressOf): Implement interface
6933         IMemoryLocation.  This is used when the `new' operator is used in
6934         the context of an invocation to a method on a value type.
6935
6936         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
6937         example. 
6938
6939         * namespace.cs: Also check the using aliases here.
6940
6941         * driver.cs: Move the test for using validity after the types have
6942         been entered, so we do a single pass that also includes the using
6943         aliases. 
6944
6945         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
6946         in the regular case.   CreateSiblingForFinally is doing extra
6947         error checking.
6948
6949         * attribute.cs (GetAttributeArgumentExpression): Store the result
6950         on an out value, and use the return value to indicate failure
6951         instead of using null (which is a valid return for Constant.GetValue).
6952
6953         * statement.cs: Perform the analysis flow for the increment
6954         portion after the statement, because this will be the real flow of
6955         execution.  Fixes #42385
6956
6957         * codegen.cs (EmitContext.EmitArgument,
6958         EmitContext.EmitStoreArgument): New helper functions when the
6959         RemapToProxy flag is set.
6960
6961         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
6962         function.
6963
6964         Add support for remapping parameters. 
6965
6966         * iterators.cs: Propagate parameter values;  Store parameter
6967         values in the proxy classes.
6968
6969 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
6970
6971         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
6972         need a proxy reference;  I do not know what I was thinking
6973
6974         * cs-parser.jay (constructor_initializer): catch another error,
6975         and display nice message.
6976
6977         (field_declaration): catch void field declaration
6978         to flag a better error. 
6979
6980         * class.cs (MemberBase.CheckBase): Report an error instead of a
6981         warning if a new protected member is declared in a struct. 
6982         (Field.Define): catch the error of readonly/volatile.
6983
6984         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
6985
6986         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
6987         volatile variable is taken
6988
6989 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
6990
6991         * statement.cs (Fixed.Resolve): Report an error if we are not in
6992         an unsafe context.
6993
6994 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
6995
6996         * typemanager.cs: reuse the code that handles type clashes for
6997         delegates and enumerations.
6998
6999         * class.cs (Report28): Always report.
7000
7001         * expression.cs (EncodeAsAttribute): Allow nulls here.
7002
7003 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
7004
7005         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
7006         the functionality for testing whether an expression is valid for
7007         an attribute here.  Also handle the case of arrays of elements
7008         being stored. 
7009
7010         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
7011         encoding a linear array into an array of objects that are suitable
7012         to be passed to an CustomAttributeBuilder.
7013
7014         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
7015
7016         * ecore.cs: (FieldExpr): Handle field remapping here.
7017
7018         * iteratators.cs: Pass the instance variable (if the method is an
7019         instance method) to the constructors, so we can access the field
7020         variables on the class.
7021
7022         TODO: Test this with structs.  I think the THIS variable on
7023         structs might have to be a pointer, and not a refenrece
7024
7025 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
7026
7027         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
7028         local variables to fields in a proxy class.
7029
7030         * iterators.cs (PopulateProxy): Rename our internal fields to
7031         <XXX>.  
7032         Create a <THIS> field if we are an instance method, so we can
7033         reference our parent container variables.
7034         (MapVariable): Called back from the EmitContext code to enter a
7035         new variable to field mapping into the proxy class (we just create
7036         a FieldBuilder).
7037
7038         * expression.cs
7039         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
7040         for using the remapped locals to fields.
7041
7042         I placed the code here, because that gives the same semantics to
7043         local variables, and only changes the Emit code.
7044
7045         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
7046         statements inside iterators.
7047         (VariableInfo): Add a FieldBuilder for the cases when we are
7048         remapping local variables to fields in a proxy class
7049
7050         * ecore.cs (SimpleNameResolve): Avoid testing two times for
7051         current_block != null.
7052
7053         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
7054         not cope with strings, as it has been moved to the
7055         TableSwitchEmit.  Fixed bug in switch generation.
7056
7057         * expression.cs (New.DoResolve): Provide more context for the user
7058         when reporting an error.
7059
7060         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
7061         pointers. 
7062
7063         * expression.cs (MemberAccess.DoResolve): When we get a type back,
7064         check the permissions for it.  Note than in a type-resolution
7065         context the check was already present in DeclSpace.ResolveType,
7066         but was missing from the MemberAccess.
7067
7068         (ArrayCreation.CheckIndices): warn if the user has
7069         more nested levels of expressions, but there are no more
7070         dimensions specified.  Avoids crash on bug 41906.
7071
7072 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
7073
7074         * statement.cs (Block): replace Implicit bool, for a generic
7075         flags.   
7076         New flag: `Unchecked'.  This is used during the EmitMeta phase
7077         (which is out-of-line with the regular Resolve/Emit process for a
7078         statement, as this is done ahead of time, but still gets a chance
7079         to call constant resolve).
7080
7081         (Block.Flags): new enum for adding a new flag.
7082
7083         (Block.EmitMeta): track the state of unchecked.
7084
7085         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
7086         to enable constant resolution to work there as well.
7087
7088 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
7089
7090         * typemanager.cs (ienumerable_type): Also look up
7091         System.Collections.IEnumerable. 
7092
7093 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
7094
7095         TODO: Test more than one conditional per method.
7096
7097         * class.cs (Indexer.Define): Report the location where the user is
7098         referencing the unsupported feature.
7099
7100         (MethodData): Overload the use of `conditionals' to
7101         minimize the creation of needless ArrayLists.   This saves roughly
7102         212kb on my machine.
7103
7104         (Method): Implement the new IIteratorContainer interface.
7105         (Method.SetYields): Implement the method by setting the ModFlags
7106         to contain METHOD_YIELDS.
7107
7108         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
7109         which just got set to null.
7110
7111         * iterators.cs: New file.
7112
7113         (Yield, YieldBreak): New statements.
7114
7115         * statement.cs (Return.Resolve): Flag an error if we are used in
7116         an iterator method.
7117
7118         * codegen.cs (InIterator): New flag set if the code is being
7119         compiled in an iterator method.
7120
7121         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
7122         internal modifier, and we just use it to avoid adding extra
7123         fields, as this is seldom used.  
7124
7125         * cs-parser.jay: Add yield_statement (yield and yield break).
7126
7127         * driver.cs: New flag -v2 to turn on version 2 features. 
7128
7129         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
7130         hashtable when v2 is enabled.
7131
7132 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
7133
7134         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
7135         there is already a namespace defined with this name.
7136
7137         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
7138         people upgraded their corlibs.
7139
7140         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
7141         always use fully qualified types, no need to use the compiler
7142         front end.
7143
7144         (TypeManager.IsNamespace): Use binarysearch.
7145
7146         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
7147         AddDelegate): I did not quite use the new IsValid API properly: I
7148         have to pass the short-name and the fullname.  I was passing only
7149         the basename instead of the fullname sometimes. 
7150
7151         (TypeContainer.DefineType): call NamespaceClash.
7152
7153         * interface.cs (Interface.DefineType): use NamespaceClash before
7154         defining the type.
7155
7156         * delegate.cs (Delegate.DefineType): use NamespaceClash before
7157         defining the type.
7158
7159         * enum.cs: (Enum.DefineType): use NamespaceClash before
7160         defining the type.
7161
7162         * typemanager.cs (: 3-line patch that gives us some tasty 11%
7163         speed increase.  First, use the negative_hits cache when we get a
7164         negative.  Second, add the type with its full original name
7165         instead of the new . and + encoded name (reflection uses + to
7166         separate type from a nested type).  Use LookupTypeReflection
7167         directly which bypasses the type->name hashtable (that we already
7168         know does not contain the type.
7169
7170         * decl.cs (DeclSpace.ResolveTypeExpr): track the
7171         location/container type. 
7172
7173         * driver.cs: When passing utf8, use directly the UTF8Encoding.
7174
7175 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
7176
7177         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
7178
7179         * delegate.cs (NewDelegate.Resolve): Test whether an instance
7180         method is being referenced in the method group from a static
7181         context, and report error 120 if so.
7182
7183         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
7184         Error118. 
7185
7186         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
7187         is created, we create the A namespace).
7188
7189         * cs-parser.jay: A namespace also introduces a DeclarationFound.
7190         Fixes #41591
7191
7192 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
7193
7194         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
7195         invocation to ModuleBuilder.GetType with the same values will
7196         return a new type instance, so we need to cache its return
7197         values. 
7198
7199         * expression.cs (Binary.ResolveOperator): Only allow the compare
7200         operators on enums if they are of the same type.
7201
7202         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
7203         types of ValueType on their own case.  Before we were giving them
7204         the same treatment as objects.
7205
7206         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
7207         fullname.  Short name is used to compare against container name.
7208         Fullname is used to check against defined namespace names.
7209
7210         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
7211         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
7212
7213         (Method.CheckBase): Call parent.
7214         (MemberBase.CheckBase): Check for protected members on sealed
7215         classes.
7216         (PropertyBase.CheckBase): Call parent.
7217         (Field.Define): Call parent.
7218
7219         * report.cs: Negative error codes are now mapped to 8000 - code,
7220         so that the display is render more nicely.
7221
7222         * typemanager.cs: Do not use try/catch, instead report a regular
7223         error. 
7224
7225         (GetPointerType, GetReferenceType): These methods provide
7226         mechanisms to obtain the T* and T& from a T.  We had the code
7227         previously scattered around the code base, and it also used
7228         TypeManager.LookupType that would go through plenty of caches.
7229         This one goes directly to the type source.
7230
7231         In some places we did the Type.GetType followed by
7232         ModuleBuilder.GetType, but not in others, so this unifies the
7233         processing as well.
7234
7235         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
7236         statements now that we have namespace information.
7237
7238         * typemanager.cs (IsNamespace): New method, returns whether the
7239         string presented is a namespace or not.
7240
7241         (ComputeNamespaces): New public entry point, computes the list of
7242         available namespaces, using the GetNamespaces API call in Mono, or
7243         the slower version in MS.NET.   
7244
7245         Now before we start the semantic analysis phase, we have a
7246         complete list of namespaces including everything that the user has
7247         provided.
7248
7249         Deleted old code to cache namespaces in .nsc files.
7250
7251 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
7252
7253         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
7254         class/struct location definition Location for the implicit
7255         constructor location.
7256
7257         (Operator.Define): Use the location of the operator for the
7258         implicit Method definition.
7259
7260         (Constructor.Emit): use the constructor location for the implicit
7261         base initializer constructor.
7262
7263         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
7264         and the Expression class now contains two new methods:
7265
7266         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
7267         isolate type lookup from the rest of the resolution process.
7268
7269         Since we use Expressions to hold type definitions due to the way
7270         we parse the input we have historically overloaded Resolve to
7271         perform the Type lookups if a special flag is passed.  Now this is
7272         eliminated and two methods take their place. 
7273
7274         The differences in the two methods between xStep and xTerminal is
7275         that xStep is involved in our current lookup system that uses
7276         SimpleNames to compose a name, while xTerminal is used just to
7277         catch the case where the simplename lookup failed.
7278
7279 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
7280
7281         * expression.cs (ResolveMemberAccess): Remove redundant code.
7282         TypeExpr expressions are always born fully resolved.
7283
7284         * interface.cs (PopulateMethod): Do not lookup the types twice.
7285         We were doing it once during SemanticAnalysis and once during
7286         PopulateMethod.
7287
7288         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
7289         in local variable type definitions, were being returned as a
7290         SimpleName (we decomposed everything into a string), that is
7291         because primary_expression was being used instead of a type in the
7292         grammar (reduce/reduce conflicts).
7293
7294         The part that was wrong is that we converted the expression into a
7295         string (an oversimplification in one hand, compounded with primary
7296         expressions doing string concatenation).
7297
7298         So things like:
7299
7300         A.B.C [] x;
7301
7302         Would return "A.B.C[]" as a SimpleName.  This stopped things like
7303         using clauses from working on this particular context.  And a type
7304         was being matched directly against "A.B.C[]".
7305
7306         We now use the correct approach, and allow for ComposedCast to be
7307         part of the unary expression.  So the "A.B.C []" become a composed
7308         cast of "A.B.C" (as a nested group of MemberAccess with a
7309         SimpleName at the end) plus the rank composition "[]". 
7310
7311         Also fixes 35567
7312
7313 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
7314
7315         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
7316         for the access level checking.
7317
7318         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
7319         `TypeContainer container', because I kept getting confused when I
7320         was debugging this code.
7321
7322         * expression.cs (Indexers): Instead of tracking getters/setters,
7323         we now track them in parallel.  We create one arraylist less, but
7324         most importantly it is possible now for the LValue code to find a
7325         matching get for a set.
7326
7327         (IndexerAccess.DoResolveLValue): Update the code.
7328         GetIndexersForType has been modified already to extract all the
7329         indexers from a type.  The code assumed it did not.
7330
7331         Also make the code set the correct return type for the indexer.
7332         This was fixed a long time ago for properties, but was missing for
7333         indexers.  It used to be void_type.
7334
7335         (Binary.Emit): Test first for doubles instead of
7336         floats, as they are more common.
7337
7338         (Binary.EmitBranchable): Use the .un version of the branch opcodes
7339         when dealing with floats and the <=, >= operators.  This fixes bug
7340         #39314 
7341
7342         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
7343         to load the array value by emitting a load on the foreach variable
7344         type.  This was incorrect.  
7345
7346         We now emit the code to load an element using the the array
7347         variable type, and then we emit the conversion operator.
7348
7349         Fixed #40176
7350
7351 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
7352
7353         * attribute.cs: Avoid allocation of ArrayLists in the common case.
7354
7355 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
7356
7357         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
7358         test for protection before we test for signatures. 
7359
7360         (MethodSignature.ToString): implement.
7361
7362         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
7363         to the case where we reduced into a LongConstant.
7364
7365         * decl.cs (CheckAccessLevel): If the type is an array, we can not
7366         depend on whether the information is acurrate, because the
7367         Microsoft runtime will always claim that the array type is public,
7368         regardless of the real state.
7369
7370         If the type is a pointer, another problem happens: the type is
7371         reported as non-public in Microsoft.  
7372
7373         In both cases we have to call CheckAccessLevel recursively with
7374         the underlying type as the argument to be tested.
7375
7376 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
7377
7378         * assign.cs (Assign.Emit): If we are dealing with a compound
7379         assignment expression, we should use the code path that stores the
7380         intermediate result in a temporary value.  This fixes #40903.
7381
7382         *expression.cs (Indirection.ToString): Provide ToString method for
7383         debugging. 
7384
7385 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
7386
7387         * class.cs: Null out fields holding references to Block objects so
7388         they can be garbage collected.
7389
7390         * expression.cs (OverloadResolve): Remove unused local.
7391
7392 2003-04-07  Martin Baulig  <martin@ximian.com>
7393
7394         * codegen.cs (EmitContext.CurrentFile): New public field.
7395         (EmitContext.Mark): Use the CurrentFile to check whether the
7396         location is in the correct file.
7397         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
7398
7399 2003-04-07  Martin Baulig  <martin@ximian.com>
7400
7401         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
7402
7403         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
7404         location.  [FIXME: The location argument which gets passed to this
7405         method is sometimes wrong!]
7406
7407 2003-04-07  Nick Drochak <ndrochak@gol.com>
7408
7409         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
7410
7411 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
7412
7413         * expression.cs (Indirection.EmitAssign): We were using the
7414         temporary, but returning immediately instead of continuing the
7415         EmitAssing flow.
7416
7417 2003-04-06  Martin Baulig  <martin@ximian.com>
7418
7419         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
7420         if it's a nested child, but also deriving from the outer class.
7421         See test 190.cs.
7422
7423         * typemanager.cs (IsNestedChildOf): Make this work if it's a
7424         nested child, but also deriving from the outer class.  See
7425         test-190.cs.
7426         (FilterWithClosure): We may access private members of the outer
7427         class if we're a nested child and deriving from the outer class.
7428         (RealMemberLookup): Only set `closure_private_ok' if the
7429         `original_bf' contained BindingFlags.NonPublic.
7430
7431 2003-04-05  Martin Baulig  <martin@ximian.com>
7432
7433         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
7434
7435 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
7436
7437         * class.cs (Event.Define): Do not allow abstract events to have
7438         initializers. 
7439
7440 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
7441
7442         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
7443         block in event declarations.
7444
7445         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
7446         value type, get its address.
7447
7448         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
7449         leaving a class on the stack instead of a boolean value (int
7450         0/1).  Change the code so we compare against null, and then the
7451         result against zero.
7452
7453         * class.cs (TypeContainer.GetClassBases): We were checking for the
7454         parent class being sealed too late.
7455
7456         * expression.cs (Binary.Emit): For <= and >= when dealing with
7457         floating point values, use cgt.un and clt.un instead of cgt and
7458         clt alone.
7459
7460 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
7461
7462         * statement.cs: Apply the same optimization as MS: skip the 
7463         GetEnumerator returning an IEnumerator, and use the one returning a 
7464         CharEnumerator instead. This allows us to avoid the try-finally block 
7465         and the boxing.
7466
7467 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
7468
7469         * cs-parser.jay: Attributes cannot be applied to
7470                          namespaces. Fixes #40473
7471
7472 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7473
7474         * class.cs:
7475         (Add*): check if the name is valid using the full name for constants,
7476         fields, properties and events.
7477
7478 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
7479
7480         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
7481         char constants to be part of the enumeration.
7482
7483         * expression.cs (Conditional.DoResolve): Add support for operator
7484         true. Implements the missing functionality from 14.12
7485
7486         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
7487         operator true/false as required by the spec.
7488
7489         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
7490         implicit conversion to boolean.
7491
7492         * statement.cs (Statement.ResolveBoolean): A boolean expression is
7493         also one where the type implements `operator true'. 
7494
7495         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
7496         get an expression that will invoke operator true based on an
7497         expression.  
7498
7499         (GetConversionOperators): Removed the hack that called op_True
7500         here.  
7501
7502         (Expression.ResolveBoolean): Move this from Statement.
7503
7504 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
7505
7506         * ecore.cs (FieldExpr): do not allow initialization of initonly
7507         fields on derived classes
7508
7509 2003-03-13  Martin Baulig  <martin@ximian.com>
7510
7511         * statement.cs (Block.Emit): Call ig.BeginScope() and
7512         ig.EndScope() when compiling with debugging info; call
7513         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
7514
7515 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
7516
7517         * expression.cs (Indexers): Do not construct immediately, allow
7518         for new members to be appended as we go.  Fixes 38143
7519
7520 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7521
7522         * expression.cs: save/restore context when resolving an unchecked
7523         expression.
7524
7525 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
7526
7527         * cfold.cs: Catch division by zero in modulus operator during
7528         constant folding.
7529
7530 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
7531
7532         * interface.cs (Interface.DefineMembers): Avoid defining members
7533         twice. 
7534
7535 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
7536
7537         * driver.cs: handle the +/- options for -noconfig
7538
7539         * statement.cs (Unckeched.Resolve): Also track the state of
7540         unchecked in the Resolve phase.
7541
7542 2003-02-27  Martin Baulig  <martin@ximian.com>
7543
7544         * ecore.cs (Expression.MemberLookup): Don't create a
7545         MethodGroupExpr for something which is not a method.  Fixes #38291.
7546
7547 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
7548
7549         * class.cs (MemberBase.CheckParameters): Also check that the type
7550         is unmanaged if it is a pointer.
7551
7552         * expression.cs (SizeOf.Resolve): Add location information.
7553
7554         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
7555         a managed type is declared.
7556
7557         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
7558         parameter modifiers as well.  Fixes bug 38606
7559
7560         * class.cs: Very sad.  Am backing out the speed up changes
7561         introduced by the ArrayList -> Array in the TypeContainer, as they
7562         were not actually that much faster, and introduced a bug (no error
7563         reports on duplicated methods).
7564
7565         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
7566         source first, this will guarantee that we have a valid expression
7567         before calling in lower levels functions that will require a
7568         resolved object.  Then use this original_source in the
7569         target.ResolveLValue instead of the original source that was
7570         passed to us.
7571
7572         Another change.  Use target.Resolve instead of LValueResolve.
7573         Although we are resolving for LValues, we will let the Assign code
7574         take care of that (it will be called again from Resolve).  This
7575         basically allows code like this:
7576
7577         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
7578         class Y { void A (X x) { x [0] += o; }
7579
7580         The problem was that the indexer was trying to resolve for
7581         set_Item (idx, object o) and never finding one.  The real set_Item
7582         was set_Item (idx, X).  By delaying the process we get the right
7583         semantics. 
7584
7585         Fixes bug 36505
7586
7587 2003-02-23  Martin Baulig  <martin@ximian.com>
7588
7589         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
7590         while calling DoEmit ().
7591
7592         * codegen.cs (EmitContext.Mark): Don't mark locations in other
7593         source files; if you use the #line directive inside a method, the
7594         compiler stops emitting line numbers for the debugger until it
7595         reaches the end of the method or another #line directive which
7596         restores the original file.
7597
7598 2003-02-23  Martin Baulig  <martin@ximian.com>
7599
7600         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
7601
7602 2003-02-23  Martin Baulig  <martin@ximian.com>
7603
7604         * statement.cs (Block.AddChildVariableNames): We need to call this
7605         recursively, not just for our immediate children.
7606
7607 2003-02-23  Martin Baulig  <martin@ximian.com>
7608
7609         * class.cs (Event.Define): Always make the field private, like csc does.
7610
7611         * typemanager.cs (TypeManager.RealMemberLookup): Make events
7612         actually work, fixes bug #37521.
7613
7614 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
7615
7616         * delegate.cs: When creating the various temporary "Parameters"
7617         classes, make sure that we call the ComputeAndDefineParameterTypes
7618         on those new parameters (just like we do with the formal ones), to
7619         allow them to be resolved in the context of the DeclSpace.
7620
7621         This fixes the bug that Dick observed in Bugzilla #38530.
7622
7623 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
7624
7625         * expression.cs (ResolveMemberAccess): When resolving a constant,
7626         do not attempt to pull a constant if the value was not able to
7627         generate a valid constant.
7628
7629         * const.cs (LookupConstantValue): Do not report more errors than required.
7630
7631 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7632
7633         * expression.cs: fixes bug #38328.
7634
7635 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
7636
7637         * class.cs: Changed all the various members that can be part of a
7638         class from being an ArrayList to be an Array of the right type.
7639         During the DefineType type_list, interface_list, delegate_list and
7640         enum_list are turned into types, interfaces, delegates and enums
7641         arrays.  
7642
7643         And during the member population, indexer_list, event_list,
7644         constant_list, field_list, instance_constructor_list, method_list,
7645         operator_list and property_list are turned into their real arrays.
7646
7647         Although we could probably perform this operation earlier, for
7648         good error reporting we need to keep the lists and remove the
7649         lists for longer than required.
7650
7651         This optimization was triggered by Paolo profiling the compiler
7652         speed on the output of `gen-sample-program.pl' perl script. 
7653
7654         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
7655         not crash in methods like MemberLookupFailed that use this field.  
7656
7657         This problem arises when the compiler fails to resolve a type
7658         during interface type definition for example.
7659
7660 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
7661
7662         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
7663         inherit from System.Object, so we have to stop at null, not only
7664         when reaching System.Object.
7665
7666 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
7667
7668         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
7669         DeclaredOnly because the parent indexer might have had a different
7670         name, but did not loop until the top of the hierarchy was reached.
7671
7672         The problem this one fixes is 35492: when a class implemented an
7673         indexer from an interface, we were getting the interface method
7674         (which was abstract) and we were flagging an error (can not invoke
7675         abstract method).
7676
7677         This also keeps bug 33089 functioning, and test-148 functioning.
7678
7679         * typemanager.cs (IsSpecialMethod): The correct way of figuring
7680         out if a method is special is to see if it is declared in a
7681         property or event, or whether it is one of the predefined operator
7682         names.   This should fix correctly #36804.
7683
7684 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
7685
7686         The goal here is to remove the dependency on EmptyCast.Peel ().
7687         Killing it completely.
7688
7689         The problem is that currently in a number of places where
7690         constants are expected, we have to "probe" for an EmptyCast, and
7691         Peel, which is not the correct thing to do, as this will be
7692         repetitive and will likely lead to errors. 
7693
7694         The idea is to remove any EmptyCasts that are used in casts that
7695         can be reduced to constants, so we only have to cope with
7696         constants. 
7697
7698         This bug hunt was triggered by Bug 37363 and the desire to remove
7699         the duplicate pattern where we were "peeling" emptycasts to check
7700         whether they were constants.  Now constants will always be
7701         constants.
7702
7703         * ecore.cs: Use an enumconstant here instead of wrapping with
7704         EmptyCast.  
7705
7706         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
7707         throwing me off.  By handling this we can get rid of a few hacks.
7708
7709         * statement.cs (Switch): Removed Peel() code.
7710
7711 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
7712
7713         * class.cs: Location information for error 508
7714
7715         * expression.cs (New.DoResolve): Add a guard against double
7716         resolution of an expression.  
7717
7718         The New DoResolve might be called twice when initializing field
7719         expressions (see EmitFieldInitializers, the call to
7720         GetInitializerExpression will perform a resolve on the expression,
7721         and later the assign will trigger another resolution
7722
7723         This leads to bugs (#37014)
7724
7725         * delegate.cs: The signature for EndInvoke should contain any ref
7726         or out parameters as well.  We were not doing this in the past. 
7727
7728         * class.cs (Field.Define): Do not overwrite the type definition
7729         inside the `volatile' group.  Turns out that volatile enumerations
7730         were changing the type here to perform a validity test, which
7731         broke conversions. 
7732
7733 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
7734
7735         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
7736         and structs, we do not want to load the instance variable
7737
7738         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
7739         enum_type has to be handled like an object reference (implicit
7740         conversions exists from this to object), but the regular IsClass
7741         and IsValueType tests will never return true for this one.
7742
7743         Also we use TypeManager.IsValueType instead of type.IsValueType,
7744         just for consistency with the rest of the code (this is only
7745         needed if we ever use the construct exposed by test-180.cs inside
7746         corlib, which we dont today).
7747
7748 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
7749
7750         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
7751         just InternalCall.
7752
7753 2003-02-09  Martin Baulig  <martin@ximian.com>
7754
7755         * namespace.cs (Namespace..ctor): Added SourceFile argument.
7756         (Namespace.DefineNamespaces): New static public method; this is
7757         called when we're compiling with debugging to add all namespaces
7758         to the symbol file.
7759
7760         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
7761         pass it to the Namespace's .ctor.
7762
7763         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
7764         and MethodBase arguments; pass the namespace ID to the symwriter;
7765         pass the MethodBase instead of the token to the symwriter.
7766         (SymbolWriter.DefineNamespace): New method to add a namespace to
7767         the symbol file.
7768
7769 2003-02-09  Martin Baulig  <martin@ximian.com>
7770
7771         * symbolwriter.cs: New file.  This is a wrapper around
7772         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
7773         methods here in near future.
7774
7775 2003-02-09  Martin Baulig  <martin@ximian.com>
7776
7777         * codegen.cs (EmitContext.Mark): Just pass the arguments to
7778         ILGenerator.MarkSequencePoint() which are actually used by the
7779         symbol writer.
7780
7781 2003-02-09  Martin Baulig  <martin@ximian.com>
7782
7783         * location.cs (SourceFile): New public sealed class.  This
7784         contains the name and an index which is used in the location's token.
7785         (Location): Reserve an appropriate number of bits in the token for
7786         the source file instead of walking over that list, this gives us a
7787         really huge performance improvement when compiling with debugging.
7788
7789         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
7790         `SourceFile' argument instead of a string.
7791         (Driver.ProcessFile): Add all the files via Location.AddFile(),
7792         but don't parse/tokenize here, we need to generate the list of all
7793         source files before we do that.
7794         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
7795         the files.
7796
7797         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
7798         instead of a string.
7799
7800         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
7801         of a string.
7802
7803 2003-02-09  Martin Baulig  <martin@ximian.com>
7804
7805         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
7806         filename on `#line default'.
7807
7808 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
7809
7810         * statement.cs: don't clear the pinned var when the fixed statement
7811         returns from the method (fixes bug#37752).
7812
7813 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
7814
7815         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
7816         to IsValueType.
7817
7818 2003-02-07  Martin Baulig  <martin@ximian.com>
7819
7820         * driver.cs: Removed the `--debug-args' command line argument.
7821
7822         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
7823         automatically by the AsssemblyBuilder.
7824         (CodeGen.InitializeSymbolWriter): We don't need to call any
7825         initialization function on the symbol writer anymore.  This method
7826         doesn't take any arguments.
7827
7828 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
7829
7830         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
7831         from referenced assemblies as well.
7832
7833 2003-02-02  Martin Baulig  <martin@ximian.com>
7834
7835         * class.cs (MethodData.Emit): Generate debugging info for external methods.
7836
7837 2003-02-02  Martin Baulig  <martin@ximian.com>
7838
7839         * class.cs (Constructor.Emit): Open the symbol writer before
7840         emitting the constructor initializer.
7841         (ConstructorInitializer.Emit): Call ec.Mark() to allow
7842         single-stepping through constructor initializers.
7843
7844 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
7845
7846         * class.cs: Handle error 549: do not allow virtual methods in
7847         sealed classes. 
7848
7849 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
7850
7851         * decl.cs: Check access levels when resolving types
7852
7853 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
7854
7855         * statement.cs: Add parameters and locals set in catch blocks that might 
7856         return to set vector
7857
7858 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
7859
7860         * class.cs (Operator): Set the SpecialName flags for operators.
7861
7862         * expression.cs (Invocation.DoResolve): Only block calls to
7863         accessors and operators on SpecialName methods.
7864
7865         (Cast.TryReduce): Handle conversions from char constants.
7866
7867
7868 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
7869
7870         * statement.cs: small memory and time optimization in FlowBranching.
7871
7872 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
7873
7874         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
7875         problem that the last fix but in the other sid (Set).
7876
7877         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
7878         access when there is no indexer in the hierarchy.
7879
7880 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
7881
7882         * class.cs: Combine some if statements.
7883
7884 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7885
7886         * driver.cs: fixed bug #37187.
7887
7888 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
7889
7890         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
7891         any indexer, it's needed to build a list with all the indexers in the
7892         hierarchy (AllGetters), else we have problems. Fixes #35653.
7893
7894 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
7895
7896         * class.cs (MethodData.Define): It is wrong for an interface
7897         implementation to be static in both cases: explicit and implicit.
7898         We were only handling this in one case.
7899
7900         Improve the if situation there to not have negations.
7901
7902         * class.cs (Field.Define): Turns out that we do not need to check
7903         the unsafe bit on field definition, only on usage.  Remove the test.
7904
7905 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7906
7907         * driver.cs: use assembly.Location instead of Codebase (the latest
7908         patch made mcs fail when using MS assemblies).
7909
7910 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
7911
7912         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
7913         get the path to *corlib.dll.
7914
7915 2003-01-21  Nick Drochak <ndrochak@gol.com>
7916
7917         * cs-tokenizer.cs:
7918         * pending.cs:
7919         * typemanager.cs: Remove compiler warnings
7920
7921 2003-01-20  Duncan Mak  <duncan@ximian.com>
7922
7923         * AssemblyInfo.cs: Bump the version number to 0.19.
7924
7925 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7926
7927         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
7928
7929 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
7930
7931         * class.cs (Constructor::Emit): Emit debugging info for constructors.
7932
7933 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
7934
7935         * cs-parser.jay: Small fix: we were not comparing the constructor
7936         name correctly.   Thanks to Zoltan for the initial pointer.
7937
7938 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
7939
7940         * cs-tokenizer.cs: Set file name when specified with #line
7941
7942 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
7943
7944         * cs-parser.jay: Only perform the constructor checks here if we
7945         are named like the class;  This will help provider a better
7946         error.  The constructor path is taken when a type definition is
7947         not found, but most likely the user forgot to add the type, so
7948         report that rather than the constructor error.
7949
7950 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
7951
7952         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
7953         allocations.
7954
7955 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
7956
7957         * cs-parser.jay: Add cleanup call.
7958
7959 2003-01-13  Duncan Mak  <duncan@ximian.com>
7960
7961         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
7962         consistent with other methods.
7963
7964 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
7965
7966         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
7967
7968 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
7969
7970         * attribute.cs: only set GuidAttr to true when we have a
7971         GuidAttribute.
7972
7973 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7974
7975         * ecore.cs:
7976         * expression.cs:
7977         * typemanager.cs: fixes to allow mcs compile corlib with the new
7978         Type.IsSubclassOf fix.
7979
7980 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
7981
7982         * expression.cs (LocalVariableReference.DoResolve): Classify a
7983         constant as a value, not as a variable.   Also, set the type for
7984         the variable.
7985
7986         * cs-parser.jay (fixed_statement): take a type instead of a
7987         pointer_type, so we can produce a better error message later.
7988
7989         * statement.cs (Fixed.Resolve): Flag types that are not pointers
7990         as an error.  
7991
7992         (For.DoEmit): Make inifinite loops have a
7993         non-conditional branch back.
7994
7995         (Fixed.DoEmit): First populate the pinned variables, then emit the
7996         statement, then clear the variables.  Before I was emitting the
7997         code once for each fixed piece.
7998
7999
8000 2003-01-08  Martin Baulig  <martin@ximian.com>
8001
8002         * statement.cs (FlowBranching.MergeChild): A break in a
8003         SWITCH_SECTION does not leave a loop.  Fixes #36155.
8004
8005 2003-01-08  Martin Baulig  <martin@ximian.com>
8006
8007         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
8008         lives in the same number space than `param_map'.  Fixes #36154.
8009
8010 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
8011
8012         * cs-parser.jay (constructor_declaration): Set the
8013         Constructor.ModFlags before probing for it.  This makes the
8014         compiler report 514, 515 and 132 (the code was there, but got
8015         broken). 
8016
8017         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
8018         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
8019         (GotoCase.Resolve): Set `Returns' to ALWAYS.
8020
8021 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
8022
8023         * enum.cs: create the enum static fields using the enum type.
8024
8025 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
8026
8027         * class.cs: don't try to create the ParamBuilder for the return
8028         type if it's not needed (and handle it breaking for the ms runtime
8029         anyway).
8030
8031 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
8032
8033         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
8034
8035 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
8036
8037         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
8038         the command.   This showed up while compiling the JANET source
8039         code, which used \r as its only newline separator.
8040
8041 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
8042
8043         * class.cs (Method.Define): If we are an operator (because it
8044         reuses our code), then set the SpecialName and HideBySig.  #36128
8045
8046 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
8047
8048         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
8049         exception, report error 120 `object reference required'.
8050
8051         * driver.cs: Add --pause option, used during to measure the size
8052         of the process as it goes with --timestamp.
8053
8054         * expression.cs (Invocation.DoResolve): Do not allow methods with
8055         SpecialName to be invoked.
8056
8057 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
8058
8059         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
8060         number before adding it.
8061
8062 2002-12-21  Ravi Pratap  <ravi@ximian.com>
8063
8064         * ecore.cs (StandardImplicitConversion): When in an unsafe
8065         context, we allow conversion between void * to any other pointer
8066         type. This fixes bug #35973.
8067
8068 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
8069
8070         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
8071         is not thrown when extensionless outputs are used 
8072
8073 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8074
8075         * rootcontext.cs: fixed compilation of corlib.
8076
8077 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
8078
8079         * attribute.cs (Attributes.Contains): Add new method.
8080
8081         * class.cs (MethodCore.LabelParameters): if the parameter is an
8082         `out' parameter, check that no attribute `[In]' has been passed.
8083
8084         * enum.cs: Handle the `value__' name in an enumeration.
8085
8086 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
8087
8088         * decl.cs: Added special case to allow overrides on "protected
8089         internal" methods
8090
8091 2002-12-18  Ravi Pratap  <ravi@ximian.com>
8092
8093         * attribute.cs (Attributes.AddAttributeSection): Rename to this
8094         since it makes much more sense.
8095
8096         (Attributes.ctor): Don't require a Location parameter.
8097
8098         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
8099
8100         * attribute.cs (ApplyAttributes): Remove extra Location parameters
8101         since we already have that information per attribute.
8102
8103         * everywhere : make appropriate changes.
8104
8105         * class.cs (LabelParameters): Write the code which actually
8106         applies attributes to the return type. We can't do this on the MS
8107         .NET runtime so we flag a warning in the case an exception is
8108         thrown.
8109
8110 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
8111
8112         * const.cs: Handle implicit null conversions here too.
8113
8114 2002-12-17  Ravi Pratap  <ravi@ximian.com>
8115
8116         * class.cs (MethodCore.LabelParameters): Remove the extra
8117         Type [] parameter since it is completely unnecessary. Instead
8118         pass in the method's attributes so that we can extract
8119         the "return" attribute.
8120
8121 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
8122
8123         * cs-parser.jay (parse): Use Report.Error to flag errors instead
8124         of ignoring it and letting the compile continue.
8125
8126         * typemanager.cs (ChangeType): use an extra argument to return an
8127         error condition instead of throwing an exception.
8128
8129 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
8130
8131         * expression.cs (Unary.TryReduce): mimic the code for the regular
8132         code path.  Perform an implicit cast in the cases where we can
8133         implicitly convert to one of the integral types, and then reduce
8134         based on that constant.   This fixes bug #35483.
8135
8136 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8137
8138         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
8139
8140 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8141
8142         * namespace.cs: fixed bug #35489.
8143
8144 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
8145
8146         * class.cs: Remove some dead code.
8147
8148         * cs-parser.jay: Estimate the number of methods needed
8149         (RootContext.MethodCount);
8150
8151         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
8152         numbers instead of StringBuilders.
8153
8154         * support.cs (PtrHashtable): Add constructor with initial size;
8155         We can now reduce reallocations of the method table.
8156
8157 2002-12-10  Ravi Pratap  <ravi@ximian.com>
8158
8159         * attribute.cs (ApplyAttributes): Keep track of the emitted
8160         attributes on a per-target basis. This fixes bug #35413.
8161
8162 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
8163
8164         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
8165         default to the Windows 1252 encoding.
8166
8167         (UnixParseOption): Support version, thanks to Alp for the missing
8168         pointer. 
8169
8170         * AssemblyInfo.cs: Add nice assembly information.
8171
8172         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
8173         (bug 35169).
8174
8175         * cs-parser.jay: Allow a trailing comma before the close bracked
8176         in the attribute_section production.
8177
8178         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
8179         address of the instance was being taken, I will take this out,
8180         because we take the address of the object immediately here.
8181
8182 2002-12-09  Ravi Pratap  <ravi@ximian.com>
8183
8184         * typemanager.cs (AreMultipleAllowed): Take care of the most
8185         obvious case where attribute type is not in the current assembly -
8186         stupid me ;-)
8187
8188 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
8189
8190         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
8191         definitions, instead of doing that afterwards.  
8192
8193         Also we use a nice little hack, depending on the constructor, we
8194         know if we are a "composed" name or a simple name.  Hence, we
8195         avoid the IndexOf test, and we avoid 
8196
8197         * codegen.cs: Add code to assist in a bug reporter to track down
8198         the source of a compiler crash. 
8199
8200 2002-12-07  Ravi Pratap  <ravi@ximian.com>
8201
8202         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
8203         types have been emitted for a given element and flag an error
8204         if something which does not have AllowMultiple set is used more
8205         than once.
8206
8207         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
8208         attribute types and their corresponding AllowMultiple properties
8209
8210         (AreMultipleAllowed): Check the property for a given type.
8211
8212         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
8213         property in the case we have a TypeContainer.
8214
8215         (Attributes.AddAttribute): Detect duplicates and just skip on
8216         adding them. This trivial fix catches a pretty gross error in our
8217         attribute emission - global attributes were being emitted twice!
8218
8219         Bugzilla bug #33187 is now fixed.
8220
8221 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
8222
8223         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
8224         instead of pp_and).
8225
8226         * expression.cs (Binary.ResolveOperator): I can only use the
8227         Concat (string, string, string) and Concat (string, string,
8228         string, string) if the child is actually a concatenation of
8229         strings. 
8230
8231 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
8232
8233         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
8234         context where we need a 2-character lookahead.
8235
8236         * pending.cs (PendingImplementation): Rework so we can keep track
8237         of interface types all the time, and flag those which were
8238         implemented by parents as optional.
8239
8240 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
8241
8242         * expression.cs (Binary.ResolveOperator): Use
8243         String.Concat(string,string,string) or
8244         String.Concat(string,string,string,string) when possible. 
8245
8246         * typemanager: More helper methods.
8247
8248
8249 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
8250
8251         * pending.cs: remove the bogus return from GetMissingInterfaces()
8252         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
8253
8254 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8255
8256         * namespace.cs: avoid duplicated 'using xxx' being added to
8257         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
8258         when we get more than one 'using' statement for the same namespace.
8259         Report a CS0105 warning for it.
8260
8261 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
8262
8263         * cs-tokenizer.cs (consume_identifier): use read directly, instead
8264         of calling getChar/putback, uses internal knowledge of it.    
8265
8266         (xtoken): Reorder tokenizer so most common patterns are checked
8267         first.  This reduces the compilation time in another 5% (from 8.11s
8268         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
8269
8270         The parsing time is 22% of the compilation in mcs, and from that
8271         64% is spent on the tokenization process.  
8272
8273         I tried using a binary search for keywords, but this is slower
8274         than the hashtable.  Another option would be to do a couple of
8275         things:
8276
8277                 * Not use a StringBuilder, instead use an array of chars,
8278                   with a set value.  Notice that this way we could catch
8279                   the 645 error without having to do it *afterwards*.
8280
8281                 * We could write a hand-parser to avoid the hashtable
8282                   compares altogether.
8283
8284         The identifier consumption process takes 37% of the tokenization
8285         time.  Another 15% is spent on is_number.  56% of the time spent
8286         on is_number is spent on Int64.Parse:
8287
8288                 * We could probably choose based on the string length to
8289                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
8290                   computations. 
8291
8292         Another 3% is spend on wrapping `xtoken' in the `token' function.
8293
8294         Handle 0xa0 as whitespace (#34752)
8295
8296 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
8297
8298         * typemanager.cs (IsCLRType): New routine to tell whether a type
8299         is one of the builtin types.  
8300
8301         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
8302         typecode in more places instead of doing pointer comparissions.
8303         We could leverage some knowledge about the way the typecodes are
8304         laid out.
8305
8306         New code to cache namespaces in assemblies, it is currently not
8307         invoked, to be used soon.
8308
8309         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
8310
8311         * expression.cs (Binary.ResolveOperator): specially handle
8312         strings, and do not perform user-defined operator overloading for
8313         built-in types.
8314
8315 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
8316
8317         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
8318         internalcall as it is a pretty simple operation;  Avoid whenever
8319         possible to call Char.IsLetter.
8320
8321         (consume_identifier): Cut by half the number of
8322         hashtable calls by merging the is_keyword and GetKeyword behavior.
8323
8324         Do not short-circuit, because if we do, we
8325         report errors (ie, #if false && true would produce an invalid
8326         directive error);
8327
8328
8329 2002-11-24  Martin Baulig  <martin@ximian.com>
8330
8331         * expression.cs (Cast.TryReduce): If we're in checked syntax,
8332         check constant ranges and report a CS0221.  Fixes #33186.
8333
8334 2002-11-24  Martin Baulig  <martin@ximian.com>
8335
8336         * cs-parser.jay: Make this work for uninitialized variable
8337         declarations in the `for' initializer.  Fixes #32416.
8338
8339 2002-11-24  Martin Baulig  <martin@ximian.com>
8340
8341         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
8342         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
8343
8344 2002-11-24  Martin Baulig  <martin@ximian.com>
8345
8346         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
8347         argument; if true, we also check for user-defined conversions.
8348         This is only needed if both arguments are of a user-defined type.
8349         Fixes #30443, added test-175.cs.
8350         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
8351
8352         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
8353
8354 2002-11-24  Martin Baulig  <martin@ximian.com>
8355
8356         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
8357         function to get the store opcode.
8358         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
8359         only emit the Ldelema if the store opcode is Stobj.  You must run
8360         both test-34 and test-167 to test this.  Fixes #34529.
8361
8362 2002-11-23  Martin Baulig  <martin@ximian.com>
8363
8364         * ecore.cs (Expression.MemberLookup): Added additional
8365         `qualifier_type' argument which is used when we're being called
8366         from MemberAccess.DoResolve() and null if we're called from a
8367         SimpleName lookup.
8368         (Expression.MemberLookupFailed): New method to report errors; this
8369         does the CS1540 check and reports the correct error message.
8370
8371         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
8372         argument for the CS1540 check and redone the way how we're dealing
8373         with private members.  See the comment in the source code for details.
8374         (FilterWithClosure): Reverted this back to revision 1.197; renamed
8375         `closure_start_type' to `closure_qualifier_type' and check whether
8376         it's not null.  It was not this filter being broken, it was just
8377         being called with the wrong arguments.
8378
8379         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
8380         and pass it the correct `qualifier_type'; this also does the error
8381         handling for us.
8382
8383 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
8384
8385         * expression.cs (Invocation.EmitParams): If the we are dealing
8386         with a non-built-in value type, load its address as well.
8387
8388         (ArrayCreation): Use a a pretty constant instead
8389         of the hardcoded value 2.   Use 6 instead of 2 for the number of
8390         static initializers.  
8391
8392         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
8393         because they are not really value types, just glorified integers. 
8394
8395         * driver.cs: Do not append .exe, the CSC compiler does not do it.
8396
8397         * ecore.cs: Remove redundant code for enumerations, make them use
8398         the same code path as everything else, fixes the casting issue
8399         with enumerations in Windows.Forms.
8400
8401         * attribute.cs: Do only cast to string if it is a string, the
8402         validation happens later.
8403
8404         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
8405         people upgrade their corlibs.
8406
8407         * ecore.cs: Oops, enumerations were not following the entire code path
8408
8409 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
8410
8411         * typemanager.cs (FilterWithClosure): Commented out the test for
8412         1540 in typemanager.cs, as it has problems when accessing
8413         protected methods from a parent class (see test-174.cs). 
8414
8415         * attribute.cs (Attribute.ValidateGuid): new method.
8416         (Attribute.Resolve): Use above.
8417
8418 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
8419
8420         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
8421
8422         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
8423         handling for enumerations, as we only needed the TypeContainer
8424         functionality to begin with (this is required for the fix below to
8425         work for enums that reference constants in a container class for
8426         example). 
8427
8428         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
8429
8430         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
8431         a valid TypeBuilder to perform lookups on.o
8432
8433         * class.cs (InheritableMemberSignatureCompare): Use true in the
8434         call to GetGetMethod and GetSetMethod, because we are comparing
8435         the signature, and we need to get the methods *even* if they are
8436         private. 
8437
8438         (PropertyBase.CheckBase): ditto.
8439
8440         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
8441         GotoCase.Resolve): Use Peel on EmpytCasts.
8442
8443         * ecore.cs (EmptyCast): drop child, add Peel method.
8444
8445 2002-11-17  Martin Baulig  <martin@ximian.com>
8446
8447         * ecore.cs (EmptyCast.Child): New public property.
8448
8449         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
8450         label resolved to an EmptyCast.  Fixes #34162.
8451         (GotoCase.Resolve): Likewise.
8452         (Block.EmitMeta): Likewise.
8453
8454 2002-11-17  Martin Baulig  <martin@ximian.com>
8455
8456         * expression.cs (Invocation.BetterConversion): Prefer int over
8457         uint; short over ushort; long over ulong for integer literals.
8458         Use ImplicitConversionExists instead of StandardConversionExists
8459         since we also need to check for user-defined implicit conversions.
8460         Fixes #34165.  Added test-173.cs.
8461
8462 2002-11-16  Martin Baulig  <martin@ximian.com>
8463
8464         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
8465         with the `true' and `false' literals.  Fixes #33151.
8466
8467 2002-11-16  Martin Baulig  <martin@ximian.com>
8468
8469         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
8470         October 22nd; don't do the cs1540 check for static members.
8471
8472         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
8473         now using our own filter here and doing the cs1540 check again.
8474
8475 2002-11-16  Martin Baulig  <martin@ximian.com>
8476
8477         * support.cs (InternalParameters): Don't crash if we don't have
8478         any fixed parameters.  Fixes #33532.
8479
8480 2002-11-16  Martin Baulig  <martin@ximian.com>
8481
8482         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
8483         when looking up static methods to make this work on Windows.
8484         Fixes #33773.
8485
8486 2002-11-16  Martin Baulig  <martin@ximian.com>
8487
8488         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
8489         a setter rather than using PropertyInfo.CanWrite.
8490
8491 2002-11-15  Nick Drochak  <ndrochak@gol.com>
8492
8493         * class.cs: Allow acces to block member by subclasses. Fixes build
8494         breaker.
8495
8496 2002-11-14  Martin Baulig  <martin@ximian.com>
8497
8498         * class.cs (Constructor.Emit): Added the extern/block check.
8499         Fixes bug #33678.
8500
8501 2002-11-14  Martin Baulig  <martin@ximian.com>
8502
8503         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
8504         iteration while looking for indexers, this is needed because the
8505         indexer may have a different name in our base classes.  Fixed the
8506         error reporting (no indexers at all, not get accessor, no
8507         overloaded match).  Fixes bug #33089.
8508         (IndexerAccess.DoResolveLValue): Likewise.
8509
8510 2002-11-14  Martin Baulig  <martin@ximian.com>
8511
8512         * class.cs (PropertyBase.CheckBase): Make this work for multiple
8513         indexers.  Fixes the first part of bug #33089.
8514         (MethodSignature.InheritableMemberSignatureCompare): Added support
8515         for properties.
8516
8517 2002-11-13  Ravi Pratap  <ravi@ximian.com>
8518
8519         * attribute.cs (Attribute.Resolve): Catch the
8520         NullReferenceException and report it since it isn't supposed to
8521         happen. 
8522
8523 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
8524
8525         * expression.cs (Binary.EmitBranchable): Also handle the cases for
8526         LogicalOr and LogicalAnd that can benefit from recursively
8527         handling EmitBranchable.  The code now should be nice for Paolo.
8528
8529 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
8530
8531         * typemanager.cs (LookupType): Added a negative-hit hashtable for
8532         the Type lookups, as we perform quite a number of lookups on
8533         non-Types.  This can be removed once we can deterministically tell
8534         whether we have a type or a namespace in advance.
8535
8536         But this might require special hacks from our corlib.
8537
8538         * TODO: updated.
8539
8540         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
8541         and double which avoids a conversion from an integer to a double.
8542
8543         * expression.cs: tiny optimization, avoid calling IsConstant,
8544         because it effectively performs the lookup twice.
8545
8546 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
8547
8548         But a bogus return here to keep the semantics of the old code
8549         until the Mono runtime is fixed.
8550
8551         * pending.cs (GetMissingInterfaces): New method used to remove all
8552         the interfaces that are already implemented by our parent
8553         classes from the list of pending methods. 
8554
8555         * interface.cs: Add checks for calls after ResolveTypeExpr.
8556
8557 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
8558
8559         * class.cs (Class.Emit): Report warning 67: event not used if the
8560         warning level is beyond 3.
8561
8562         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
8563         being a NullLiteral.
8564
8565         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
8566         specifiers. 
8567
8568         * class.cs (TypeContainer.GetClassBases): Cover a missing code
8569         path that might fail if a type can not be resolved.
8570
8571         * expression.cs (Binary.Emit): Emit unsigned versions of the
8572         operators. 
8573
8574         * driver.cs: use error 5.
8575
8576 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
8577
8578         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
8579
8580 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
8581
8582         * cs-parser.jay (switch_section): A beautiful patch from Martin
8583         Baulig that fixed 33094.
8584
8585 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
8586
8587         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
8588         Check whether the base is abstract and report an error if so.
8589
8590         * expression.cs (IndexerAccess.DoResolveLValue,
8591         IndexerAccess.DoResolve): ditto. 
8592
8593         (Invocation.DoResolve): ditto.
8594
8595         (Invocation.FullMethodDesc): Improve the report string.
8596
8597         * statement.cs (Block): Eliminate IsVariableDefined as it is
8598         basically just a wrapper for GetVariableInfo.
8599
8600         * ecore.cs (SimpleName): Use new 
8601
8602         * support.cs (ReflectionParamter.ParameterType): We unwrap the
8603         type, as we return the actual parameter ref/unref state on a
8604         different call.
8605
8606 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
8607
8608         * support.cs: Return proper flags REF/OUT fixing the previous
8609         commit.  
8610
8611         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
8612         not used to mean `ref' but `ref or out' in ParameterReference
8613
8614         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
8615         full type signature instead of calling TypeManger.CSharpName
8616         ourselves. 
8617
8618         * support.cs (InternalParameters.ParameterDesc): Do not compare
8619         directly to the modflags, because REF/OUT will actually be bitsets
8620         if set. 
8621
8622         * delegate.cs (VerifyMethod): Check also the modifiers.
8623
8624         * cs-tokenizer.cs: Fix bug where floating point values with an
8625         exponent where a sign was missing was ignored.
8626
8627         * driver.cs: Allow multiple assemblies to be specified in a single
8628         /r: argument
8629
8630 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
8631
8632         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
8633         because identifiers after a parenthesis would end up in this kind
8634         of production, and we needed to desamiguate it for having casts
8635         like:
8636
8637                 (UserDefinedType *) xxx
8638
8639 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
8640
8641         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
8642         we should set on the Bindingflags.NonPublic, but not turn on
8643         private_ok.  private_ok controls whether a Private member is
8644         returned (this is chekced on the filter routine), while the
8645         BindingFlags.NonPublic just controls whether private/protected
8646         will be allowed.   This fixes the problem part of the problem of
8647         private properties being allowed to be used in derived classes.
8648
8649         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
8650         so we can call the children DoResolveLValue method (this will
8651         properly signal errors on lvalue assignments to base properties)
8652
8653         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
8654         getter are null, and we have a property info, we know that this
8655         happened because the lookup failed, so we report an error 122 for
8656         protection level violation.
8657
8658         We also silently return if setter and getter are null in the
8659         resolve functions, this condition only happens if we have flagged
8660         the error before.  This is the other half of the problem. 
8661
8662         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
8663         not have accessibility information, that is why we were returning
8664         true in the filter function in typemanager.cs.
8665
8666         To properly report 122 (property is inaccessible because of its
8667         protection level) correctly, we report this error in ResolveAccess
8668         by failing if both the setter and the getter are lacking (ie, the
8669         lookup failed). 
8670
8671         DoResolve and DoLResolve have been modified to check for both
8672         setter/getter being null and returning silently, the reason being
8673         that I did not want to put the knowledge about this error in upper
8674         layers, like:
8675
8676         int old = Report.Errors;
8677         x = new PropertyExpr (...);
8678         if (old != Report.Errors)
8679                 return null;
8680         else
8681                 return x;
8682
8683         So the property expr is returned, but it is invalid, so the error
8684         will be flagged during the resolve process. 
8685
8686         * class.cs: Remove InheritablePropertySignatureCompare from the
8687         class, as we no longer depend on the property signature to compute
8688         whether it is possible to implement a method or not.
8689
8690         The reason is that calling PropertyInfo.GetGetMethod will return
8691         null (in .NET, in Mono it works, and we should change this), in
8692         cases where the Get Method does not exist in that particular
8693         class.
8694
8695         So this code:
8696
8697         class X { public virtual int A { get { return 1; } } }
8698         class Y : X { }
8699         class Z : Y { public override int A { get { return 2; } } }
8700
8701         Would fail in Z because the parent (Y) would not have the property
8702         defined.  So we avoid this completely now (because the alternative
8703         fix was ugly and slow), and we now depend exclusively on the
8704         method names.
8705
8706         (PropertyBase.CheckBase): Use a method-base mechanism to find our
8707         reference method, instead of using the property.
8708
8709         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
8710         routines are gone now.
8711
8712         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
8713         names, they were incorrectly named.
8714
8715         * cs-tokenizer.cs: Return are more gentle token on failure. 
8716
8717         * pending.cs (PendingImplementation.InterfaceMethod): This routine
8718         had an out-of-sync index variable, which caused it to remove from
8719         the list of pending methods the wrong method sometimes.
8720
8721 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
8722
8723         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
8724         CanWrite, because those refer to this particular instance of the
8725         property, and do not take into account the fact that we can
8726         override single members of a property.
8727
8728         Constructor requires an EmitContext.  The resolution process does
8729         not happen here, but we need to compute the accessors before,
8730         because the resolution does not always happen for properties.
8731
8732         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
8733         subclass, before we did not update this flag, but we did update
8734         bindingflags. 
8735
8736         (GetAccessors): Drop this routine, as it did not work in the
8737         presence of partially overwritten set/get methods. 
8738
8739         Notice that this broke the cs1540 detection, but that will require
8740         more thinking. 
8741
8742 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8743
8744         * class.cs:
8745         * codegen.cs:
8746         * driver.cs: issue a warning instead of an error if we don't support
8747         debugging for the platform. Also ignore a couple of errors that may
8748         arise when trying to write the symbols. Undo my previous patch.
8749
8750 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8751
8752         * driver.cs: ignore /debug switch except for Unix platforms.
8753
8754 2002-10-23  Nick Drochak  <ndrochak@gol.com>
8755
8756         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
8757
8758 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
8759
8760         * driver.cs: Do not make mcs-debug conditional, so we do not break
8761         builds that use it.
8762
8763         * statement.cs (UsageVector.MergeChildren): I would like Martin to
8764         review this patch.  But basically after all the children variables
8765         have been merged, the value of "Breaks" was not being set to
8766         new_breaks for Switch blocks.  I think that it should be set after
8767         it has executed.  Currently I set this to the value of new_breaks,
8768         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
8769         conservative, but I do not understand this code very well.
8770
8771         I did not break anything in the build, so that is good ;-)
8772
8773         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
8774
8775 2002-10-20  Mark Crichton  <crichton@gimp.org>
8776
8777         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
8778
8779 2002-10-20  Nick Drochak  <ndrochak@gol.com>
8780
8781         * cfold.cs: Fixed compile blocker.
8782
8783 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
8784
8785         * driver.cs: I was chekcing the key, not the file.
8786
8787 2002-10-19  Ravi Pratap  <ravi@ximian.com>
8788
8789         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
8790         message that we were generating - we just need to silently return
8791         a null.
8792
8793 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
8794
8795         * class.cs (Event.Define): Change my previous commit, as this
8796         breaks the debugger.  This is a temporary hack, as it seems like
8797         the compiler is generating events incorrectly to begin with.
8798
8799         * expression.cs (Binary.ResolveOperator): Added support for 
8800         "U operator - (E x, E y)"
8801
8802         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
8803         y)".
8804
8805         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
8806         init-only variables, but this path did not take into account that
8807         there might be also instance readonly variables.  Correct this
8808         problem. 
8809
8810         This fixes bug 32253
8811
8812         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
8813         delegates as well.
8814
8815         * driver.cs: Change the extension for modules to `netmodule'
8816
8817         * cs-parser.jay: Improved slightly the location tracking for
8818         the debugger symbols.
8819
8820         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
8821         modifiers that were specified instead of the hardcoded value
8822         (FamAndAssem).  This was basically ignoring the static modifier,
8823         and others.  Fixes 32429.
8824
8825         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
8826         fixed a bug in the process (32476)
8827
8828         * expression.cs (ArrayAccess.EmitAssign): Patch from
8829         hwang_rob@yahoo.ca that fixes bug 31834.3
8830
8831 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
8832
8833         * driver.cs: Make the module extension .netmodule.
8834
8835 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
8836
8837         * driver.cs: Report an error if the resource file is not found
8838         instead of crashing.
8839
8840         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
8841         false, like Emit does.
8842
8843 2002-10-16  Nick Drochak  <ndrochak@gol.com>
8844
8845         * typemanager.cs: Remove unused private member.  Also reported mcs
8846         bug to report this as a warning like csc.
8847
8848 2002-10-15  Martin Baulig  <martin@gnome.org>
8849
8850         * statement.cs (Statement.Emit): Made this a virtual method; emits
8851         the line number info and calls DoEmit().
8852         (Statement.DoEmit): New protected abstract method, formerly knows
8853         as Statement.Emit().
8854
8855         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
8856
8857 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
8858
8859         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
8860         have fixed a remaining problem: not every AddXXXX was adding a
8861         fully qualified name.  
8862
8863         Now everyone registers a fully qualified name in the DeclSpace as
8864         being defined instead of the partial name.  
8865
8866         Downsides: we are slower than we need to be due to the excess
8867         copies and the names being registered this way.  
8868
8869         The reason for this is that we currently depend (on the corlib
8870         bootstrap for instance) that types are fully qualified, because
8871         we dump all the types in the namespace, and we should really have
8872         types inserted into the proper namespace, so we can only store the
8873         basenames in the defined_names array.
8874
8875 2002-10-10  Martin Baulig  <martin@gnome.org>
8876
8877         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
8878         from bug #31834, see the bug report for a testcase which is
8879         miscompiled.
8880
8881 2002-10-10  Martin Baulig  <martin@gnome.org>
8882
8883         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
8884         flow analysis code for this.
8885
8886         * statement.cs (Do, While, For): Tell the flow analysis code about
8887         infinite loops.
8888         (FlowBranching.UsageVector): Added support for infinite loops.
8889         (Block.Resolve): Moved the dead code elimination here and use flow
8890         analysis to do it.
8891
8892 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
8893
8894         * class.cs (Field.Define): Catch cycles on struct type
8895         definitions. 
8896
8897         * typemanager.cs (IsUnmanagedtype): Do not recursively check
8898         fields if the fields are static.  We only need to check instance
8899         fields. 
8900
8901         * expression.cs (As.DoResolve): Test for reference type.
8902
8903         * statement.cs (Using.ResolveExpression): Use
8904         ConvertImplicitRequired, not ConvertImplicit which reports an
8905         error on failture
8906         (Using.ResolveLocalVariableDecls): ditto.
8907
8908         * expression.cs (Binary.ResolveOperator): Report errors in a few
8909         places where we had to.
8910
8911         * typemanager.cs (IsUnmanagedtype): Finish implementation.
8912
8913 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
8914
8915         * expression.cs: Use StoreFromPtr instead of extracting the type
8916         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
8917
8918         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
8919         an enumeration value to a System.Enum, but System.Enum is not a
8920         value type, but an class type, so we need to box.
8921
8922         (Expression.ConvertExplicit): One codepath could return
8923         errors but not flag them.  Fix this.  Fixes #31853
8924
8925         * parameter.cs (Resolve): Do not allow void as a parameter type.
8926
8927 2002-10-06  Martin Baulig  <martin@gnome.org>
8928
8929         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
8930         if it's a class type and not a struct.  Fixes #31815.
8931
8932 2002-10-06  Martin Baulig  <martin@gnome.org>
8933
8934         * statement.cs: Reworked the flow analysis code a bit to make it
8935         usable for dead code elimination.
8936
8937 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8938
8939         * cs-parser.jay: allow empty source files. Fixes bug #31781.
8940
8941 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
8942
8943         * expression.cs (ComposedCast.DoResolveType): A quick workaround
8944         to fix the test 165, will investigate deeper.
8945
8946 2002-10-04  Martin Baulig  <martin@gnome.org>
8947
8948         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
8949         finally blocks actually work.
8950         (Try.Resolve): We don't need to create a sibling for `finally' if
8951         there is no finally block.
8952
8953 2002-10-04  Martin Baulig  <martin@gnome.org>
8954
8955         * class.cs (Constructor.Define): The default accessibility for a
8956         non-default constructor is private, not public.
8957
8958 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
8959
8960         * class.cs (Constructor): Make AllowedModifiers public, add
8961         EXTERN.
8962
8963         * cs-parser.jay: Perform the modifiers test here, as the
8964         constructor for the Constructor class usually receives a zero
8965         because of the way we create it (first we create, later we
8966         customize, and we were never checking the modifiers).
8967
8968         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
8969         is a version of LookupTypeReflection that includes the type-name
8970         cache.  This can be used as a fast path for functions that know
8971         the fully qualified name and are only calling into *.GetType() to
8972         obtain a composed type.
8973
8974         This is also used by TypeManager.LookupType during its type
8975         composition.
8976
8977         (LookupType): We now also track the real type name, as sometimes
8978         we can get a quey for the real type name from things like
8979         ComposedCast.  This fixes bug 31422.
8980
8981         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
8982         complete type fullname, it does not have to go through the type
8983         resolution system to obtain the composed version of the type (for
8984         obtaining arrays or pointers).
8985
8986         (Conditional.Emit): Use the EmitBoolExpression to
8987         generate nicer code, as requested by Paolo.
8988
8989         (ArrayCreation.CheckIndices): Use the patch from
8990         hwang_rob@yahoo.ca to validate the array initializers. 
8991
8992 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
8993
8994         * class.cs (ConstructorInitializer.Emit): simplify code by using
8995         Invocation.EmitCall, and at the same time, fix the bugs in calling
8996         parent constructors that took variable arguments. 
8997
8998         * ecore.cs (Expression.ConvertNumericExplicit,
8999         Expression.ImplicitNumericConversion): Remove the code that
9000         manually wrapped decimal (InternalTypeConstructor call is now gone
9001         as well).
9002
9003         * expression.cs (Cast.TryReduce): Also handle decimal types when
9004         trying to perform a constant fold on the type.
9005
9006         * typemanager.cs (IsUnmanagedtype): Partially implemented.
9007
9008         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
9009         that only turned off an error report, and did nothing else. 
9010
9011 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
9012
9013         * driver.cs: Handle and ignore /fullpaths
9014
9015 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
9016
9017         * expression.cs (Binary.ResolveOperator): Catch the case where
9018         DoNumericPromotions returns true, 
9019
9020         (Binary.DoNumericPromotions): Simplify the code, and the tests.
9021
9022 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
9023
9024         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
9025         report error 70.
9026
9027 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
9028
9029         * ecore.cs (ConvertNumericExplicit): It is not enough that the
9030         conversion exists, but it is also required that the conversion be
9031         performed.  This manifested in "(Type64Enum) 2".  
9032
9033         * class.cs (TypeManager.AddMethod): The fix is not to change
9034         AddEnum, because that one was using a fully qualified name (every
9035         DeclSpace derivative does), but to change the AddMethod routine
9036         that was using an un-namespaced name.  This now correctly reports
9037         the duplicated name.
9038
9039         Revert patch until I can properly fix it.  The issue
9040         is that we have a shared Type space across all namespaces
9041         currently, which is wrong.
9042
9043         Options include making the Namespace a DeclSpace, and merge
9044         current_namespace/current_container in the parser.
9045
9046 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
9047
9048         * cs-parser.jay: Improve error reporting when we get a different
9049         kind of expression in local_variable_type and
9050         local_variable_pointer_type. 
9051
9052         Propagate this to avoid missleading errors being reported.
9053
9054         * ecore.cs (ImplicitReferenceConversion): treat
9055         TypeManager.value_type as a target just like object_type.   As
9056         code like this:
9057
9058         ValueType v = 1;
9059
9060         Is valid, and needs to result in the int 1 being boxed before it
9061         is assigned to the value type v.
9062
9063         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
9064         to validate the enumeration name.
9065
9066         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
9067         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
9068         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
9069
9070         * ecore.cs (TryImplicitIntConversion): When doing an
9071         implicit-enumeration-conversion, check if the type is 64-bits and
9072         perform a conversion before passing to EnumConstant.
9073
9074 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
9075
9076         * decl.cs (Error_AmbiguousTypeReference); New routine used to
9077         report ambiguous type references.  Unlike the MS version, we
9078         report what the ambiguity is.   Innovation at work ;-)
9079
9080         (DeclSpace.FindType): Require a location argument to
9081         display when we display an ambiguous error.
9082
9083         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
9084
9085         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
9086
9087         * expression.cs (EmitDynamicInitializers): Apply patch from
9088         hwang_rob@yahoo.ca that fixes the order in which we emit our
9089         initializers. 
9090
9091 2002-09-21  Martin Baulig  <martin@gnome.org>
9092
9093         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
9094         delegate takes no arguments.
9095
9096 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
9097
9098         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
9099         from integers.
9100
9101         * expression.cs: Extract the underlying type.
9102
9103         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
9104
9105         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
9106
9107 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
9108
9109         * class.cs (TypeContainer.DefineType): We can not use the nice
9110         PackingSize with the size set to 1 DefineType method, because it
9111         will not allow us to define the interfaces that the struct
9112         implements.
9113
9114         This completes the fixing of bug 27287
9115
9116         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
9117         means also structs.  This fixes part of the problem. 
9118         (Expresion.ImplicitReferenceConversionExists): ditto.
9119
9120         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
9121         error if there were no errors reported during the type lookup
9122         process, to avoid duplicates or redundant errors.  Without this
9123         you would get an ambiguous errors plus a type not found.  We have
9124         beaten the user enough with the first error.  
9125
9126         (DeclSparce.FindType): Emit a warning if we have an ambiguous
9127         reference. 
9128
9129         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
9130         during the resolution process, stop the lookup, this avoids
9131         repeated error reports (same error twice).
9132
9133         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
9134
9135         * typemanager.cs (LookupType): Redo the type lookup code to match
9136         the needs of System.Reflection.  
9137
9138         The issue is that System.Reflection requires references to nested
9139         types to begin with a "+" sign instead of a dot.  So toplevel
9140         types look like: "NameSpace.TopLevelClass", and nested ones look
9141         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
9142         levels. 
9143
9144 2002-09-19  Martin Baulig  <martin@gnome.org>
9145
9146         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
9147         says that a method always returns or always throws an exception,
9148         don't report the CS0161.
9149
9150         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
9151         set `Returns = new_returns'.
9152
9153 2002-09-19  Martin Baulig  <martin@gnome.org>
9154
9155         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
9156         to an enum constant, check for a CS0176.
9157
9158 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
9159
9160         * class.cs (TypeContainer.CheckPairedOperators): Now we check
9161         for operators that must be in pairs and report errors.
9162
9163         * ecore.cs (SimpleName.DoResolveType): During the initial type
9164         resolution process, when we define types recursively, we must
9165         check first for types in our current scope before we perform
9166         lookups in the enclosing scopes.
9167
9168         * expression.cs (MakeByteBlob): Handle Decimal blobs.
9169
9170         (Invocation.VerifyArgumentsCompat): Call
9171         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
9172         I thought we were supposed to always call this, but there are a
9173         few places in the code where we dont do it.
9174
9175 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
9176
9177         * driver.cs: Add support in -linkres and -resource to specify the
9178         name of the identifier.
9179
9180 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
9181
9182         * ecore.cs (StandardConversionExists): Sync with the conversion
9183         code: allow anything-* to void* conversions.
9184
9185         (FindMostSpecificSource): Use an Expression argument
9186         instead of a Type, because we might be handed over a Literal which
9187         gets a few more implicit conversions that plain types do not.  So
9188         this information was being lost.
9189
9190         Also, we drop the temporary type-holder expression when not
9191         required.
9192
9193 2002-09-17  Martin Baulig  <martin@gnome.org>
9194
9195         * class.cs (PropertyBase.CheckBase): Don't check the base class if
9196         this is an explicit interface implementation.
9197
9198 2002-09-17  Martin Baulig  <martin@gnome.org>
9199
9200         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
9201         different `IndexerName' attributes.
9202
9203         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
9204         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
9205         virtual CommonResolve().
9206
9207 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
9208
9209         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
9210         and convert that to the UnderlyingType.
9211
9212         * statement.cs (Foreach.Resolve): Indexers are just like variables
9213         or PropertyAccesses.
9214
9215         * cs-tokenizer.cs (consume_string): Track line numbers and columns
9216         inside quoted strings, we were not doing this before.
9217
9218 2002-09-16  Martin Baulig  <martin@gnome.org>
9219
9220         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
9221         resolve it.  This is needed for the definite assignment check of the
9222         instance expression, fixes bug #29846.
9223         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
9224
9225 2002-09-16  Nick Drochak  <ndrochak@gol.com>
9226
9227         * parameter.cs: Fix compile error.  Cannot reference static member
9228         from an instance object.  Is this an mcs bug?
9229
9230 2002-09-14  Martin Baulig  <martin@gnome.org>
9231
9232         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
9233         multiple times.  Fixes bug #30295, added test-166.cs.
9234
9235 2002-09-14  Martin Baulig  <martin@gnome.org>
9236
9237         * statement.cs (Block.Emit): Don't emit unreachable code.
9238         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
9239         `break' statements.
9240         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
9241
9242 2002-09-14  Martin Baulig  <martin@gnome.org>
9243
9244         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
9245         is set.
9246
9247 2002-09-14  Martin Baulig  <martin@gnome.org>
9248
9249         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
9250         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
9251         be false on the ms runtime.
9252
9253 2002-09-13  Martin Baulig  <martin@gnome.org>
9254
9255         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
9256         the CS0038 error message.
9257
9258 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
9259
9260         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
9261         constant inside, return it.
9262
9263 2002-09-12  Martin Baulig  <martin@gnome.org>
9264
9265         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
9266         implicit conversion can be done between enum types.
9267
9268         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
9269         check whether an implicit conversion to the current enum's UnderlyingType
9270         exists and report an error if not.
9271
9272         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
9273         without debugging support.
9274
9275         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
9276         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
9277
9278 2002-09-12  Martin Baulig  <martin@gnome.org>
9279
9280         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
9281
9282         * ecore.cs (IMemberExpr.DeclaringType): New property.
9283         (SimpleName.SimpleNameResolve): Check whether we're accessing a
9284         nonstatic member of an outer type (CS0038).
9285
9286 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
9287
9288         * driver.cs: Activate the using-error detector at warning level
9289         4 (at least for MS-compatible APIs).
9290
9291         * namespace.cs (VerifyUsing): Small buglett fix.
9292
9293         * pending.cs (PendingImplementation): pass the container pointer. 
9294
9295         * interface.cs (GetMethods): Allow for recursive definition.  Long
9296         term, I would like to move every type to support recursive
9297         definitions, not the current ordering mechanism that we have right
9298         now.
9299
9300         The situation is this: Attributes are handled before interfaces,
9301         so we can apply attributes to interfaces.  But some attributes
9302         implement interfaces, we will now handle the simple cases
9303         (recursive definitions will just get an error).  
9304
9305         * parameter.cs: Only invalidate types at the end if we fail to
9306         lookup all types.  
9307
9308 2002-09-09  Martin Baulig  <martin@gnome.org>
9309
9310         * ecore.cs (PropertyExpr.Emit): Also check for
9311         TypeManager.system_int_array_get_length so this'll also work when
9312         compiling corlib.  Fixes #30003.
9313
9314 2002-09-09  Martin Baulig  <martin@gnome.org>
9315
9316         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
9317         and throw an exception if we can't get the type's size.  Fixed #30040,
9318         added test-165.cs.
9319
9320 2002-09-09  Martin Baulig  <martin@gnome.org>
9321
9322         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
9323
9324         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
9325         context.  Fixes bug #30027.
9326
9327         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
9328         virtual functions.  Fixes bug #30043, added test-164.cs.
9329
9330 2002-09-08  Ravi Pratap  <ravi@ximian.com>
9331
9332         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
9333
9334 2002-09-08  Nick Drochak  <ndrochak@gol.com>
9335
9336         * driver.cs: Use an object to get the windows codepage since it's not a
9337         static property.
9338
9339 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
9340
9341         * statement.cs (For.Emit): for infinite loops (test == null)
9342         return whether there is a break inside, not always "true".
9343
9344         * namespace.cs (UsingEntry): New struct to hold the name of the
9345         using definition, the location where it is defined, and whether it
9346         has been used in a successful type lookup.
9347
9348         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
9349         strings.
9350
9351         * decl.cs: ditto.
9352
9353 2002-09-06  Ravi Pratap  <ravi@ximian.com>
9354
9355         * attribute.cs : Fix incorrect code which relied on catching
9356         a NullReferenceException to detect a null being passed in
9357         where an object was expected.
9358
9359 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
9360
9361         * statement.cs (Try): flag the catch variable as assigned
9362
9363         * expression.cs (Cast): Simplified by using ResolveType instead of
9364         manually resolving.
9365
9366         * statement.cs (Catch): Fix bug by using ResolveType.
9367
9368 2002-09-06  Ravi Pratap  <ravi@ximian.com>
9369
9370         * expression.cs (BetterConversion): Special case for when we have
9371         a NullLiteral as the argument and we have to choose between string
9372         and object types - we choose string the way csc does.
9373
9374         * attribute.cs (Attribute.Resolve): Catch the
9375         NullReferenceException and report error #182 since the Mono
9376         runtime no more has the bug and having this exception raised means
9377         we tried to select a constructor which takes an object and is
9378         passed a null.
9379
9380 2002-09-05  Ravi Pratap  <ravi@ximian.com>
9381
9382         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
9383         message (1502, 1503) when we can't locate a method after overload
9384         resolution. This is much more informative and closes the bug
9385         Miguel reported.
9386
9387         * interface.cs (PopulateMethod): Return if there are no argument
9388         types. Fixes a NullReferenceException bug.
9389
9390         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
9391         expressions too. Previously we were checking only in one place for
9392         positional arguments leaving out named arguments.
9393
9394         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
9395         type to the enum type is not allowed. Remove code corresponding to
9396         that.
9397
9398         (ConvertNumericExplicit): Allow explicit conversions from
9399         the underlying type to enum type. This precisely follows the spec
9400         and closes a bug filed by Gonzalo.
9401
9402 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9403
9404         * compiler.csproj:
9405         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
9406
9407 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
9408
9409         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
9410         it was important that we stored the right value after the
9411         reduction in `converted'.
9412
9413 2002-09-04  Martin Baulig  <martin@gnome.org>
9414
9415         * location.cs (Location.SymbolDocument): Use full pathnames for the
9416         source files.
9417
9418 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
9419
9420         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
9421         of the expression resolve mechanism, because that will catch the
9422         SimpleName error failures.
9423
9424         (Conditional): If we can not resolve the
9425         expression, return, do not crash.
9426
9427 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9428
9429         * cs-tokenizer.cs:
9430         (location): display token name instead of its number.
9431
9432 2002-08-28  Martin Baulig  <martin@gnome.org>
9433
9434         * expression.cs (Binary.ResolveOperator): Don't silently return
9435         but return an error if an operator cannot be applied between two
9436         enum types.
9437
9438 2002-08-28  Martin Baulig  <martin@gnome.org>
9439
9440         * class.cs (Constructor.Define): Set the permission attributes
9441         correctly instead of making all constructors public.
9442
9443 2002-08-28  Martin Baulig  <martin@gnome.org>
9444
9445         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
9446         for private members before reporting a CS0103; if we find anything,
9447         it's a CS0122.
9448
9449 2002-08-28  Martin Baulig  <martin@gnome.org>
9450
9451         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
9452         to check whether `closure_start_type == closure_invocation_type',
9453         we also need to check whether `m.DeclaringType == closure_invocation_type'
9454         before bypassing the permission checks.  We might be accessing
9455         protected/private members from the base class.
9456         (TypeManager.RealMemberLookup): Only set private_ok if private
9457         members were requested via BindingFlags.NonPublic.
9458
9459         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
9460
9461         * expression.cs (MemberAccess.ResolveMemberAccess): Set
9462         MethodGroupExpr.IsExplicitImpl if appropriate.
9463         (Invocation.DoResolve): Don't report the CS0120 for explicit
9464         interface implementations.
9465
9466 2002-08-27  Martin Baulig  <martin@gnome.org>
9467
9468         * expression.cs (Invocation.DoResolve): If this is a static
9469         method and we don't have an InstanceExpression, we must report
9470         a CS0120.
9471
9472 2002-08-25  Martin Baulig  <martin@gnome.org>
9473
9474         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
9475         `==' between a valuetype and an object.
9476
9477 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
9478
9479         * ecore.cs (TypeExpr): Provide a ToString method.
9480
9481 2002-08-24  Martin Baulig  <martin@gnome.org>
9482
9483         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
9484         now called proggie.dbg and it's a binary file.
9485
9486 2002-08-23  Martin Baulig  <martin@gnome.org>
9487
9488         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
9489
9490 2002-08-23  Martin Baulig  <martin@gnome.org>
9491
9492         * struct.cs (MyStructInfo.ctor): Make this work with empty
9493         structs; it's not allowed to use foreach() on null.
9494
9495 2002-08-23  Martin Baulig  <martin@gnome.org>
9496
9497         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
9498         writer the full pathname of the generated assembly.
9499
9500 2002-08-23  Martin Baulig  <martin@gnome.org>
9501
9502         * statements.cs (FlowBranching.UsageVector.MergeChildren):
9503         A `finally' block never returns or breaks; improved handling of
9504         unreachable code.
9505
9506 2002-08-23  Martin Baulig  <martin@gnome.org>
9507
9508         * statement.cs (Throw.Resolve): Allow `throw null'.
9509
9510 2002-08-23  Martin Baulig  <martin@gnome.org>
9511
9512         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
9513         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
9514         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
9515         MemberLookup would return a wrong event if this is an explicit
9516         interface implementation and the class has an event with the same
9517         name.
9518
9519 2002-08-23  Martin Baulig  <martin@gnome.org>
9520
9521         * statement.cs (Block.AddChildVariableNames): New public method.
9522         (Block.AddChildVariableName): Likewise.
9523         (Block.IsVariableNameUsedInChildBlock): Likewise.
9524         (Block.AddVariable): Check whether a variable name has already
9525         been used in a child block.
9526
9527         * cs-parser.jay (declare_local_variables): Mark all variable names
9528         from the current block as being used in a child block in the
9529         implicit block.
9530
9531 2002-08-23  Martin Baulig  <martin@gnome.org>
9532
9533         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
9534         find the symbol writer.
9535
9536         * driver.cs: csc also allows the arguments to /define being
9537         separated by commas, not only by semicolons.
9538
9539 2002-08-23  Martin Baulig  <martin@gnome.org>
9540
9541         * interface.cs (Interface.GetMembers): Added static check for events.
9542
9543 2002-08-15  Martin Baulig  <martin@gnome.org>
9544
9545         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
9546         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
9547
9548         * ecore.cs (Expression.MemberLookup): Added documentation and explained
9549         why the MethodData.EmitDestructor() change was necessary.
9550
9551 2002-08-20  Martin Baulig  <martin@gnome.org>
9552
9553         * class.cs (TypeContainer.FindMembers): Added static check for events.
9554
9555         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
9556
9557         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
9558         use Type.GetEvents(), not Type.FindMembers().
9559
9560 2002-08-20  Martin Baulig  <martin@gnome.org>
9561
9562         * decl.cs (MemberCache): Added a special method cache which will
9563         be used for method-only searched.  This ensures that a method
9564         search will return a MethodInfo with the correct ReflectedType for
9565         inherited methods.      
9566
9567 2002-08-20  Martin Baulig  <martin@gnome.org>
9568
9569         * decl.cs (DeclSpace.FindMembers): Made this public.
9570
9571 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9572
9573         * delegate.cs: fixed build on windows.
9574         [FIXME:  Filed as bug #29150: MCS must report these errors.]
9575
9576 2002-08-19  Ravi Pratap  <ravi@ximian.com>
9577
9578         * ecore.cs (StandardConversionExists): Return a false
9579         if we are trying to convert the void type to anything else
9580         since that is not allowed.
9581
9582         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
9583         we flag error 70 in the event an event is trying to be accessed
9584         directly from outside the declaring type.
9585
9586 2002-08-20  Martin Baulig  <martin@gnome.org>
9587
9588         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
9589         MemberCache from typemanager.cs to decl.cs.
9590
9591 2002-08-19  Martin Baulig  <martin@gnome.org>
9592
9593         * class.cs (TypeContainer): Implement IMemberContainer.
9594         (TypeContainer.DefineMembers): Create the MemberCache.
9595         (TypeContainer.FindMembers): Do better BindingFlags checking; only
9596         return public members if BindingFlags.Public was given, check
9597         whether members are static.
9598
9599 2002-08-16  Martin Baulig  <martin@gnome.org>
9600
9601         * decl.cs (DeclSpace.Define): Splitted this in Define and
9602         DefineMembers.  DefineMembers is called first and initializes the
9603         MemberCache.
9604
9605         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
9606         DefineMembers() on all our DeclSpaces.
9607
9608         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
9609         but call DefineMembers() on all nested interfaces.  We call their
9610         Define() in our new Define() function.
9611
9612         * interface.cs (Interface): Implement IMemberContainer.
9613         (Interface.Define): Moved all code except the attribute stuf to
9614         DefineMembers().
9615         (Interface.DefineMembers): Initialize the member cache.
9616
9617         * typemanager.cs (IMemberFinder): Removed this interface, we don't
9618         need this anymore since we can use MemberCache.FindMembers directly.
9619
9620 2002-08-19  Martin Baulig  <martin@gnome.org>
9621
9622         * typemanager.cs (MemberCache): When creating the cache for an
9623         interface type, add all inherited members.
9624         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
9625         to `out bool used_cache' and documented it.
9626         (TypeManager.MemberLookup): If we already used the cache in the first
9627         iteration, we don't need to do the interfaces check.
9628
9629 2002-08-19  Martin Baulig  <martin@gnome.org>
9630
9631         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
9632         here from IMemberFinder and don't implement this interface anymore.
9633         (DeclSpace.MemberCache): Moved here from IMemberFinder.
9634
9635         * typemanager.cs (IMemberFinder): This interface is now only used by
9636         classes which actually support the member cache.
9637         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
9638         since we only put DeclSpaces into this Hashtable.
9639         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
9640         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
9641
9642 2002-08-16  Martin Baulig  <martin@gnome.org>
9643
9644         * typemanager.cs (ICachingMemberFinder): Removed.
9645         (IMemberFinder.MemberCache): New property.
9646         (TypeManager.FindMembers): Merged this with RealFindMembers().
9647         This function will never be called from TypeManager.MemberLookup()
9648         so we can't use the cache here, just the IMemberFinder.
9649         (TypeManager.MemberLookup_FindMembers): Check whether the
9650         IMemberFinder has a MemberCache and call the cache's FindMembers
9651         function.
9652         (MemberCache): Rewrote larger parts of this yet another time and
9653         cleaned it up a bit.
9654
9655 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
9656
9657         * driver.cs (LoadArgs): Support quoting.
9658
9659         (Usage): Show the CSC-like command line arguments.
9660
9661         Improved a few error messages.
9662
9663 2002-08-15  Martin Baulig  <martin@gnome.org>
9664
9665         * typemanager.cs (IMemberContainer.Type): New property.
9666         (IMemberContainer.IsInterface): New property.
9667
9668         The following changes are conditional to BROKEN_RUNTIME, which is
9669         defined at the top of the file.
9670
9671         * typemanager.cs (MemberCache.MemberCache): Don't add the base
9672         class'es members, but add all members from TypeHandle.ObjectType
9673         if we're an interface.
9674         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
9675         is the current type.
9676         (MemberCache.CacheEntry.Container): Removed this field.
9677         (TypeHandle.GetMembers): Include inherited members.
9678
9679 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9680
9681         * typemanager.cs: fixed compilation and added a comment on a field that
9682         is never used.
9683
9684 2002-08-15  Martin Baulig  <martin@gnome.org>
9685
9686         * class.cs (ConstructorInitializer.Resolve): In the
9687         Expression.MemberLookup call, use the queried_type as
9688         invocation_type.
9689
9690         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
9691         declared' attribute, it's always true.
9692         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
9693         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
9694         temporary wrapper for FindMembers which tells MemberLookup whether
9695         members from the base classes are included in the return value.
9696         This will go away soon.
9697         (TypeManager.MemberLookup): Use this temporary hack here; once the
9698         new MemberCache is completed, we don't need to do the DeclaredOnly
9699         looping here anymore since the MemberCache will take care of this.
9700         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
9701         (MemberCache): When creating the MemberCache for a class, get
9702         members from the current class and all its base classes.
9703         (MemberCache.CacheEntry.Container): New field.  This is a
9704         temporary hack until the Mono runtime is fixed to distinguish
9705         between ReflectedType and DeclaringType.  It allows us to use MCS
9706         with both the MS runtime and the unfixed Mono runtime without
9707         problems and without accecting performance.
9708         (MemberCache.SearchMembers): The DeclaredOnly looping from
9709         TypeManager.MemberLookup is now done here.      
9710
9711 2002-08-14  Martin Baulig  <martin@gnome.org>
9712
9713         * statement.cs (MyStructInfo.MyStructInfo): Don't call
9714         Type.GetFields on dynamic types but get the fields from the
9715         corresponding TypeContainer.
9716         (MyStructInfo.GetStructInfo): Added check for enum types.
9717
9718         * typemanager.cs (MemberList.IsSynchronized): Implemented.
9719         (MemberList.SyncRoot): Implemented.
9720         (TypeManager.FilterWithClosure): No need to check permissions if
9721         closure_start_type == closure_invocation_type, don't crash if
9722         closure_invocation_type is null.
9723
9724 2002-08-13  Martin Baulig  <martin@gnome.org>
9725
9726         Rewrote TypeContainer.FindMembers to use a member cache.  This
9727         gives us a speed increase of about 35% for the self-hosting MCS
9728         build and of about 15-20% for the class libs (both on GNU/Linux).
9729
9730         * report.cs (Timer): New class to get enhanced profiling.  This
9731         whole class is "TIMER" conditional since it remarkably slows down
9732         compilation speed.
9733
9734         * class.cs (MemberList): New class.  This is an IList wrapper
9735         which we're now using instead of passing MemberInfo[]'s around to
9736         avoid copying this array unnecessarily.
9737         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
9738         (ICachingMemberFinder, IMemberContainer): New interface.
9739         (TypeManager.FilterWithClosure): If `criteria' is null, the name
9740         has already been checked, otherwise use it for the name comparision.
9741         (TypeManager.FindMembers): Renamed to RealMemberFinder and
9742         provided wrapper which tries to use ICachingMemberFinder.FindMembers
9743         if possible.  Returns a MemberList, not a MemberInfo [].
9744         (TypeHandle): New class, implements IMemberContainer.  We create
9745         one instance of this class per type, it contains a MemberCache
9746         which is used to do the member lookups.
9747         (MemberCache): New class.  Each instance of this class contains
9748         all members of a type and a name-based hash table.
9749         (MemberCache.FindMembers): This is our new member lookup
9750         function.  First, it looks up all members of the requested name in
9751         the hash table.  Then, it walks this list and sorts out all
9752         applicable members and returns them.
9753
9754 2002-08-13  Martin Baulig  <martin@gnome.org>
9755
9756         In addition to a nice code cleanup, this gives us a performance
9757         increase of about 1.4% on GNU/Linux - not much, but it's already
9758         half a second for the self-hosting MCS compilation.
9759
9760         * typemanager.cs (IMemberFinder): New interface.  It is used by
9761         TypeManager.FindMembers to call FindMembers on a TypeContainer,
9762         Enum, Delegate or Interface.
9763         (TypeManager.finder_to_member_finder): New PtrHashtable.
9764         (TypeManager.finder_to_container): Removed.
9765         (TypeManager.finder_to_delegate): Removed.
9766         (TypeManager.finder_to_interface): Removed.
9767         (TypeManager.finder_to_enum): Removed.
9768
9769         * interface.cs (Interface): Implement IMemberFinder.
9770
9771         * delegate.cs (Delegate): Implement IMemberFinder.
9772
9773         * enum.cs (Enum): Implement IMemberFinder.
9774
9775         * class.cs (TypeContainer): Implement IMemberFinder.
9776
9777 2002-08-12  Martin Baulig  <martin@gnome.org>
9778
9779         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
9780
9781 2002-08-12  Martin Baulig  <martin@gnome.org>
9782
9783         * ecore.cs (ITypeExpression): New interface for expressions which
9784         resolve to a type.
9785         (TypeExpression): Renamed to TypeLookupExpression.
9786         (Expression.DoResolve): If we're doing a types-only lookup, the
9787         expression must implement the ITypeExpression interface and we
9788         call DoResolveType() on it.
9789         (SimpleName): Implement the new ITypeExpression interface.
9790         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
9791         hack, the situation that we're only looking up types can't happen
9792         anymore when this method is called.  Moved the type lookup code to
9793         DoResolveType() and call it.
9794         (SimpleName.DoResolveType): This ITypeExpression interface method
9795         is now doing the types-only lookup.
9796         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
9797         (ResolveFlags): Added MaskExprClass.
9798
9799         * expression.cs (MemberAccess): Implement the ITypeExpression
9800         interface.
9801         (MemberAccess.DoResolve): Added support for a types-only lookup
9802         when we're called via ITypeExpression.DoResolveType().
9803         (ComposedCast): Implement the ITypeExpression interface.
9804
9805         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
9806         Expression.Resolve() with ResolveFlags.Type instead.
9807
9808 2002-08-12  Martin Baulig  <martin@gnome.org>
9809
9810         * interface.cs (Interface.Define): Apply attributes.
9811
9812         * attribute.cs (Attribute.ApplyAttributes): Added support for
9813         interface attributes.
9814
9815 2002-08-11  Martin Baulig  <martin@gnome.org>
9816
9817         * statement.cs (Block.Emit): Only check the "this" variable if we
9818         do not always throw an exception.
9819
9820         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
9821         whether the property has a set accessor.
9822
9823 2002-08-11  Martin Baulig  <martin@gnome.org>
9824
9825         Added control flow analysis support for structs.
9826
9827         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
9828         with control flow analysis turned off.
9829         (IVariable): New interface.
9830         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
9831         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
9832         (FieldExpr.DoResolve): Resolve the instance expression with flow
9833         analysis turned off and do the definite assignment check after the
9834         resolving when we know what the expression will resolve to.
9835
9836         * expression.cs (LocalVariableReference, ParameterReference):
9837         Implement the new IVariable interface, only call the flow analysis
9838         code if ec.DoFlowAnalysis is true.
9839         (This): Added constructor which takes a Block argument.  Implement
9840         the new IVariable interface.
9841         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
9842         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
9843         This does the definite assignment checks for struct members.
9844
9845         * class.cs (Constructor.Emit): If this is a non-static `struct'
9846         constructor which doesn't have any initializer, call
9847         Block.AddThisVariable() to tell the flow analysis code that all
9848         struct elements must be initialized before control returns from
9849         the constructor.
9850
9851         * statement.cs (MyStructInfo): New public class.
9852         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
9853         argument to this indexer.  If non-zero, check an individual struct
9854         member, not the whole struct.
9855         (FlowBranching.CheckOutParameters): Check struct members.
9856         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
9857         overloaded versions of these methods which take an additional
9858         `int field_idx' argument to check struct members.
9859         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
9860         overloaded versions of these methods which take an additional
9861         `string field_name' argument to check struct member.s
9862         (VariableInfo): Implement the IVariable interface.
9863         (VariableInfo.StructInfo): New public property.  Returns the
9864         MyStructInfo instance of the variable if it's a struct or null.
9865         (Block.AddThisVariable): New public method.  This is called from
9866         Constructor.Emit() for non-static `struct' constructor which do
9867         not have any initializer.  It creates a special variable for the
9868         "this" instance variable which will be checked by the flow
9869         analysis code to ensure that all of the struct's fields are
9870         initialized before control returns from the constructor.
9871         (UsageVector): Added support for struct members.  If a
9872         variable/parameter is a struct with N members, we reserve a slot
9873         in the usage vector for each member.  A struct is considered fully
9874         initialized if either the struct itself (slot 0) or all its
9875         members are initialized.
9876
9877 2002-08-08  Martin Baulig  <martin@gnome.org>
9878
9879         * driver.cs (Driver.MainDriver): Only report an error CS5001
9880         if there were no compilation errors.
9881
9882         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
9883         `UnsafeContext' property to determine whether the parent is in
9884         unsafe context rather than checking the parent's ModFlags:
9885         classes nested in an unsafe class are unsafe as well.
9886
9887 2002-08-08  Martin Baulig  <martin@gnome.org>
9888
9889         * statement.cs (UsageVector.MergeChildren): Distinguish between
9890         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
9891         we return.  Added test17() and test18() to test-154.cs.
9892
9893 2002-08-08  Martin Baulig  <martin@gnome.org>
9894
9895         * typemanager.cs (TypeManager.FilterWithClosure): If we have
9896         Family access, make sure the invoking type isn't a subclass of the
9897         queried type (that'd be a CS1540).
9898
9899         * ecore.cs (Expression.MemberLookup): Added overloaded version of
9900         this method which takes an additional `Type invocation_type'.
9901
9902         * expression.cs (BaseAccess.DoResolve): Use the base type as
9903         invocation and query type.
9904         (MemberAccess.DoResolve): If the lookup failed and we're about to
9905         report a CS0122, try a lookup with the ec.ContainerType - if this
9906         succeeds, we must report a CS1540.
9907
9908 2002-08-08  Martin Baulig  <martin@gnome.org>
9909
9910         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
9911         (MethodGroupExpr): Implement the IMemberExpr interface.
9912
9913         * expression (MemberAccess.ResolveMemberAccess): No need to have
9914         any special code for MethodGroupExprs anymore, they're now
9915         IMemberExprs.   
9916
9917 2002-08-08  Martin Baulig  <martin@gnome.org>
9918
9919         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
9920         Family, FamANDAssem and FamORAssem permissions.
9921         (TypeManager.IsSubclassOrNestedChildOf): New public method.
9922
9923 2002-08-08  Martin Baulig  <martin@gnome.org>
9924
9925         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
9926         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
9927         or loop block.
9928
9929 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
9930
9931         * driver.cs: implemented /resource option to embed managed resources.
9932
9933 2002-08-07  Martin Baulig  <martin@gnome.org>
9934
9935         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
9936         (FieldBase.HasFieldInitializer): New public property.
9937         (FieldBase.GetInitializerExpression): New public method.  Resolves and
9938         returns the field initializer and makes sure it is only resolved once.
9939         (TypeContainer.EmitFieldInitializers): Call
9940         FieldBase.GetInitializerExpression to get the initializer, this ensures
9941         that it isn't resolved multiple times.
9942
9943         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
9944         the resolving process (SimpleName/MemberLookup) that we're currently
9945         emitting a field initializer (which must not access any instance members,
9946         this is an error CS0236).
9947
9948         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
9949         argument, if the `IsFieldInitializer' flag is set, we must report and
9950         error CS0236 and not an error CS0120.   
9951
9952 2002-08-07  Martin Baulig  <martin@gnome.org>
9953
9954         * ecore.cs (IMemberExpr): New public interface.
9955         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
9956         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
9957         if the expression is an IMemberExpr.
9958
9959         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
9960         to be null, implicitly default to `this' if we're non-static in
9961         this case.  Simplified the code a lot by using the new IMemberExpr
9962         interface.  Also fixed bug #28176 here.
9963
9964 2002-08-06  Martin Baulig  <martin@gnome.org>
9965
9966         * cs-parser.jay (SimpleLookup): Removed.  We need to create
9967         ParameterReferences during semantic analysis so that we can do a
9968         type-only search when resolving Cast, TypeOf and SizeOf.
9969         (block): Pass the `current_local_parameters' to the Block's
9970         constructor.
9971
9972         * class.cs (ConstructorInitializer): Added `Parameters parameters'
9973         argument to the constructor.
9974         (ConstructorInitializer.Resolve): Create a temporary implicit
9975         block with the parameters.
9976
9977         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
9978         references here if we aren't doing a type-only search.
9979
9980         * statement.cs (Block): Added constructor which takes a
9981         `Parameters parameters' argument.
9982         (Block.Parameters): New public property.
9983
9984         * support.cs (InternalParameters.Parameters): Renamed `parameters'
9985         to `Parameters' and made it public readonly.
9986
9987 2002-08-06  Martin Baulig  <martin@gnome.org>
9988
9989         * ecore.cs (Expression.Warning): Made this public as well.
9990
9991         * report.cs (Report.Debug): Print the contents of collections.
9992
9993 2002-08-06  Martin Baulig  <martin@gnome.org>
9994
9995         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
9996         used to tell Resolve() which kinds of expressions it may return.
9997         (Expression.Resolve): Added overloaded version of this method which
9998         takes a `ResolveFlags flags' argument.  This can be used to tell
9999         Resolve() which kinds of expressions it may return.  Reports a
10000         CS0118 on error.
10001         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
10002         ResolveFlags.SimpleName.
10003         (Expression.Error118): Added overloaded version of this method which
10004         takes a `ResolveFlags flags' argument.  It uses the flags to determine
10005         which kinds of expressions are allowed.
10006
10007         * expression.cs (Argument.ResolveMethodGroup): New public method.
10008         Resolves an argument, but allows a MethodGroup to be returned.
10009         This is used when invoking a delegate.
10010
10011         * TODO: Updated a bit.
10012
10013 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10014
10015         Fixed compilation with csc.
10016
10017         * ecore.cs: Expression.Error made public. Is this correct? Should
10018         Warning be made public too?
10019
10020         * expression.cs: use ea.Location instead of ea.loc.
10021         [FIXME:  Filed as bug #28607: MCS must report these errors.]
10022
10023 2002-08-06  Martin Baulig  <martin@gnome.org>
10024
10025         * ecore.cs (Expression.loc): Moved the location here instead of
10026         duplicating it in all derived classes.
10027         (Expression.Location): New public property.
10028         (Expression.Error, Expression.Warning): Made them non-static and
10029         removed the location argument.
10030         (Expression.Warning): Added overloaded version which takes an
10031         `int level' argument.
10032         (Expression.Error118): Make this non-static and removed the
10033         expression and location arguments.
10034         (TypeExpr): Added location argument to the constructor.
10035
10036         * expression.cs (StaticCallExpr): Added location argument to
10037         the constructor.
10038         (Indirection, PointerArithmetic): Likewise.
10039         (CheckedExpr, UnCheckedExpr): Likewise.
10040         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
10041         (StringPtr): Likewise.
10042
10043
10044 2002-08-05  Martin Baulig  <martin@gnome.org>
10045
10046         * expression.cs (BaseAccess.DoResolve): Actually report errors.
10047
10048         * assign.cs (Assign.DoResolve): Check whether the source
10049         expression is a value or variable.
10050
10051         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
10052         while resolving the corresponding blocks.
10053
10054         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
10055         an error, don't silently return null.
10056
10057         * statement.cs (Block.AddVariable): Do the error reporting here
10058         and distinguish between CS0128 and CS0136.
10059         (Block.DoResolve): Report all unused labels (warning CS0164).
10060         (LabeledStatement): Pass the location to the constructor.
10061         (LabeledStatement.HasBeenReferenced): New property.
10062         (LabeledStatement.Resolve): Set it to true here.
10063
10064         * statement.cs (Return.Emit): Return success even after reporting
10065         a type mismatch error (CS0126 or CS0127), this is what csc does and
10066         it avoids confusing the users with any consecutive errors.
10067
10068 2002-08-05  Martin Baulig  <martin@gnome.org>
10069
10070         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
10071
10072         * const.cs (Const.LookupConstantValue): Catch circular definitions.
10073
10074         * expression.cs (MemberAccess.DoResolve): Silently return if an
10075         error has already been reported.
10076
10077         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
10078         error has already been reported.
10079
10080 2002-08-05  Martin Baulig  <martin@gnome.org>
10081
10082         * statement.cs (UsageVector): Only initialize the `parameters'
10083         vector if we actually have any "out" parameters.
10084
10085 2002-08-05  Martin Baulig  <martin@gnome.org>
10086
10087         * expression.cs (Binary.ResolveOperator): When combining delegates,
10088         they must have the same type.
10089
10090 2002-08-05  Martin Baulig  <martin@gnome.org>
10091
10092         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
10093         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
10094         work with the ms runtime and we also don't need it: if we're a
10095         PropertyBuilder and not in the `indexer_arguments' hash, then we
10096         are a property and not an indexer.
10097
10098         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
10099         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
10100         since the latter one doesn't work with the ms runtime.
10101
10102 2002-08-03  Martin Baulig  <martin@gnome.org>
10103
10104         Fixed bugs #27998 and #22735.
10105
10106         * class.cs (Method.IsOperator): New public field.
10107         (Method.CheckBase): Report CS0111 if there's already a method
10108         with the same parameters in the current class.  Report CS0508 when
10109         attempting to change the return type of an inherited method.
10110         (MethodData.Emit): Report CS0179 if a method doesn't have a body
10111         and it's not marked abstract or extern.
10112         (PropertyBase): New abstract base class for Property and Indexer.
10113         (PropertyBase.CheckBase): Moved here from Property and made it work
10114         for indexers.
10115         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
10116         the same so we can reuse it there.
10117         (Property, Indexer): Derive from PropertyBase.
10118         (MethodSignature.inheritable_property_signature_filter): New delegate
10119         to find properties and indexers.
10120
10121         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
10122         argument and improved error reporting.
10123
10124         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
10125         EmptyReadOnlyParameters and made it a property.
10126
10127         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
10128         version of this method which takes a `PropertyInfo indexer'.
10129         (TypeManager.RegisterIndexer): New method.
10130
10131         * class.cs: Added myself as author of this file :-)
10132
10133 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10134
10135         * class.cs: fixed compilation on windoze.
10136
10137 2002-08-03  Martin Baulig  <martin@gnome.org>
10138
10139         * interface.cs (Interface.GetInterfaceBases): Check whether all
10140         base interfaces are at least as accessible than the current one.
10141
10142         * class.cs (TypeContainer.GetClassBases): Check whether base types
10143         are at least as accessible than the current type.
10144         (TypeContainer.AsAccessible): Implemented and made non-static.
10145         (MemberBase.CheckParameters): Report errors if the accessibility
10146         checks fail.
10147
10148         * delegate.cs (Delegate.Delegate): The default visibility is
10149         internal for top-level types and private for nested types.
10150         (Delegate.Define): Report errors if the accessibility checks fail.
10151
10152         * enum.cs (Enum.Enum): The default visibility is internal for
10153         top-level types and private for nested types.
10154         (Enum.DefineType): Compute the correct visibility.
10155
10156         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
10157         function which takes a `bool is_toplevel' instead of a TypeContainer.
10158
10159         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
10160         builtin type.
10161
10162 2002-08-02  Martin Baulig  <martin@gnome.org>
10163
10164         * expression.cs (LocalVariableReferenc): Added constructor which
10165         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
10166         (LocalVariableReference.IsReadOnly): New property.
10167         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
10168         variable is readonly, use our own readonly flag to do this; you can
10169         use the new constructor to get a writable reference to a read-only
10170         variable.
10171
10172         * cs-parser.jay (foreach_statement, using_statement): Get a writable
10173         reference to the local variable.
10174
10175 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
10176
10177         * rootcontext.cs (ResolveCore): Also include System.Exception
10178
10179         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
10180         we reach an EmptyStatement.
10181
10182         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
10183         is also fine.
10184
10185         * expression.cs (Binary.ResolveOperator): Check error result in
10186         two places.
10187
10188         use brtrue/brfalse directly and avoid compares to null.
10189
10190 2002-08-02  Martin Baulig  <martin@gnome.org>
10191
10192         * class.cs (TypeContainer.Define): Define all nested interfaces here.
10193         Fixes bug #28407, added test-155.cs.
10194
10195 2002-08-01  Martin Baulig  <martin@gnome.org>
10196
10197         * class.cs (Event.EmitDefaultMethod): Make this work with static
10198         events.  Fixes #28311, added verify-3.cs.
10199
10200 2002-08-01  Martin Baulig  <martin@gnome.org>
10201
10202         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
10203         `is_disposable' fields.
10204         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
10205         `hm.is_disposable' if we're using the collection pattern.
10206         (Foreach.EmitCollectionForeach): Use the correct type for the
10207         enumerator's local variable, only emit the try/finally block if
10208         necessary (fixes #27713).
10209
10210 2002-08-01  Martin Baulig  <martin@gnome.org>
10211
10212         * ecore.cs (Expression.report118): Renamed to Error118 and made
10213         it public static.
10214
10215         * statement.cs (Throw.Resolve): Check whether the expression is of
10216         the correct type (CS0118) and whether the type derives from
10217         System.Exception (CS0155).
10218         (Catch.Resolve): New method.  Do the type lookup here and check
10219         whether it derives from System.Exception (CS0155).
10220         (Catch.CatchType, Catch.IsGeneral): New public properties.
10221
10222         * typemanager.cs (TypeManager.exception_type): Added.
10223
10224 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
10225
10226         * driver.cs: Updated About function.
10227
10228 2002-07-31  Martin Baulig  <martin@gnome.org>
10229
10230         Implemented Control Flow Analysis.
10231
10232         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
10233         (EmitContext.CurrentBranching): Added.
10234         (EmitContext.StartFlowBranching): Added.
10235         (EmitContext.EndFlowBranching): Added.
10236         (EmitContext.KillFlowBranching): Added.
10237         (EmitContext.IsVariableAssigned): Added.
10238         (EmitContext.SetVariableAssigned): Added.
10239         (EmitContext.IsParameterAssigned): Added.
10240         (EmitContext.SetParameterAssigned): Added.
10241         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
10242         Added control flow analysis stuff here.
10243
10244         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
10245         resolve the expression as lvalue.
10246         (LocalVariableReference.DoResolve): Check whether the variable has
10247         already been assigned.
10248         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
10249         the parameter as assigned here.
10250         (ParameterReference.DoResolve): Check whether the parameter has already
10251         been assigned.
10252         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
10253         expression as lvalue.
10254
10255         * statement.cs (FlowBranching): New class for the flow analysis code.
10256         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
10257         (LabeledStatement.IsDefined): New public property.
10258         (LabeledStatement.AddUsageVector): New public method to tell flow
10259         analyis that the label may be reached via a forward jump.
10260         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
10261         flow analysis.
10262         (VariableInfo.Number): New public field.  This is used by flow analysis
10263         to number all locals of a block.
10264         (Block.CountVariables): New public property.  This is the number of
10265         local variables in this block (including the locals from all parent
10266         blocks).
10267         (Block.EmitMeta): Number all the variables.
10268
10269         * statement.cs: Added flow analysis support to all classes.
10270
10271 2002-07-31  Martin Baulig  <martin@gnome.org>
10272
10273         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
10274         To get debugging messages, compile mcs with /define:MCS_DEBUG and
10275         then use this argument.
10276
10277         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
10278
10279         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
10280         use this to specify /define options.
10281
10282 2002-07-29  Martin Baulig  <martin@gnome.org>
10283
10284         * statement.cs (Fixed): Moved all code that does variable lookups
10285         and resolvings from Emit to Resolve.
10286
10287         * statement.cs (For): Moved all code that does variable lookups
10288         and resolvings from Emit to Resolve.
10289
10290         * statement.cs (Using): Moved all code that does variable lookups
10291         and resolvings from Emit to Resolve.
10292
10293 2002-07-29  Martin Baulig  <martin@gnome.org>
10294
10295         * attribute.cs (Attribute.Resolve): Explicitly catch a
10296         System.NullReferenceException when creating the
10297         CustromAttributeBuilder and report a different warning message.
10298
10299 2002-07-29  Martin Baulig  <martin@gnome.org>
10300
10301         * support.cs (ParameterData.ParameterName): Added method to
10302         get the name of a parameter.
10303
10304         * typemanager.cs (TypeManager.IsValueType): New public method.
10305
10306 2002-07-29  Martin Baulig  <martin@gnome.org>
10307
10308         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
10309         is a flag which specifies that it's either ref or out.
10310         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
10311         the out parameter to `out Parameter.Modifier mod', also set the
10312         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
10313
10314         * support.cs (InternalParameters.ParameterModifier): Distinguish
10315         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
10316         Parameter.Modifier.ISBYREF flag if it's either ref or out.
10317
10318         * expression.cs (Argument.GetParameterModifier): Distinguish
10319         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
10320         Parameter.Modifier.ISBYREF flag if it's either ref or out.
10321
10322 2002-07-29  Martin Baulig  <martin@gnome.org>
10323
10324         * expression.cs (ParameterReference.ParameterReference): Added
10325         `Location loc' argument to the constructor.
10326
10327         * cs-parser.jay: Pass location to ParameterReference.
10328
10329 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
10330
10331         * statement.cs (Try): Initialize the location.
10332
10333         * cs-parser.jay: pass location to Try.
10334
10335         * expression.cs (Unary.Reduce): Change the prototype to return
10336         whether a constant fold could be performed or not.  The result is
10337         returned in an out parameters.  In the case of Indirection and
10338         AddressOf, we want to perform the full tests.
10339
10340 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
10341
10342         * statement.cs (Statement.Emit): Flag dead code.
10343
10344 2002-07-27  Andrew Birkett  <andy@nobugs.org>
10345
10346         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
10347
10348 2002-07-27  Martin Baulig  <martin@gnome.org>
10349
10350         * class.cs (MethodData.Define): Put back call to
10351         TypeManager.AddMethod(), accidentally commented this out.
10352
10353         * report.cs (Debug): New public method to print debugging information,
10354         this is `[Conditional ("DEBUG")]'.
10355
10356 2002-07-26  Martin Baulig  <martin@gnome.org>
10357
10358         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
10359         (switch_statement): Push the current_block to the switch_stack and
10360         pop it again when we're done with the switch.
10361         (switch_section): The new block is a child of the current_block.
10362         Fixes bug #24007, added test-152.cs.
10363
10364 2002-07-27  Martin Baulig  <martin@gnome.org>
10365
10366         * expression.cs (Invocation.EmitArguments): When calling a varargs
10367         function with only its fixed arguments, we need to pass an empty
10368         array.
10369
10370 2002-07-27  Martin Baulig  <martin@gnome.org>
10371
10372         Mono 0.13 has been released.
10373
10374 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
10375
10376         * driver.cs: Rename --resource to --linkres, because that is what
10377         we do currently, we dont support --resource yet.
10378
10379         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
10380
10381 2002-07-25  Martin Baulig  <martin@gnome.org>
10382
10383         * class.cs (MethodData): New public class.  This is a `method builder'
10384         class for a method or one accessor of a Property/Indexer/Event.
10385         (MethodData.GetMethodFlags): Moved here from MemberBase.
10386         (MethodData.ApplyAttributes): Likewise.
10387         (MethodData.ApplyObsoleteAttribute): Likewise.
10388         (MethodData.ApplyConditionalAttribute): Likewise.
10389         (MethodData.ApplyDllImportAttribute): Likewise.
10390         (MethodData.CheckAbstractAndExternal): Likewise.
10391         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
10392         (MethodData.Emit): Formerly known as Method.Emit().
10393         (MemberBase): Moved everything which was specific to a single
10394         accessor/method to MethodData.
10395         (Method): Create a new MethodData and call Define() and Emit() on it.
10396         (Property, Indexer, Event): Create a new MethodData objects for each
10397         accessor and call Define() and Emit() on them.
10398
10399 2002-07-25  Martin Baulig  <martin@gnome.org>
10400
10401         Made MethodCore derive from MemberBase to reuse the code from there.
10402         MemberBase now also checks for attributes.
10403
10404         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
10405         (MemberBase.GetMethodFlags): Moved here from class Method and marked
10406         as virtual.
10407         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
10408         `CallingConventions cc' and `Attributes opt_attrs' arguments.
10409         (MemberBase.ApplyAttributes): New virtual method; applies the
10410         attributes to a method or accessor.
10411         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
10412         (MemberBase.ApplyConditionalAttribute): Likewise.
10413         (MemberBase.ApplyDllImportAttribute): Likewise.
10414         (MemberBase.CheckAbstractAndExternal): Likewise.
10415         (MethodCore.ParameterTypes): This is now a property instead of a
10416         method, it's initialized from DoDefineParameters().
10417         (MethodCore.ParameterInfo): Removed the set accessor.
10418         (MethodCore.DoDefineParameters): New protected virtual method to
10419         initialize ParameterTypes and ParameterInfo.
10420         (Method.GetReturnType): We can now simply return the MemberType.
10421         (Method.GetMethodFlags): Override the MemberBase version and add
10422         the conditional flags.
10423         (Method.CheckBase): Moved some code from Define() here, call
10424         DoDefineParameters() here.
10425         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
10426         here to avoid some larger code duplication.
10427         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
10428         ensure that abstract and external accessors don't declare a body.
10429
10430         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
10431         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
10432         lookup in the attribute's parent classes, so we need to abort as soon
10433         as we found the first match.
10434         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
10435         the attribute has no arguments.
10436
10437         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
10438         of a Method.
10439
10440 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10441
10442         * cs-parser.jay: reverted previous patch.
10443
10444 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10445
10446         * cs-parser.jay: fixed bug #22119.
10447
10448 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10449
10450         * attribute.cs: fixed compilation. The error was:
10451         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
10452         be assigned to before control leaves the current method."
10453         [FIXME:  Filed as bug #28186: MCS must report this error.]
10454
10455 2002-07-25  Martin Baulig  <martin@gnome.org>
10456
10457         * attribute.cs (Attribute.Conditional_GetConditionName): New static
10458         method to pull the condition name ouf of a Conditional attribute.
10459         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
10460         the obsolete message and error flag out of an Obsolete attribute.
10461
10462         * class.cs (Method.GetMethodFlags): New public method to get the
10463         TypeManager.MethodFlags for this method.
10464         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
10465         private methods.
10466         (Method.Define): Get and apply the Obsolete and Conditional attributes;
10467         if we're overriding a virtual function, set the new private variable
10468         `parent_method'; call the new TypeManager.AddMethod().
10469
10470         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
10471         the MethodBuilder and the Method in a PtrHashtable.
10472         (TypeManager.builder_to_method): Added for this purpose.
10473         (TypeManager.MethodFlags): Added IsObsoleteError.
10474         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
10475         Obsolete and Conditional arguments in MethodBuilders.  If we discover
10476         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
10477         the message from the attribute.
10478
10479 2002-07-24  Martin Baulig  <martin@gnome.org>
10480
10481         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
10482         preprocessor directives, ensure that the argument to #define/#undef is
10483         exactly one identifier and that it's actually an identifier.
10484
10485         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
10486         did not work ....
10487
10488 2002-07-24  Martin Baulig  <martin@gnome.org>
10489
10490         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
10491         initialize it to TypeManager.object_type in the constructor.
10492         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
10493         of the `hm.get_current' method if we're using the collection pattern.
10494         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
10495         for the explicit conversion to make it work when we're using the collection
10496         pattern and the `Current' property has a different return type than `object'.
10497         Fixes #27713.
10498
10499 2002-07-24  Martin Baulig  <martin@gnome.org>
10500
10501         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
10502         does not match, but don't report any errors.  This method is called in
10503         order for all methods in a MethodGroupExpr until a matching method is
10504         found, so we don't want to bail out if the first method doesn't match.
10505         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
10506         matches, report the 123.  Fixes #28070.
10507
10508 2002-07-24  Martin Baulig  <martin@gnome.org>
10509
10510         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
10511         TypeManager.TypeToCoreType() to the top of the method so the
10512         following equality checks will work.  Fixes #28107.
10513
10514 2002-07-24  Martin Baulig  <martin@gnome.org>
10515
10516         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
10517         operand is of type uint, and the other operand is of type sbyte,
10518         short or int, the operands are converted to type long." -
10519         Actually do what this comment already told us.  Fixes bug #28106,
10520         added test-150.cs.
10521
10522 2002-07-24  Martin Baulig  <martin@gnome.org>
10523
10524         * class.cs (MethodBase): New abstract class.  This is now a base
10525         class for Property, Indexer and Event to avoid some code duplication
10526         in their Define() and DefineMethods() methods.
10527         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
10528         generic methods for Define() and DefineMethods().
10529         (FieldBase): Derive from MemberBase, not MemberCore.
10530         (Property): Derive from MemberBase, not MemberCore.
10531         (Property.DefineMethod): Moved all the code from this method to the
10532         new MethodBase.DefineAccessor(), just call it with appropriate
10533         argumetnts.
10534         (Property.Define): Call the new Property.DoDefine(), this does some
10535         sanity checks and we don't need to duplicate the code everywhere.
10536         (Event): Derive from MemberBase, not MemberCore.
10537         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
10538         accessors, this will also make them work with interface events.
10539         (Indexer): Derive from MemberBase, not MemberCore.
10540         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
10541         (Indexer.Define): Use the new MethodBase functions.
10542
10543         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
10544         argument to the constructor.
10545         (Interface.FindMembers): Added support for interface events.
10546         (Interface.PopluateEvent): Implemented.
10547
10548         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
10549
10550 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
10551
10552         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
10553         but this is required to check for a method name being the same as
10554         the containing class.  
10555
10556         Handle this now.
10557
10558 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10559
10560         * interface.cs: initialize variable.
10561
10562 2002-07-23  Martin Baulig  <martin@gnome.org>
10563
10564         Implemented the IndexerName attribute in interfaces.
10565
10566         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
10567         name if this is an explicit interface implementation.
10568         (Indexer.InterfaceIndexerName): New public variable.  If we're
10569         implementing an interface indexer, this is the IndexerName in that
10570         interface.  Otherwise, it's the IndexerName.
10571         (Indexer.DefineMethod): If we're implementing interface indexer,
10572         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
10573         and Pending.ImplementIndexer methods.
10574         (Indexer.Define): Also define the PropertyBuilder if we're
10575         implementing an interface indexer and this is neither an explicit
10576         interface implementation nor do the IndexerName match the one in
10577         the interface.
10578
10579         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
10580         If a method is defined here, then we always need to create a proxy
10581         for it.  This is used when implementing interface indexers.
10582         (Pending.IsInterfaceIndexer): New public method.
10583         (Pending.ImplementIndexer): New public method.
10584         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
10585         This is used when implementing interface indexers to define a proxy
10586         if necessary.
10587         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
10588         define a proxy if necessary.
10589
10590         * interface.cs (Interface.IndexerName): New public variable.
10591         (Interface.PopulateIndexer): Set the IndexerName.
10592         (Interface.DefineIndexers): New private method.  Populate all the
10593         indexers and make sure their IndexerNames match.
10594
10595         * typemanager.cs (IndexerPropertyName): Added support for interface
10596         indexers.
10597
10598 2002-07-22  Martin Baulig  <martin@gnome.org>
10599
10600         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
10601         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
10602         ret if HasReturnLabel.
10603         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
10604         variables.
10605
10606         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
10607         and set the ec.LoopBeginTryCatchLevel.
10608         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
10609         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
10610         the current ec.TryCatchLevel, the branch goes out of an exception
10611         block.  In this case, we need to use Leave and not Br.
10612
10613 2002-07-22  Martin Baulig  <martin@gnome.org>
10614
10615         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
10616         block unless the block does not always return or it is contained in
10617         another try { ... } catch { ... } block.  Fixes bug #26506.
10618         Added verify-1.cs to the test suite.
10619
10620 2002-07-22  Martin Baulig  <martin@gnome.org>
10621
10622         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
10623         then we do not always return.  Fixes bug #24985.
10624
10625 2002-07-22  Martin Baulig  <martin@gnome.org>
10626
10627         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
10628         lookup on a per-class level; ie. walk up the class hierarchy until we
10629         found at least one applicable method, then choose the best among them.
10630         Fixes bug #24463 and test-29.cs.
10631
10632 2002-07-22  Martin Baulig  <martin@gnome.org>
10633
10634         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
10635         return types of the methods.  The return type is not part of the
10636         signature and we must not check it to make the `new' modifier work.
10637         Fixes bug #27999, also added test-147.cs.
10638         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
10639
10640         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
10641         on the method's return type.
10642
10643 2002-07-21  Martin Baulig  <martin@gnome.org>
10644
10645         * assign.cs: Make this work if the rightmost source is a constant and
10646         we need to do an implicit type conversion.  Also adding a few more tests
10647         to test-38.cs which should have caught this.
10648
10649         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
10650         target in the makefile for this.  The makefile.gnu is primarily intended
10651         for end-users who don't want to debug the compiler.
10652
10653 2002-07-21  Martin Baulig  <martin@gnome.org>
10654
10655         * assign.cs: Improved the Assign class so it can now handle embedded
10656         assignments (X = Y = Z = something).  As a side-effect this'll now also
10657         consume less local variables.  test-38.cs now passes with MCS, added
10658         a few new test cases to that test.
10659
10660 2002-07-20  Martin Baulig  <martin@gnome.org>
10661
10662         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
10663         instructions.  Fixes bug #27977, also added test-146.cs.
10664
10665 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10666
10667         * cs-tokenizer.cs: fixed getHex ().
10668
10669 2002-07-19  Martin Baulig  <martin@gnome.org>
10670
10671         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
10672         not Type.GetType() to lookup the array type.  This is needed when
10673         we're constructing an array of a user-defined type.
10674         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
10675         single-dimensional arrays, but also for single-dimensial arrays of
10676         type decimal.
10677
10678 2002-07-19  Martin Baulig  <martin@gnome.org>
10679
10680         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
10681         this function is called, it's not allowed to share LocalBuilders
10682         among ILGenerators.
10683
10684 2002-07-19  Martin Baulig  <martin@gnome.org>
10685
10686         * expression.cs (Argument.Resolve): Report an error 118 when trying
10687         to pass a type as argument.
10688
10689 2002-07-18  Martin Baulig  <martin@gnome.org>
10690
10691         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
10692         Conv_R_Un for the signed `long' type.
10693
10694 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
10695
10696         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
10697         `expr' for the temporary result, as that will fail if we do
10698         multiple resolves on the same expression.
10699
10700 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
10701
10702         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
10703         ec.TypeContainer for looking up aliases. 
10704
10705         * class.cs (TypeContainer): Remove LookupAlias from here.
10706
10707         * decl.cs (DeclSpace); Move here.
10708
10709 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
10710
10711         * class.cs (FindMembers): Only call filter if the constructor
10712         bulider is not null.
10713
10714         Also handle delegates in `NestedTypes' now.  Now we will perform
10715         type lookups using the standard resolution process.  This also
10716         fixes a bug.
10717
10718         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
10719         This uses Expressions (the limited kind that can be parsed by the
10720         tree) instead of strings.
10721
10722         * expression.cs (ComposedCast.ToString): Implement, used to flag
10723         errors since now we have to render expressions.
10724
10725         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
10726         FormArrayType. 
10727
10728         * ecore.cs (SimpleName.ToString): ditto.
10729
10730         * cs-parser.jay: Instead of using strings to assemble types, use
10731         Expressions to assemble the type (using SimpleName, ComposedCast,
10732         MemberAccess).  This should fix the type lookups in declarations,
10733         because we were using a different code path for this.
10734
10735         * statement.cs (Block.Resolve): Continue processing statements
10736         even when there is an error.
10737
10738 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
10739
10740         * class.cs (Event.Define): Also remove the `remove' method from
10741         the list of pending items.
10742
10743         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
10744         generate more compact code. 
10745
10746 2002-07-17  Martin Baulig  <martin@gnome.org>
10747
10748         * const.cs (Const.LookupConstantValue): Add support for constant
10749         `unchecked' and `checked' expressions.
10750         Also adding test case test-140.cs for this.
10751
10752 2002-07-17  Martin Baulig  <martin@gnome.org>
10753
10754         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
10755         check whether mi.ReturnType implements the IEnumerator interface; the
10756         `==' and the IsAssignableFrom() will fail in this situation.
10757
10758 2002-07-16  Ravi Pratap  <ravi@ximian.com>
10759
10760         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
10761         here too.
10762
10763 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10764
10765         * expression.cs: fixed bug #27811.
10766
10767 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
10768
10769         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
10770         Molaro: when we are a ref, the value already contains a pointer
10771         value, do not take the address of it.
10772
10773 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
10774         * removed mb-parser.jay and mb-tokenizer.cs
10775
10776 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
10777
10778         * expression.cs: check against the building corlib void type.
10779
10780 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
10781
10782         * ecore.cs: fix for valuetype static readonly fields: when 
10783         initializing them, we need their address, not the address of a copy.
10784
10785 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
10786
10787         * typemanager.cs: register also enum_type in corlib.
10788
10789 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
10790
10791         * class.cs: allow calling this (but not base) initializers in structs.
10792
10793 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
10794
10795         * ecore.cs: make sure we compare against the building base types
10796         in GetTypeSize ().
10797
10798 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
10799
10800         * typemanager.cs: fix TypeToCoreType() to handle void and object
10801         (corlib gets no more typerefs after this change).
10802
10803 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
10804
10805         * expression.cs (ArrayCreation.EmitArrayArguments): use
10806         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
10807
10808         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
10809         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
10810         array indexes, the runtime actually forbids them.
10811
10812         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
10813         for array arguments here.
10814
10815         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
10816         instead of the default for ValueTypes.
10817
10818         (New.DoEmit): Use IsValueType instead of
10819         IsSubclassOf (value_type)
10820         (New.DoResolve): ditto.
10821         (Invocation.EmitCall): ditto.
10822
10823         * assign.cs (Assign): ditto.
10824
10825         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
10826         Statements *are* currently doing part of their resolution during
10827         Emit.  
10828
10829         Expressions do always resolve during resolve, but statements are
10830         only required to propagate resolution to their children.
10831
10832 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
10833
10834         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
10835
10836         (LoadAssembly): Do not add the dll if it is already specified
10837
10838         (MainDriver): Add the System directory to the link path at the end,
10839         after all the other -L arguments. 
10840
10841         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
10842         wrong opcode for loading bytes and bools (ldelem.i1 instead of
10843         ldelem.u1) and using the opposite for sbytes.
10844
10845         This fixes Digger, and we can finally run it.
10846
10847         * driver.cs (UnixParseOption): Move the option parsing here.  
10848         (CSCParseOption): Implement CSC-like parsing of options.
10849
10850         We now support both modes of operation, the old Unix way, and the
10851         new CSC-like way.  This should help those who wanted to make cross
10852         platform makefiles.
10853
10854         The only thing broken is that /r:, /reference: and /lib: are not
10855         implemented, because I want to make those have the same semantics
10856         as the CSC compiler has, and kill once and for all the confussion
10857         around this.   Will be doing this tomorrow.
10858
10859         * statement.cs (Unsafe.Resolve): The state is checked during
10860         resolve, not emit, so we have to set the flags for IsUnsfe here.
10861
10862 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
10863
10864         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
10865         not catch the Error_ObjectRefRequired in SimpleName (as it is
10866         possible to have a class/instance variable name that later gets
10867         deambiguated), we have to check this here.      
10868
10869 2002-07-10  Ravi Pratap  <ravi@ximian.com>
10870
10871         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
10872         make static and put into Expression.
10873
10874         (Event.Define): Register the private field of the event with the 
10875         TypeManager so that GetFieldFromEvent can get at it.
10876
10877         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
10878         keep track of the private field associated with an event which
10879         has no accessors.
10880
10881         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
10882         private field.
10883
10884         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
10885
10886 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
10887
10888         * expression.cs (Binary.EmitBranchable): this routine emits the
10889         Binary expression in a branchable context.  This basically means:
10890         we need to branch somewhere, not just get the value on the stack.
10891
10892         This works together with Statement.EmitBoolExpression.
10893
10894         * statement.cs (Statement.EmitBoolExpression): Use
10895         EmitBranchable. 
10896
10897 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
10898
10899         * statement.cs (For): Reduce the number of jumps in loops.
10900
10901         (For): Implement loop inversion for the For statement.
10902
10903         (Break): We can be breaking out of a Try/Catch controlled section
10904         (foreach might have an implicit try/catch clause), so we need to
10905         use Leave instead of Br.
10906
10907         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
10908         now).  If the instace expression supports IMemoryLocation, we use
10909         the AddressOf method from the IMemoryLocation to extract the
10910         address instead of emitting the instance.
10911
10912         This showed up with `This', as we were emitting the instance
10913         always (Emit) instead of the Address of This.  Particularly
10914         interesting when This is a value type, as we dont want the Emit
10915         effect (which was to load the object).
10916
10917 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
10918
10919         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
10920
10921         * statement.cs (Checked): Set the CheckedState during the resolve
10922         process too, as the ConvCast operations track the checked state on
10923         the resolve process, and not emit.
10924
10925         * cs-parser.jay (namespace_member_declaration): Flag that we have
10926         found a declaration when we do.  This is used to flag error 1529
10927
10928         * driver.cs: Report ok when we display the help only.
10929
10930 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
10931
10932         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
10933
10934 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
10935
10936         * cs-tokenizer.cs (define): We also have to track locally the
10937         defines.  AllDefines is just used for the Conditional Attribute,
10938         but we also need the local defines for the current source code. 
10939
10940 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
10941
10942         * statement.cs (While, For, Do): These loops can exit through a
10943         Break statement, use this information to tell whether the
10944         statement is the last piece of code.
10945
10946         (Break): Flag that we break.
10947
10948         * codegen.cs (EmitContexts): New `Breaks' state variable.
10949
10950 2002-07-03  Martin Baulig  <martin@gnome.org>
10951
10952         * class.cs (TypeContainer.MethodModifiersValid): Allow override
10953         modifiers in method declarations in structs.  Otherwise, you won't
10954         be able to override things like Object.Equals().
10955
10956 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
10957
10958         * class.cs (Method, Property, Indexer): Do not allow the public
10959         modifier to be used in explicit interface implementations.
10960
10961         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
10962         override modifiers in method declarations in structs
10963
10964 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
10965
10966         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
10967         integer or real overflow, report an error
10968
10969 2002-07-02  Martin Baulig  <martin@gnome.org>
10970
10971         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
10972         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
10973         to tell the runtime about our newly created System.Object and
10974         System.ValueType types.
10975
10976 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
10977
10978         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
10979         struct instead of Ldarg/Starg.
10980
10981 2002-07-02  Martin Baulig  <martin@gnome.org>
10982
10983         * expression.cs (Indirection.Indirection): Call
10984         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
10985
10986 2002-07-02  Martin Baulig  <martin@gnome.org>
10987
10988         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
10989         ValueType, call TypeManager.TypeToCoreType() on it.
10990         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
10991         the OpCodes.Newarr argument.
10992
10993 2002-07-02  Martin Baulig  <martin@gnome.org>
10994
10995         * expression.cs (Invocation.EmitCall): When compiling corlib,
10996         replace all calls to the system's System.Array type to calls to
10997         the newly created one.
10998
10999         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
11000         System.Array methods.
11001         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
11002         from the system's System.Array type which must be replaced.
11003
11004 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
11005
11006         * typemanager.cs: load unverifiable_code_ctor so we can build
11007         corlib using the correct type. Avoid using GetTypeCode() with
11008         TypeBuilders.
11009         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
11010         TypeManager.object_type to allow building corlib.
11011
11012 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
11013
11014         * ecore.cs: handle System.Enum separately in LoadFromPtr().
11015
11016 2002-07-01  Martin Baulig  <martin@gnome.org>
11017
11018         * class.cs: Make the last change actually work, we need to check
11019         whether `ifaces != null' to avoid a crash.
11020
11021 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
11022
11023         * class.cs: when we build structs without fields that implement
11024         interfaces, we need to add the interfaces separately, since there is
11025         no API to both set the size and add the interfaces at type creation
11026         time.
11027
11028 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
11029
11030         * expression.cs: the dimension arguments to the array constructors
11031         need to be converted if they are a long.
11032
11033 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
11034
11035         * class.cs: don't emit ldarg.0 if there is no parent constructor
11036         (fixes showstopper for corlib).
11037
11038 2002-06-29  Martin Baulig  <martin@gnome.org>
11039
11040         MCS now compiles corlib on GNU/Linux :-)
11041
11042         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
11043         ie. check for MethodImplOptions.InternalCall.
11044
11045         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
11046         and TypeManager.attribute_type are null, so we must explicitly check
11047         whether parent is not null to find out whether it's an attribute type.
11048         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
11049         and SetBuilder, not only if the property is neither abstract nor external.
11050         This is necessary to set the MethodImplOptions on the accessor methods.
11051         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
11052         SetBuilder, see Property.Emit().
11053
11054         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
11055         populate "System.Object", "System.ValueType" and "System.Attribute" since
11056         they've already been populated from BootCorlib_PopulateCoreTypes().
11057
11058 2002-06-29  Martin Baulig  <martin@gnome.org>
11059
11060         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
11061         is the NullLiteral, we also need to make sure that target_type is not
11062         an enum type.   
11063
11064 2002-06-29  Martin Baulig  <martin@gnome.org>
11065
11066         * rootcontext.cs (RootContext.ResolveCore): We must initialize
11067         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
11068         before calling BootstrapCorlib_ResolveDelegate ().
11069
11070 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11071
11072         * statement.cs: fixed build-breaker. All tests passed ok.
11073
11074 2002-06-27  Martin Baulig  <martin@gnome.org>
11075
11076         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
11077         for System.Decimal when compiling corlib.
11078
11079 2002-06-27  Martin Baulig  <martin@gnome.org>
11080
11081         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
11082         switch blocks which contain nothing but a default clause.
11083
11084 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
11085
11086        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
11087
11088 2002-06-27  Martin Baulig  <martin@gnome.org>
11089
11090         * ecore.cs (PropertyExpr.PropertyExpr): Call
11091         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
11092
11093         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
11094         is already a TypeBuilder.
11095
11096 2002-06-27  Martin Baulig  <martin@gnome.org>
11097
11098         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
11099         `target_type == TypeManager.array_type', not IsAssignableFrom() in
11100         the "from an array-type to System.Array" case.  This makes it work
11101         when compiling corlib.
11102
11103 2002-06-27  Martin Baulig  <martin@gnome.org>
11104
11105         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
11106         non-static PropertyExpr, set its InstanceExpression.  This makes
11107         the `ICollection.Count' property work in System/Array.cs.
11108
11109 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
11110
11111         * driver.cs: Made error handling more consistent.  Errors now
11112         tracked by Report class, so many methods which used to return int
11113         now return void.  Main() now prints success/failure and 
11114         errors/warnings message.
11115
11116         Renamed '--probe' compiler argument to '--expect-error'.  Removed
11117         the magic number return values (123 and 124).  Now, if the
11118         expected error occurs, the compiler exits with success (exit value
11119         0).  If the compilation completes without seeing that particular
11120         error, the compiler exits with failure (exit value 1).  The
11121         makefile in mcs/errors has been changed to handle the new behaviour.
11122
11123         * report.cs: Made 'expected error' number a property and renamed
11124         it from 'Probe' to 'ExpectedError'.
11125
11126         * genericparser.cs: Removed error handling support, since it is
11127         now all done by Report class.
11128
11129         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
11130         class, so parse() no longer returns an int.
11131
11132         * namespace.cs: Use Report.Error instead of GenericParser.error
11133
11134 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
11135
11136         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
11137         TypeContainer.AddOperator): At the front of the list put the
11138         explicit implementations, so they get resolved/defined first. 
11139
11140 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
11141
11142         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
11143         interface type is implemented by this TypeContainer.  Used during
11144         explicit interface implementation.
11145
11146         (Property.Define, Indexer.Define, Method.Define): Validate that
11147         the given interface in the explicit implementation is one of the
11148         base classes for the containing type.
11149
11150         Also if we are explicitly implementing an interface, but there is
11151         no match in the pending implementation table, report an error.
11152
11153         (Property.Define): Only define the property if we are
11154         not explicitly implementing a property from an interface.  Use the
11155         correct name also for those properties (the same CSC uses,
11156         although that is really not needed).
11157
11158         (Property.Emit): Do not emit attributes for explicitly implemented
11159         properties, as there is no TypeBuilder.
11160
11161         (Indexer.Emit): ditto.
11162
11163         Hiding then means that we do not really *implement* a pending
11164         implementation, which makes code fail.
11165
11166 2002-06-22  Martin Baulig  <martin@gnome.org>
11167
11168         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
11169         the return value of Object.GetType().  [FIXME: we need to do this whenever
11170         we get a type back from the reflection library].
11171
11172 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
11173
11174         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
11175
11176 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
11177
11178         * attribute.cs: Return null if we can not look up the type.
11179
11180         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
11181         the interface types found.
11182
11183         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
11184         interface types found.
11185
11186         * typemanager.cs (GetInterfaces): Make this routine returns alll
11187         the interfaces and work around the lame differences between
11188         System.Type and System.Reflection.Emit.TypeBuilder in the results
11189         result for GetInterfaces.
11190
11191         (ExpandInterfaces): Given an array of interface types, expand and
11192         eliminate repeated ocurrences of an interface.  This expands in
11193         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
11194         be IA, IB, IC.
11195
11196 2002-06-21  Martin Baulig  <martin@gnome.org>
11197
11198         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
11199         on System.Enum.
11200
11201 2002-06-21  Martin Baulig  <martin@gnome.org>
11202
11203         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
11204         and called with one of the core types, return the corresponding typebuilder for
11205         that type.
11206
11207         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
11208         element type.
11209
11210 2002-06-21  Martin Baulig  <martin@gnome.org>
11211
11212         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
11213         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
11214         (Expression.ConvertReferenceExplicit): Likewise.
11215
11216         * expression.cs (ElementAccess.DoResolve): Likewise.
11217         (ElementAccess.DoResolveLValue): Likewise.
11218
11219 2002-06-10  Martin Baulig  <martin@gnome.org>
11220
11221         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
11222         add the "value" parameter to the parameter list.
11223
11224         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
11225         to our caller.
11226
11227 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
11228
11229         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
11230         the argument to an int, uint, long or ulong, per the spec.  Also
11231         catch negative constants in array creation.
11232
11233 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
11234
11235         * class.cs: do not allow the same interface to appear twice in
11236         the definition list.
11237
11238 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
11239
11240         * ecore.cs: don't use ldlen with System.Array.
11241
11242 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
11243
11244         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
11245
11246 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
11247
11248         * modifiers.cs: produce correct field attributes for protected
11249         internal. Easy fix so miguel can work on ther harder stuff:-)
11250
11251 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
11252
11253         * pending.cs: New file.  Move the code from class.cs here.
11254         Support clearning the pending flag for all methods (when not doing
11255         explicit interface implementation).
11256
11257 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
11258
11259         * rootcontext.cs: added a couple more types needed to bootstrap.
11260
11261 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
11262
11263         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
11264         constructor in the type, instead of any constructor in the type
11265         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
11266         a bug in the Mono runtime when applying the params attribute). 
11267
11268 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
11269         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
11270
11271 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
11272
11273         * expression.cs (Unary.ResolveOperator): Use TypeManager
11274         to resolve the type.
11275
11276 2002-06-13  Ravi Pratap  <ravi@ximian.com>
11277
11278         * cs-parser.jay (enum_member_declaration): Pass in the attributes
11279         attached.
11280
11281         * enum.cs (AddEnumMember): Add support to store the attributes associated 
11282         with each member too.
11283
11284         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
11285         field builders too - this takes care of the enum member case.
11286
11287 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
11288
11289         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
11290         address-of operator on both value types and pointers.
11291
11292 2002-06-10  Martin Baulig  <martin@gnome.org>
11293
11294         * interface.cs (Interface.PopulateIndexer): Add the indexer's
11295         PropertyBuilder to the `property_builders' list.
11296
11297         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
11298         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
11299         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
11300         find any indexers which are inherited from an interface.
11301
11302 2002-06-09  Martin Baulig  <martin@gnome.org>
11303
11304         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
11305         the same type as the constant if necessary.  There's also a test-130.cs
11306         for this.
11307
11308         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
11309
11310         * typemanager.cs (TypeManager.ChangeType): Previously known as
11311         Enum.ChangeEnumType().
11312
11313 2002-06-09  Martin Baulig  <martin@gnome.org>
11314
11315         * expression.cs (Cast.TryReduce): Added support for consts.
11316
11317 2002-06-08  Ravi Pratap  <ravi@ximian.com>
11318
11319         * class.cs (Accessor): Hold attributes information so we can pass
11320         it along.
11321
11322         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
11323         Modify to pass in attributes attached to the methods.
11324
11325         (add_accessor_declaration, remove_accessor_declaration): Ditto.
11326
11327         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
11328         to handle the Accessor kind :-)
11329
11330         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
11331
11332 2002-06-08  Martin Baulig  <martin@gnome.org>
11333
11334         * expression.cs (Unary.TryReduceNegative): Added support for
11335         ULongConstants.
11336
11337 2002-06-08  Martin Baulig  <martin@gnome.org>
11338
11339         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
11340         name can't be found in the `defined_names' - the caller will do a
11341         MemberLookup in this case and thus find methods in System.Enum
11342         such as Enum.IsDefined().
11343
11344 2002-06-08  Martin Baulig  <martin@gnome.org>
11345
11346         * enum.cs (Enum.ChangeEnumType): This is a custom version of
11347         Convert.ChangeType() which works with TypeBuilder created types.
11348         (Enum.LookupEnumValue, Enum.Define): Use it here.
11349
11350         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
11351         `TypeBuilder.BaseType != null' check.
11352         (TypeContainer.FindMembers): Only lookup parent members if we
11353         actually have a parent.
11354         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
11355         (ConstructorInitializer.Resolve): Likewise.
11356
11357         * interface.cs (Interface.FindMembers): Added
11358         `TypeBuilder.BaseType != null' check.
11359
11360         * rootcontext.cs (RootContext.ResolveCore): Added
11361         "System.Runtime.CompilerServices.IndexerNameAttribute" to
11362         classes_second_stage.
11363
11364         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
11365         debug_type and trace_type when compiling with --nostdlib.       
11366
11367 2002-06-07  Martin Baulig  <martin@gnome.org>
11368
11369         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
11370         (AddField): Set it to true when adding a non-static field.
11371         (DefineType): Use `have_nonstatic_fields' to find out whether we
11372         have non-static fields, not `Fields != null'.
11373
11374 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
11375
11376         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
11377         dereferencing a null on the static-field code path)
11378
11379 2002-05-30  Martin Baulig  <martin@gnome.org>
11380
11381         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
11382         to take command line arguments.  Use reflection to call the new
11383         custom `Initialize' function on the symbol writer and pass it the
11384         command line arguments.
11385
11386         * driver.cs (--debug-args): New command line argument to pass command
11387         line arguments to the symbol writer.
11388
11389 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
11390
11391         * assign.cs (DoResolve): Forgot to do the implicit conversion to
11392         the target type for indexers and properties.  Thanks to Joe for
11393         catching this.
11394
11395 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
11396
11397         * typemanager.cs (MethodFlags): returns the method flags
11398         (Obsolete/ShouldIgnore) that control warning emission and whether
11399         the invocation should be made, or ignored. 
11400
11401         * expression.cs (Invocation.Emit): Remove previous hack, we should
11402         not do this on matching a base type, we should do this based on an attribute
11403
11404         Only emit calls to System.Diagnostics.Debug and
11405         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
11406         on the command line.
11407
11408         * rootcontext.cs: Global settings for tracing and debugging.
11409
11410         * cs-tokenizer.cs (define): New utility function to track
11411         defines.   Set the global settings for TRACE and DEBUG if found.
11412
11413 2002-05-25  Ravi Pratap  <ravi@ximian.com>
11414
11415         * interface.cs (Populate*): Pass in the TypeContainer as well as
11416         the DeclSpace as parameters so that we can create EmitContexts and
11417         then use that to apply attributes etc.
11418
11419         (PopulateMethod, PopulateEvent, PopulateProperty)
11420         (PopulateIndexer): Apply attributes everywhere.
11421
11422         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
11423         etc.
11424
11425         (ApplyAttributes): Update accordingly.
11426
11427         We now apply interface attributes for all members too.
11428
11429 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
11430
11431         * class.cs (Indexer.Define); Correctly check if we are explicit
11432         implementation (instead of checking the Name for a ".", we
11433         directly look up if the InterfaceType was specified).
11434
11435         Delay the creation of the PropertyBuilder.
11436
11437         Only create the PropertyBuilder if we are not an explicit
11438         interface implementation.   This means that explicit interface
11439         implementation members do not participate in regular function
11440         lookups, and hence fixes another major ambiguity problem in
11441         overload resolution (that was the visible effect).
11442
11443         (DefineMethod): Return whether we are doing an interface
11444         implementation. 
11445
11446         * typemanager.cs: Temporary hack until we get attributes in
11447         interfaces (Ravi is working on that) and we get IndexerName
11448         support in interfaces.
11449
11450         * interface.cs: Register the indexers as properties.
11451
11452         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
11453         warning, I have verified that this is a bug in the .NET runtime
11454         (JavaScript suffers of the same problem).
11455
11456         * typemanager.cs (MemberLookup): When looking up members for
11457         interfaces, the parent of an interface is the implicit
11458         System.Object (so we succeed in searches of Object methods in an
11459         interface method invocation.  Example:  IEnumerable x;  x.ToString
11460         ()) 
11461
11462 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
11463
11464         * class.cs (Event): Events should also register if they do
11465         implement the methods that an interface requires.
11466
11467         * typemanager.cs (MemberLookup); use the new GetInterfaces
11468         method. 
11469
11470         (GetInterfaces): The code used to lookup interfaces for a type is
11471         used in more than one place, factor it here. 
11472
11473         * driver.cs: Track the errors at the bottom of the file, we kept
11474         on going.
11475
11476         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
11477         instance if the method we are calling is static!
11478
11479 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
11480
11481         * attribute.cs (ApplyAttributes): Make this function filter out
11482         the IndexerName attribute (as that attribute in reality is never
11483         applied) and return the string constant for the IndexerName
11484         attribute. 
11485
11486         * class.cs (TypeContainer.Emit): Validate that all the indexers
11487         have the same IndexerName attribute, and if so, set the
11488         DefaultName attribute on the class. 
11489
11490         * typemanager.cs: The return value might contain other stuff (not
11491         only methods).  For instance, consider a method with an "Item"
11492         property and an Item method.
11493
11494         * class.cs: If there is a problem with the parameter types,
11495         return. 
11496
11497 2002-05-24  Ravi Pratap  <ravi@ximian.com>
11498
11499         * ecore.cs (ImplicitConversionExists): Wrapper function which also
11500         looks at user defined conversion after making a call to 
11501         StandardConversionExists - we need this for overload resolution.
11502
11503         * expression.cs : Update accordingly the various method calls.
11504
11505         This fixes 2 bugs filed against implicit user defined conversions 
11506
11507 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
11508
11509         * statement.cs: Track the result of the assignment.
11510
11511 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
11512
11513         * expression.cs (MemberAccess): Improved error reporting for
11514         inaccessible members.
11515
11516 2002-05-22  Martin Baulig  <martin@gnome.org>
11517
11518         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
11519         itself with debugging support.
11520
11521 2002-05-22  Martin Baulig  <martin@gnome.org>
11522
11523         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
11524         Removed, this isn't needed anymore.
11525
11526 2002-05-20  Martin Baulig  <martin@gnome.org>
11527
11528         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
11529         be underlying type for an enum.
11530
11531 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
11532
11533         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
11534         that splits out the loading of just the core types.
11535
11536         * rootcontext.cs (ResolveCore): Split the struct resolution in
11537         two, so we can load the enumeration underlying types before any
11538         enums are used.
11539
11540         * expression.cs (Is): Bandaid until we fix properly Switch (see
11541         bug #24985 for details).
11542
11543         * typemanager.cs (ImplementsInterface): The hashtable will contain
11544         a null if there are no interfaces implemented.
11545
11546 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
11547
11548         * cs-parser.jay (indexer_declarator): It is fine to have array
11549         parameters
11550
11551 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
11552
11553         * typemanager.cs: (RegisterBuilder): New function used to register
11554         TypeBuilders that implement interfaces.  Since
11555         TypeBuilder.GetInterfaces (as usual) does not work with lame
11556         Reflection.Emit. 
11557         (AddUserType): register interfaces.
11558
11559         (ImplementsInterface): Use the builder_to_ifaces hash if we are
11560         dealing with TypeBuilder.  Also, arrays are showing up as
11561         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
11562         methods can not be invoked on them!
11563
11564         * ecore.cs (ExplicitReferenceConversionExists): Made public.
11565         (ImplicitReferenceConversionExists): Split out from
11566         StandardConversionExists. 
11567
11568         * expression.cs (As): We were only implementing one of the three
11569         cases for the as operator.  We now implement them all.
11570         (Is): Implement the various other cases for Is as well.
11571
11572         * typemanager.cs (CACHE): New define used to control if we want or
11573         not the FindMembers cache.  Seems to have a negative impact on
11574         performance currently
11575
11576         (MemberLookup): Nested types have full acess to
11577         enclosing type members
11578
11579         Remove code that coped with instance/static returns for events, we
11580         now catch this in RealFindMembers.
11581
11582         (RealFindMembers): only perform static lookup if the instance
11583         lookup did not return a type or an event.  
11584
11585 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
11586
11587         * assign.cs (CompoundAssign): We pass more semantic information
11588         now to Compound Assignments than we did before: now we have all
11589         the information at hand, and now we resolve the target *before* we
11590         do the expression expansion, which allows the "CacheValue" method
11591         to have the effect we intended (before, a [x] += 1 would generate
11592         two differen ArrayAccess expressions from the ElementAccess,
11593         during the resolution process).
11594
11595         (CompoundAssign.DoResolve): Resolve target and original_source here.
11596
11597 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
11598
11599         * expression.cs (ArrayAccess): dropped debugging information. 
11600
11601         * typemanager.cs: Small bug fix: I was always returning i_members,
11602         instead of one of i_members or s_members (depending on which had
11603         the content).
11604
11605         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
11606         method is invoked before any code generation takes place, and it
11607         is a mechanism to inform that the expression will be invoked more
11608         than once, and that the method should use temporary values to
11609         avoid having side effects
11610
11611         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
11612
11613         * ecore.cs (Expression.CacheTemporaries): Provide empty default
11614         implementation.
11615
11616         * expression.cs (Indirection, ArrayAccess): Add support for
11617         CacheTemporaries in these two bad boys. 
11618
11619         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
11620         ldobj or ldind_ref.  
11621         (StoreFromPtr): Handle stobj as well.
11622
11623         * expression.cs (UnaryMutator): Share more code.
11624
11625         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
11626         down: I was not tracking the Filter function as well, which
11627         was affecting the results of the cache.
11628
11629 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
11630
11631         * attribute.cs: Remove the hack to handle the CharSet property on
11632         StructLayouts. 
11633
11634 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
11635
11636         * attribute.cs (DoResolve): More uglyness, we now only try to
11637         resolve the attribute partially, to extract the CharSet
11638         information (only if we are a StructLayout attribute).  Otherwise 
11639
11640         (GetExtraTypeInfo): Add some code to conditionally kill in the
11641         future this.   I am more and more convinced that the .NET
11642         framework has special code to handle the attribute setting on
11643         certain elements.
11644
11645         * expression.cs (IsParamsMethodApplicable): Revert my previous
11646         foreach change here, it was wrong.
11647
11648 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
11649
11650         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
11651         (pp_expr): do not abort on unknown input, just return.
11652         (eval): abort if there are pending chars.
11653
11654         * attribute.cs (Attribute.Resolve): Positional parameters are
11655         optional.  Deal with that case.
11656
11657         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
11658         the Ansi/Unicode/Auto information for the type.
11659
11660         (TypeContainer.DefineType): instantiate the EmitContext here, as
11661         we will be using it during the type definition (to resolve
11662         attributes) and during the emit phase.
11663
11664         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
11665         to pull type information out of the attributes
11666
11667         (Attribute.Resolve): track the constructor builder, and allow for
11668         multiple invocations (structs and classes will use this).
11669
11670         * ecore.cs (MemberLookupFinal): new version with all the
11671         parameters customizable.
11672
11673         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
11674         constructors.  Return if the result value is null (as the error
11675         would have been flagged already by MemberLookupFinal)
11676
11677         Do not allow instances of abstract classes or interfaces to be
11678         created.
11679
11680         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
11681         We have to compare the assembly property here when dealing with
11682         FamANDAssem and Assembly access modifiers, because we might be
11683         creating an assembly from *modules* (that means that we are not
11684         getting TypeBuilders for types defined in other modules that are
11685         part of this assembly).
11686
11687         (Method.Emit): If the method is marked abstract and has a body,
11688         emit an error. 
11689
11690         (TypeContainer.DefineMembers): If both the defined member and the
11691         parent name match are methods, then do not emit any warnings: let
11692         the Method.Define routine take care of flagging warnings.  But if
11693         there is a mismatch (method overrides something else, or method is
11694         overriwritten by something, then emit warning).
11695
11696         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
11697         set to null, this means `do not check for the return type on the
11698         signature'. 
11699
11700         (Method.Define): set the return type for the method signature to
11701         null, so that we get methods with the same name and parameters and
11702         different return types.  This is used to flag warning 114 (you are
11703         hiding a method, and you probably want to use the new/override
11704         keywords instead).
11705
11706         * typemanager.cs (MemberLookup): Implemented proper access
11707         control, closing a long standing set of bug reports.  The problem
11708         was that the Framework only has two bits: Public and NonPublic,
11709         and NonPublic includes private and protected methods, but we need
11710         to enforce the FamANDAssem, FamOrAssem and Family. 
11711
11712 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
11713
11714         * statement.cs (GotoCase): Return true: Ammounts to giving up
11715         knowledge on whether we return or not, and letting the other case
11716         be responsible for it.
11717
11718 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
11719
11720         * driver.cs: Do not load directories for each file processed, only
11721         do it if there is a pattern.
11722
11723         * ecore.cs: Report readonly assigns here as well, as we might have
11724         been resolved only by MemberAccess.
11725
11726         (SimpleName.SimpleNameResolve): Also be useful for LValue
11727         resolution.   We need this to propagate assign to local readonly variables
11728
11729         * typemanager.cs: Use a ptrhashtable for the criteria, because we
11730         do not want to reuse potential criteria memory.
11731
11732         * class.cs (MyEventBuilder): Set reflected_type;
11733
11734         * ecore.cs (Constantify): Added support for constifying bools.
11735
11736         (RootContext.LookupType): Added a cache for values looked up in
11737         the declaration space.
11738
11739         * typemanager.cs (FindMembers): Now is a front-end to
11740         RealFindMembers, and provides a two-level hashtable-based cache to
11741         the request.  
11742
11743         15% performance improvement: from 22.5 to 19.2 seconds.
11744
11745         * expression.cs (IsParamsMethodApplicable): use foreach.
11746         (Invocation.DoResolve): ditto.
11747         (New.DoResolve): ditto.
11748         (ArrayCreation.DoResolve): ditto.
11749
11750         * ecore.cs (FindMostEncompassingType): use foreach.
11751
11752         * delegate.cs (NewDelegate.DoResolve): Use foreach
11753
11754         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
11755         (RemoveMethods): use foreach.
11756
11757         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
11758         nested foreach statements instead of for, and also break out of
11759         the inner loop once a match is found.
11760
11761         (Invocation.OverloadResolve): Use foreach, simplify the code. 
11762
11763 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
11764
11765         * cfold.cs (BinaryFold): During an enumeration evaluation context,
11766         we actually unwrap the expression to allow for extra information
11767         to be extracted. 
11768
11769         * expression.cs: Use Shr_Un on unsigned operations. 
11770
11771 2002-05-08  Ravi Pratap  <ravi@ximian.com>
11772
11773         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
11774         applicable operators was not being considered correctly. This closes
11775         the bug Miguel reported.
11776
11777 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
11778
11779         * attribute.cs: check that the type derives from System.Attribute
11780         and report the correct error in that case (moved the duplicate code to
11781         its own method, too).
11782
11783 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
11784
11785         * attribute.cs: lookup attribute type name as the spec says: first the
11786         bare attribute name and then name + "Attribute" (nant compiles with
11787         mcs after this fix).
11788
11789 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
11790
11791         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
11792         Because of the way we parse things, we should try to see if a
11793         UIntConstant can fit in an integer.
11794
11795 2002-05-07  Ravi Pratap  <ravi@ximian.com>
11796
11797         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
11798         when we are in an explicit context.
11799
11800         (ConvertReferenceExplicit): When converting from Iface type S to Class
11801         T make sure the rules are implemented as an OR.
11802
11803         * parameter.cs (ParameterType): Make it a property for now although the
11804         purpose really isn't anything immediate.
11805
11806         * expression.cs (Is*Applicable): Do better checking on the parameter type
11807         of a ref/out parameter. The ones from the system assemblies are already 
11808         marked with the correct type so we don't need to do any correction.
11809
11810         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
11811         the object type is standard too so include that.
11812
11813 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
11814
11815         * ecore.cs (StandardConversionExists): Augment with missing code:
11816         deal with IntConstant, LongConstants and Enumerations.
11817
11818         * assign.cs: Report the error, instead of failing silently
11819
11820         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
11821         typecontainer that they are declared, because the
11822         typecontainer/namespace will have the list of using clauses that
11823         need to be applied.
11824
11825         Assembly Attributes were escaping the normal registration
11826         mechanism. 
11827
11828         (EmitCode): Apply attributes within an EmitContext that represents
11829         the container they were declared on.
11830
11831         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
11832
11833 2002-05-06  Ravi Pratap  <ravi@ximian.com>
11834
11835         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
11836         Revamp completely - make much cleaner as we now operate only
11837         on a set of Types.
11838
11839         (FindMostSpecificSource, FindMostSpecificTarget): New methods
11840         to implement the logic detailed in the spec more correctly.
11841
11842         (UserDefinedConversion): Update accordingly.
11843
11844 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
11845
11846         * statement.cs: Return flow analysis information up.
11847
11848         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
11849         and the default.
11850
11851         (token): Do not consume an extra character before calling
11852         decimal_digits.
11853
11854 2002-05-06  Piers Haken <piersh@friskit.com>
11855
11856         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
11857
11858 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
11859
11860         * class.cs (Constructor.Emit): Set the IsStatic flag in the
11861         EmitContext during the instance constructor initializer
11862         resolution, to stop access to instance variables.
11863
11864         This is mandated by the spec, last paragraph of the `constructor
11865         initializers' section. 
11866
11867 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
11868
11869         * cs-parser.jay, class.cs (Accessor): new class used to represent
11870         an accessor (get or set).  In the past we used `null' to represent
11871         a missing accessor.  But this is ambiguous because there was no
11872         way to tell in abstract indexers/properties if one of them was
11873         specified.
11874
11875         Now there is a way of addressing that.
11876
11877         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
11878         instead of FindMembers.
11879
11880         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
11881         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
11882
11883         * attribute.cs: Treat indexers and properties as the same in terms
11884         of applying attributes
11885
11886         * ecore.cs (FindMostEncompassedType): Use statically initialized
11887         EmptyExpressions()s like we do elsewhere to avoid creating useless
11888         objects (and we take this out of the tight loop).
11889
11890         (GetConversionOperators): Move the code to extract the actual
11891         operators to a separate routine to clean things up.
11892
11893 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
11894
11895         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
11896         events are always registered FieldBuilders.
11897
11898         * class.cs (FieldBase): New class shared by Fields 
11899
11900         * delegate.cs: If we are a toplevel delegate, use our full name.
11901         If we are a nested delegate, then only use our tail name.
11902
11903 2002-05-02  Ravi Pratap  <ravi@ximian.com>
11904
11905         * expression.cs (IsApplicable): Ensure that we add the "&" to
11906         ref/out types before comparing it with the type of the argument.
11907
11908         (IsParamsMethodApplicable): Ditto.
11909
11910         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
11911         silly me ;-)
11912
11913         * delegate.cs : Handle the case when we have more than one applicable
11914         method. Flag an error only when we finish checking all.
11915
11916 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
11917
11918         * expression.cs: Add support for boolean static initializers.
11919
11920 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
11921
11922         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
11923
11924         * parameter.cs (ComputeParameterTypes,
11925         ComputeAndDefineParameterTypes): Better error handling: now we
11926         clear the `types' cache if we fail during any of the type lookups.
11927         We also return the status code correctly to our caller
11928
11929         * delegate.cs: If we fail to define a delegate, abort the extra
11930         steps. 
11931
11932         * expression.cs (Binary.ResolveOperator): for
11933         operator==(object,object) and operator !=(object, object) we also
11934         have to verify that there is an implicit conversion from one to
11935         the other.
11936
11937         (ArrayAccess.DoResolve): Array Access can operate on
11938         non-variables. 
11939
11940 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
11941
11942         * assign.cs (CompoundAssign): A new class used as a "flag" that
11943         the assignment actually is happening as part of a compound
11944         assignment operator.
11945
11946         During compound assignment, a few new rules exist to enable things
11947         like:
11948
11949         byte b |= 1 + 2
11950
11951         From the spec:
11952
11953         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
11954         to the type of x) if y is implicitly convertible to the type of x,
11955         and the operator is a builtin operator and the return type of the
11956         operator is explicitly convertible to the type of x. 
11957
11958         * rootcontext.cs: Reset warning level to 2.  4 catches various
11959         "interesting" features in mcs, we must clean this up at some
11960         point, but currently am trying to kill other bugs ;-)
11961
11962         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
11963         in container classes as well.  
11964
11965         * expression.cs (Binary.ResolveOperator): Handle string case
11966         before anything else (as operator overloading does emit an error
11967         before doing anything else).
11968
11969         This code could go away when we move to a table driven model, but
11970         i could not come up with a good plan last night.
11971
11972 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
11973
11974         * typemanager.cs (CSharpName): reimplementation using regex.
11975         * class.cs: added null check for fields in Emit
11976         * rootcontext.cs: set warninglevel to 4
11977
11978 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
11979
11980         * typemanager.cs (CSharpName): reimplemented with Lupus
11981         suggestion.
11982
11983 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
11984
11985         * statement.cs (If): correclty implement Resolve, because we were
11986         not catching sem errors in there.  The same process is needed
11987         everywhere else. 
11988         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
11989
11990
11991         (Statement.Warning_DeadCodeFound): Factorize code.
11992         (While): Report dead code here too.
11993
11994         (Statement): Added Resolve virtual method to allow
11995         for resolution split from the emit code.
11996
11997 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
11998
11999         * statement.cs (EmitBoolExpression): No longer try to resolve the
12000         expression here.    
12001         (MakeBoolean): New utility function that resolve, implicitly
12002         converts to boolean and tags the expression. 
12003
12004
12005         (If, Do): Implement dead code elimination.
12006         (While): Implement loop inversion
12007
12008         (Do, While, For, If): Resolve the expression prior to calling our
12009         code generation.
12010
12011 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
12012
12013         * class.cs:
12014           - added method Report28 (warning: program has more than one entry point)
12015           - added method IsEntryPoint, implements paragraph 10.1 of the spec
12016           - modified method Method.Define, the part at the end of the method
12017
12018         * rootcontext.cs: added static public Location EntryPointLocation;
12019           
12020         * ../errors/cs0028.cs : Add test case for the above warning.              
12021
12022         * typemanager.cs:
12023           - modified method CSharpName to allow arrays of primitive type to
12024             be printed nicely (e.g. instead of System.Int32[][] it now prints
12025             int[][])
12026           - added method CSharpSignature: returns the signature of a method
12027             in string format to be used in reporting errors, warnings, etc.
12028
12029         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
12030         with String.Empty.
12031
12032 2002-04-26  Ravi Pratap  <ravi@ximian.com>
12033
12034         * delegate.cs (Define): Fix extremely silly bug where I was
12035         setting the type of the 'object' parameter of the BeginInvoke
12036         method to System.IAsyncResult instead of System.Object ;-)
12037
12038 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
12039
12040         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
12041         here. 
12042
12043         (Constructor.Emit): return if we fail to initialize the
12044         constructor.  Another door closed!  
12045
12046         * expression.cs (New.DoResolve): Improve error message (from -6 to
12047         1501).  Use DeclaredOnly lookup to find the exact constructor.
12048
12049         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
12050         loop.  This is useful.
12051
12052         * cs-parser.jay: Adjust the default parameters so that destructors
12053         have the proper signature.
12054
12055 2002-04-26  Martin Baulig  <martin@gnome.org>
12056
12057         * driver.cs (LoadAssembly): If `assembly' contains any characters
12058         which are only valid in path names and not in assembly names
12059         (currently slash, backslash and point), use Assembly.LoadFrom ()
12060         instead of Assembly.Load () on the `assembly' (before iteration
12061         over the link_paths).
12062
12063 2002-04-26  Martin Baulig  <martin@gnome.org>
12064
12065         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
12066
12067 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
12068
12069         * class.cs (Property): use the new typemanager.MemberLookup
12070
12071         (TypeContainer.MemberLookup): Implement using the
12072         TypeManager.MemberLookup now. 
12073
12074         * typemanager.cs: Make MemberLookup a function of the TypeManager,
12075         and return MemberInfos, so that these can be used without an
12076         EmitContext (what we had before).
12077
12078 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
12079
12080         * expression.cs: Fix the case where the argument to params if the
12081         type of the params.  I omitted handling this before.   Fixed
12082
12083 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
12084
12085         * driver.cs: Call BootCorlib_PopulateCoreType
12086
12087         * class.cs (Property.CheckBase): Check for properties only, not
12088         for all members. 
12089
12090         * interface.cs: Temporary hack: try/catch around the
12091         CustomAttributeBuilder, because I am getting an exception that I
12092         do not understand.
12093
12094         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
12095         types whose definitions are required to be there (attributes are
12096         defined before standard types).
12097
12098         Compute definitions as we boot the various types, as they are used
12099         immediately (value_type class will need object_type, but if we do
12100         not initialize object_type, we will pass a null, which will let
12101         the runtime pick the System.Object from the existing corlib, which
12102         is not what we want).
12103
12104 2002-04-22  Patrik Torstensson <totte@labs2.com>
12105
12106         * cs-tokenizer.cs: fixed a number of trim() issues.
12107
12108 2002-04-22  Ravi Pratap  <ravi@ximian.com>
12109
12110         * expression.cs (Argument.Type): Ensure that we return the correct
12111         type when we have out or ref parameters [in which case we 
12112         append a "&"].
12113
12114 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
12115
12116         * class.cs (Property, Indexer): Allow extern modifier in there. 
12117
12118         * typemanager.cs (InitBaseTypes): Initializes object_type and
12119         value_type, since those will be used early on during the bootstrap
12120         process to compile corlib.
12121
12122         (InitCoreTypes): Move code from here to InitBaseTypes.
12123
12124 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
12125
12126         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
12127         single-dimension arrays as using the ldlen opcode.  
12128
12129         Daniel Lewis discovered this optimization.  
12130
12131         * typemanager.cs: Add signature for System.Array::get_Length
12132
12133 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12134
12135         * statement.cs: report the error when the foreach does not apply to an
12136         array nor a collection.
12137
12138 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
12139
12140         * expression.cs: Add implicit conversions to the operator ~.
12141
12142         * constant.cs (DecimalConstant.Emit): Emit decimal value.
12143
12144         * typemanager.cs: Locate the decimal constructor.
12145
12146 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12147
12148         * attribute.cs: use the new property of TypeOf.
12149         * expression.cs: added 'get' property around typearg.
12150
12151         These changes fix a build breaker reported by NickD. Is this the
12152         correct way to fix?  If not, please, revert my changes and make it
12153         work :-).
12154
12155 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
12156
12157         * attribute.cs: Add support for typeof in attribute invocations.
12158         I am not sure that this is right though.
12159
12160 2002-04-14  Duncan Mak  <duncan@ximian.com>
12161
12162         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
12163         Binary.Operator.Division case.
12164
12165 2002-04-13  Ravi Pratap  <ravi@ximian.com>
12166
12167         * class.cs (DefineType): Ensure that we do a proper check on
12168         attribute types and also register it with the TypeManager.
12169
12170         (TypeContainer.Targets): The default for attribute types is
12171         AttributeTargets.All.
12172
12173         * attribute.cs (ApplyAttributes): Registering the attribute type
12174         is done elsewhere, not when we discover we have a Usage attribute.
12175
12176 2002-04-12  Ravi Pratap  <ravi@ximian.com>
12177
12178         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
12179         and get rid of is_delegate parameter.
12180
12181         * everywhere : update.
12182
12183 2002-04-12  Ravi Pratap  <ravi@ximian.com>
12184
12185         * cs-parser.jay (compilation_unit): Revamp completely to use
12186         some new ideas that I got from Rhys' grammar to solve the problems
12187         with assembly level attributes.
12188
12189         (outer_declaration): New grammar production.
12190
12191         (attribute_sections): Add.
12192
12193         (opt_attributes): Base on attribute_sections
12194
12195         (namespace_declaration): Allow opt_attributes to tackle the case
12196         when we have assembly level attributes - we are clever in this
12197         regard now ;-)
12198
12199         * attribute.cs (ApplyAttributes): Do not worry about assembly 
12200         attributes in the non-global context.
12201
12202         * rootcontext.cs (AddGlobalAttributes): Go back to using this
12203         instead of SetGlobalAttributes.
12204
12205         * class.cs, rootcontext.cs : Ensure we define and generate 
12206         attribute types before anything else.
12207
12208         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
12209         and flag the new error -20 for the case when the attribute type
12210         does not have valid targets specified. csc does not catch this.
12211
12212         * ../errors/errors.txt : update for error # -20
12213
12214 2002-04-11  Ravi Pratap  <ravi@ximian.com>
12215
12216         * support.cs (InternalParameters.ParameterModifier): Do some null
12217         checking and return sane values.
12218
12219         * class.cs (Method.Define): If we are a PInvoke method, ensure
12220         that we are static and extern. Report error # 601
12221
12222         * ../errors/cs0601.cs : Add test case for the above error.
12223
12224 2002-04-07  Ravi Pratap  <ravi@ximian.com>
12225
12226         * rootcontext.cs (attribute_types): We need to keep type of
12227         all attribute types separately and emit code for them first.
12228
12229         (RegisterAttribute) : Implement.
12230
12231         * class.cs (DefineType): Check if the current Type is a custom
12232         attribute type and register it accordingly.
12233
12234         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
12235         adding the first attribute twice and rename to
12236
12237         (SetGlobalAttributes): this.
12238
12239         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
12240         lookups.
12241
12242         * attribute.cs (ApplyAttributes): Take an additional argument telling us
12243         if we are processing global arguments. Hmm, I am unsure of this.
12244
12245 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12246
12247         * expression.cs: added static array of strings to avoid calling
12248         Enum.ToString () for Operator in Binary. Significant recover of
12249         performance.
12250
12251 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
12252
12253         * class.cs (FindMembers): Allow the Builders of the various
12254         members to be null.  If they are skip them.  This only happens
12255         during the PInvoke declaration.
12256
12257 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
12258
12259         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
12260         failure, so we do not keep going afterwards.
12261
12262         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
12263         wanted to pass `false' as the `is_delegate' argument.  If this is
12264         the case, why not use delegate_type == null to mean `is_delegate =
12265         false' and anything else as is_delegate = true.
12266
12267 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
12268
12269         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
12270         code for the section, not the beginning of the tests.
12271
12272 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
12273
12274         * cfold.cs: Handle operator + (Enum x, Underlying x) 
12275
12276         * expression.cs (Binary): same.  Warn about errors where we have
12277         Enum/Enum in operator + as well.
12278
12279 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
12280
12281         * statement.cs:
12282                 - added support for switch(bool)
12283                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
12284                 - add TableSwitchEmit() to handle table-based switch statements
12285
12286 2002-04-05  Ravi Pratap  <ravi@ximian.com>
12287
12288         * expression.cs (Invocation.OverloadResolve): Factor out code which
12289         does parameter compatibility checking with arguments so that we can 
12290         re-use the code even from Delegate.VerifyApplicability
12291
12292         (VerifyArgumentsCompat): Move above code here.
12293
12294         * delegate.cs (VerifyApplicability): Get rid of duplicate code
12295         and instead make a call to the above method.
12296
12297 2002-03-31  Ravi Pratap  <ravi@ximian.com>
12298
12299         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
12300         We use it to keep track of classes which are attribute types.
12301
12302 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
12303
12304         * delegate.cs (Delegate.Define): Correctly define the types in the
12305         presence of fixed and array parameters.
12306
12307         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
12308         doing FindMembers.
12309
12310         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
12311         include NonPublic after the first iteration.
12312
12313         * class.cs (Indexer.CheckBase): Only check if both parents are
12314         non-null. 
12315
12316         * cs-parser.jay (accessor_body): If empty, set to null.
12317
12318         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
12319         same code path here to resolve constants names that we did have in
12320         MemberAccess.DoResolve.  There is too much code duplicated here.
12321
12322 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
12323
12324         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
12325
12326         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
12327         to MakeUnionSet.
12328
12329         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
12330         tokens, numbers and strings.
12331
12332         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
12333         parenthesis.
12334
12335         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
12336         asyncronous parameters and the regular parameters.  
12337
12338         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
12339         specify the target directory.
12340
12341         * expression.cs: (This.DoResolve): Simplify
12342         (As.Emit): Optimize, do not generate IsInst if the expression is
12343         always of the given type.
12344
12345         (Is.DoResolve): Bug fix, we were reporting both always/never for
12346         the is expression.
12347
12348         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
12349         creating too many unnecessary arrays.
12350
12351 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
12352
12353         * class.cs (EmitFieldInitializer): Use Assign expression to assign
12354         fields instead of rolling our own initializer.   Takes care of all
12355         implicit conversions, and drops unnecessary static checks/argument.
12356
12357 2002-03-31  Dick Porter  <dick@ximian.com>
12358
12359         * driver.cs: use the GetDirectories() return values properly, and
12360         use "/" as path separator.
12361
12362 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
12363
12364         * expression.cs (Unary): Optimize - - expr into expr.
12365         (Binary): Optimize a + (-b) into a -b.
12366
12367         * codegen.cs (CodeGen): Made all methods static.
12368
12369 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
12370
12371         * rootcontext.cs: 
12372
12373         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
12374         TypeBuilder property.
12375
12376         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
12377         instead. 
12378
12379         * tree.cs: Removed the various RecordXXXX, and replaced with a
12380         single RecordDecl.  Removed all the accessor methods, and just
12381         left a single access point Type 
12382
12383         * enum.cs: Rename DefineEnum to DefineType.
12384
12385         * decl.cs: New abstract method `DefineType' used to unify the
12386         Defines for Enumerations, Interfaces, TypeContainers and
12387         Delegates.
12388
12389         (FindType): Moved LookupInterfaceOrClass here.  Moved the
12390         LookupBaseClasses method that used to live in class.cs and
12391         interface.cs here, and renamed to FindType.
12392
12393         * delegate.cs: Implement DefineType.  Take advantage of the
12394         refactored pattern for locating the parent builder without taking
12395         the parent_builder argument (which we know does not work if we are
12396         nested, and triggering a toplevel definition).
12397
12398 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
12399
12400         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
12401         accessibility of a member has changed during override and report
12402         an error if so.
12403
12404         * class.cs (Method.Define, Property.Define): Only complain on
12405         overrides if the method is private, any other accessibility is
12406         fine (and since we just checked the permission is the same, we are
12407         good to go).
12408
12409         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
12410         and elif are processed always.  The other pre-processing
12411         directives are only processed if we are "taking" the path
12412
12413 2002-03-29  Martin Baulig  <martin@gnome.org>
12414
12415         * class.cs (Method.Emit): Only emit symbolic debugging info if the
12416         current location is not Null.
12417
12418         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
12419         a separate method so we can profile it.
12420
12421         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
12422         `span.Seconds' are just seconds, but no minutes or hours.
12423         (MainDriver): Profile the CodeGen.SaveSymbols calls.
12424
12425 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
12426
12427         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
12428         Remove the gratuitous set of Final:
12429
12430                                 // If an interface implementation, then we can set Final.
12431                                 if (((flags & MethodAttributes.Abstract) == 0) &&
12432                                     implementing.DeclaringType.IsInterface)
12433                                         flags |= MethodAttributes.Final;
12434
12435         I do not know what I was smoking when I used that.
12436
12437
12438         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
12439         step into fixing the name resolution issues for delegates and
12440         unifying the toplevel name resolution.
12441
12442 2002-03-28  Martin Baulig  <martin@gnome.org>
12443
12444         * class.cs (Method.Emit): If we have a symbol writer, call its
12445         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
12446         tell it about the current method.
12447
12448         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
12449         writer that we're going to emit the first byte of IL code for a new
12450         statement (a new source line).
12451         (EmitContext.EmitTopBlock): If we have a symbol writer, call
12452         EmitContext.Mark() before emitting any code.
12453
12454         * location.cs (SymbolDocument): Return null when we're Null.
12455
12456         * statement.cs (Statement): Moved the `Location loc' variable here.
12457         (Statement.EmitBoolExpression): If we have a symbol writer, call
12458         ec.Mark() before emitting any code to tell it that we're at the
12459         beginning of a new statement.
12460         (StatementExpression): Added `Location' argument to the constructor.
12461         (Block): Added public readonly variable `StartLocation' and public
12462         variable `EndLocation'.  The latter is to be set using SetEndLocation().
12463         (Block): Added constructor which takes a start and end location.
12464         (Block.SetEndLocation): New method. This sets the end location.
12465         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
12466         local variables we create.
12467         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
12468         each statement and do also mark the begin and end of the block.
12469
12470         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
12471         tell it the current lexer.Location, use Location.Null for the end of the
12472         block.
12473         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
12474         current block, set its end location using SetEndLocation().
12475         (statement_expression): StatementExpression constructor now takes the
12476         lexer.Location as additional argument.
12477         (for_statement, declare_local_variables): Likewise.
12478         (declare_local_variables): When creating a new implicit block, use the
12479         new Block constructor and pass it the lexer.Location.
12480
12481 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
12482
12483         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
12484         members also on the parent interfaces recursively.
12485
12486 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
12487
12488         * report.cs: Use new formats, since Gonzalo finished the missing
12489         bits. 
12490
12491         * expression.cs (Binary.ResolveOperator): added missing operator|
12492         operator& and operator^ for bool/bool.
12493
12494         * cs-parser.jay: CheckDef now takes a Location argument that is
12495         used to report errors more precisly (instead of reporting the end
12496         of a definition, we try to track something which is a lot closer
12497         to the source of the problem).
12498
12499         * cs-tokenizer.cs: Track global token use, so we can properly flag
12500         the use of #define/#undef after the first token has been seen.
12501
12502         Also, rename the reportXXXX to Error_DescriptiveName
12503
12504         * decl.cs (DeclSpace.IsTopLevel): Move property here from
12505         TypeContainer, so that Enum and Interface can use this too.
12506
12507         * class.cs (TypeContainer.LookupInterfaceOrClass,
12508         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
12509         `builder' argument.  Typically this was used to pass the parent
12510         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
12511         the definition).  
12512
12513         The problem is that a nested class could trigger the definition of
12514         a toplevel class, and the builder would be obviously wrong in that
12515         case. 
12516
12517         So we drop this argument, and we compute dynamically the
12518         TypeBuilder/ModuleBuilder (the correct information was available
12519         to us anyways from DeclSpace.Parent)
12520
12521         * interface.cs (Interface.DefineInterface): Drop builder
12522         parameter cleanup like class.cs
12523
12524         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
12525         like class.cs
12526
12527         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
12528         values. 
12529
12530         (Try.Emit): Propagate the returns value from the statement.
12531
12532         (Return.Emit): Even if we are leavning 
12533
12534         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
12535
12536         * modifiers.cs: Fix the computation of MethodAttributes flags.
12537
12538 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
12539
12540         * driver.cs: allow compilation of files that start with '/'.
12541         Add a default case when checking the argument of --target.
12542
12543 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
12544
12545         * interface.cs: Implement the same search algorithm for types in
12546         the interface code.
12547
12548         * delegate.cs: Do not allow multiple definition.
12549
12550         * Recovered ChangeLog that got accidentally amputated
12551
12552         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
12553
12554         * rootcontext.cs: Load manually enum to allow core classes to
12555         contain enumerations.
12556
12557         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
12558         Update to new static methods in TypeManager.
12559
12560         * typemanager.cs (GetMethod, GetConstructor): Use our
12561         implementation of FindMembers to find the members, since during
12562         corlib compilation, the types are TypeBuilders and GetMethod and
12563         GetConstructor do not work.
12564
12565         Make all methods in TypeManager static.
12566
12567         (InitCodeHelpers): Split the functionality from
12568         the InitCodeTypes function.
12569
12570         * driver.cs: Call InitCodeHelpers after we have populated the
12571         types. 
12572
12573         * cs-parser.jay (delegate_declaration): we did not used to compute
12574         the delegate name correctly for void delegates.
12575
12576 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
12577
12578         * rootcontext.cs (RootContext): Init the interface_resolve_order
12579         and type_container_resolve_order always.
12580
12581         (ResolveCore, BootstrapCorlib_ResolveClass,
12582         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
12583         compiler when compiling with --nostdlib
12584
12585         * class.cs (TypeContainer.DefineType): Check that our parent is
12586         not null.  This test is most important when we are bootstraping
12587         the core types.
12588
12589         * codegen.cs: Split out the symbol writing code.
12590
12591 2002-03-25  Martin Baulig  <martin@gnome.org>
12592
12593         * driver.cs (-g): Made -g an alias for --debug.
12594
12595 2002-03-24  Martin Baulig  <martin@gnome.org>
12596
12597         * codegen.cs (SymbolWriter): New public variable. Returns the
12598         current symbol writer.
12599         (CodeGen): Added `bool want_debugging_support' argument to the
12600          constructor. If true, tell the ModuleBuild that we want debugging
12601         support and ask it for the ISymbolWriter.
12602         (Save): If we have a symbol writer, call it's Close() method after
12603         saving the assembly.
12604
12605         * driver.c (--debug): New command line argument to create a
12606         debugger information file.
12607
12608         * location.cs (SymbolDocument): New public property. Returns an
12609         ISymbolDocumentWriter object for the current source file or null
12610         if we don't have a symbol writer.
12611
12612 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
12613
12614         * driver.cs (LoadAssembly): Correctly return when all the paths
12615         have been tried and not before.
12616
12617         * statement.cs (Switch.Emit): return the actual coverage for this
12618         statement (returns/not-returns)
12619
12620         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
12621         switch of the statement if we are the last switch section.  That
12622         kills two problems: try/catch problems (we used to emit an empty
12623         nop at the end) and switch statements where all branches would
12624         return. 
12625
12626 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
12627
12628         * driver.cs: Add default assemblies (the equivalent to the
12629         Microsoft CSC.RSP file)
12630
12631         * cs-tokenizer.cs: When updating `cols and setting it to zero,
12632         also update tokens_seen and set it to false.
12633
12634         * driver.cs: Implement --recurse for Mike.
12635
12636         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
12637         correctly splitting out the paths.
12638
12639 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
12640
12641         * interface.cs (Interface.PopulateProperty): Instead of using
12642         `parent' as the declaration space for the set parameters, use
12643         `this' 
12644
12645         * support.cs (InternalParameters): InternalParameters constructor
12646         takes a DeclSpace instead of a TypeContainer.
12647
12648         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
12649         types are being initialized, load the address of it before calling
12650         the function.  
12651
12652         (New): Provide a mechanism to disable the generation of local
12653         value type temporaries when the caller will be providing us with
12654         an address to store it.
12655
12656         (ArrayCreation.EmitDynamicInitializers): Use it.
12657
12658 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
12659
12660         * expression.cs (Invocation.EmitArguments): Only probe for array
12661         property if there is more than one argument.  Sorry about that.
12662
12663         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
12664         empty param arrays.
12665
12666         * class.cs (Method.LabelParameters): Fix incorrect code path that
12667         prevented the `ParamArrayAttribute' from being applied to the
12668         params attribute.
12669
12670 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
12671
12672         * support.cs (ReflectionParameters): Correctly compute whether the
12673         last argument is a params array.  Fixes the problem with
12674         string.Split ('a')
12675
12676         * typemanager.cs: Make the assemblies array always be non-null
12677         (empty, but non-null)
12678
12679         * tree.cs (RecordDecl): New function that abstracts the recording
12680         of names.  This reports error 101, and provides a pointer to the
12681         previous declaration.  Fixes a crash in the compiler.
12682
12683         * cs-parser.jay (constructor_declaration): Update to new grammar,
12684         and provide a constructor_body that can be empty.
12685
12686 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
12687
12688         * driver.cs: Add support for --resources.
12689
12690         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
12691         Make all types for the various array helper methods be integer.
12692
12693         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
12694         CheckState to ConvCast.
12695
12696         (ConvCast): Now it takes a `checked' state argument, to avoid
12697         depending on the emit context for the conversion, and just using
12698         the resolve time setting.
12699
12700         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
12701         instead of Invocation.EmitArguments.  We do not emit the original
12702         arguments, instead we emit those which have been converted to
12703         unsigned int expressions.
12704
12705         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
12706
12707         * codegen.cs: ditto.
12708
12709         * expression.cs (LocalVariableReference): Drop the use of the
12710         Store function that depended on the variable index.
12711
12712         * statement.cs (VariableInfo): Drop the `Idx' property from this
12713         class, as this is not taking into account the indexes for
12714         temporaries tat we generate during the execution, getting the
12715         indexes wrong.
12716
12717         * class.cs: First emit class initializers, then call the parent
12718         constructor. 
12719
12720         * expression.cs (Binary): Fix opcode emision.
12721         (UnaryMutator.EmitCode): Support checked code generation
12722
12723         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
12724         matches for events for both the Static and Instance scans,
12725         pointing to the same element.   Fix that.
12726
12727 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
12728
12729         * rootcontext.cs (ResolveTree): Always set the
12730         interface_resolve_order, because nested interfaces will be calling
12731         into us.
12732
12733         * class.cs (GetInterfaceOrClass): Track the same resolution
12734         process used by TypeManager.LookupType.  This fixes the nested
12735         type lookups in class declarations (separate path from
12736         LookupType). 
12737
12738         (TypeContainer.DefineType): Also define nested interfaces.
12739         (TypeContainer.RegisterOrder): New public function used to
12740         register the order in which child interfaces need to be closed.
12741
12742         Nested interfaces need to be closed after their parents have been
12743         created. 
12744
12745         * interface.cs (InterfaceAttr): Put all the logic for computing
12746         the interface attribute here. 
12747
12748         (DefineInterface): Register our interface order with the
12749         RootContext or with the TypeContainer depending on the case.
12750
12751 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
12752
12753         * cs-parser.jay: rework foreach statement to work with the new
12754         changes to the policy on SimpleNames.
12755
12756         * report.cs: support Stacktrace on warnings as well.
12757
12758         * makefile: drop --unsafe and /unsafe from the compile.
12759
12760 2002-03-13  Ravi Pratap  <ravi@ximian.com>
12761
12762         * ecore.cs (StandardConversionExists): Modify to take an Expression
12763         as the first parameter. Ensure we do null -> reference type conversion
12764         checking.
12765
12766         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
12767         temporary Expression objects.
12768
12769 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
12770
12771         * interface.cs: workaround bug in method overloading resolution
12772         (there is already a bugzilla bug for it).
12773
12774 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
12775
12776         We could also solve this problem by having a separate path for
12777         performing type lookups, instead of DoResolve, we could have a
12778         ResolveType entry point, and only participating pieces of the
12779         production (simplename, deref, array) would implement this. 
12780
12781         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
12782         signal SimpleName to only resolve type names and not attempt to
12783         resolve anything else.
12784
12785         * expression.cs (Cast): Set the flag.
12786
12787         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
12788
12789         * class.cs: Only report 108 if there is no `new' modifier.
12790
12791         * cs-parser.jay: rework foreach statement to work with the new
12792         changes to the policy on SimpleNames.
12793
12794         * report.cs: support Stacktrace on warnings as well.
12795
12796         * makefile: drop --unsafe and /unsafe from the compile.
12797
12798 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
12799
12800         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
12801         lookups here, instead of doing that at parse time.  This means
12802         that our grammar will not introduce `LocalVariableReferences' as
12803         expressions at this point.  That solves the problem of code like
12804         this:
12805
12806         class X {
12807            static void Main ()
12808            { int X = 1;
12809             { X x = null }}}
12810
12811         This is only half the fix.  The full fix requires parameters to
12812         also be handled in this way.
12813
12814         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
12815         makes the use more obvious of the DeclSpace.  The
12816         ec.TypeContainer.TypeBuilder is now only used to pull the
12817         TypeBuilder for it.
12818
12819         My theory is that I can get rid of the TypeBuilder completely from
12820         the EmitContext, and have typecasts where it is used (from
12821         DeclSpace to where it matters).  
12822
12823         The only pending problem is that the code that implements Aliases
12824         is on TypeContainer, and probably should go in DeclSpace.
12825
12826         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
12827         lookups here, instead of doing that at parse time.  This means
12828         that our grammar will not introduce `LocalVariableReferences' as
12829         expressions at this point.  That solves the problem of code like
12830         this:
12831
12832         class X {
12833            static void Main ()
12834            { int X = 1;
12835             { X x = null }}}
12836
12837         This is only half the fix.  The full fix requires parameters to
12838         also be handled in this way.
12839
12840         * class.cs (Property.DefineMethod): When implementing an interface
12841         method, set newslot, when implementing an abstract method, do not
12842         set the flag (before we tried never setting it, or always setting
12843         it, which is the difference).
12844         (Indexer.DefineMethod): same.
12845         (Method.DefineMethod): same.
12846
12847         * ecore.cs: Only set the status used flag if we get back a Field.
12848
12849         * attribute.cs: Temporary hack, so Paolo can keep working.
12850
12851 2002-03-08  Ravi Pratap  <ravi@ximian.com>
12852
12853         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
12854         the unmanaged type in the case we have a MarshalAs attribute.
12855
12856         (Resolve): Handle the case when we are parsing the special MarshalAs
12857         attribute [we need to store the unmanaged type to use later]
12858
12859         * typemanager.cs (marshal_as_attr_type): Built in type for the 
12860         MarshalAs Attribute.
12861
12862         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
12863         on parameters and accordingly set the marshalling info.
12864
12865 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
12866
12867         * class.cs: Optimizing slightly by removing redundant code after
12868         we switched to the `NoTypes' return value.
12869         (Property.DefineMethod): use NoTypes here too.
12870
12871         This fixes the bug I introduced in my last batch of changes.
12872
12873 2002-03-05  Ravi Pratap  <ravi@ximian.com>
12874
12875         * tree.cs (RecordEnum): Add. We now keep track of enums too.
12876
12877         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
12878         Enums since those are types too. 
12879
12880         * cs-parser.jay (enum_declaration): Record enums as we parse them.
12881
12882         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
12883         thanks to a call during the lookup process.
12884
12885 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
12886
12887         * statement.cs (Foreach): Lots of work to accomodate a particular
12888         kind of foreach statement that I had not kept in mind.  It is
12889         possible to have foreachs on classes that provide a GetEnumerator
12890         method that return objects that implement the "pattern" for using
12891         a foreach, there is no need to support GetEnumerator
12892         specifically. 
12893
12894         This is needed to compile nant.
12895
12896         * decl.cs: Only report 114 if the member is not `Finalize' and if
12897         the warning level is at least 2.
12898
12899         * class.cs: Moved the compare function from Method to
12900         MethodSignature. 
12901
12902         (MethodSignature.InheritableMemberSignatureCompare): Add new
12903         filter function that is used to extract inheritable methods from a
12904         class. 
12905
12906         (Method.Define): Use the new `inheritable_method_signature_filter'
12907         delegate
12908
12909         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
12910         command. 
12911
12912 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
12913
12914         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
12915
12916         * cs-parser.jay: Add opt_semicolon to the interface declaration.
12917
12918         * expression.cs: Pass location information to
12919         ConvertImplicitStandard. 
12920
12921         * class.cs: Added debugging code to track return values from
12922         interfaces. 
12923
12924 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
12925
12926         * expression.cs (Is.DoResolve): If either side of the `is' is an
12927         interface, do not flag the warning.
12928
12929         * ecore.cs (ImplicitReferenceConversion): We need a separate test
12930         for interfaces
12931
12932         * report.cs: Allow for --fatal to be used with --probe.
12933
12934         * typemanager.cs (NoTypes): Move the definition for the empty Type
12935         array here. 
12936
12937         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
12938         properties. 
12939         (TypeContainer.DefineProxy): New function used to proxy to parent
12940         implementations when implementing interfaces.
12941         (TypeContainer.ParentImplements): used to lookup if our parent
12942         implements a public function that is required by an interface.
12943         (TypeContainer.VerifyPendingMethods): Hook this up.
12944
12945         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
12946         `modules' and `assemblies' arraylists into arrays.  We only grow
12947         these are the very early start up of the program, so this improves
12948         the speedof LookupType (nicely measured).
12949
12950         * expression.cs (MakeByteBlob): Replaced unsafe code with
12951         BitConverter, as suggested by Paolo.
12952
12953         * cfold.cs (ConstantFold.Binary): Special case: perform constant
12954         folding of string concatenation, but if either side is a string,
12955         and the other is not, then return null, and let the runtime use
12956         the concatenation on the string plus the object (using
12957         `Object.ToString'). 
12958
12959 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
12960
12961         Constant Folding has been implemented now.
12962
12963         * expression.cs (Unary.Reduce): Do not throw an exception, catch
12964         the error instead on types that are not supported in one's
12965         complement. 
12966
12967         * constant.cs (Constant and all children): New set of functions to
12968         perform implict and explicit conversions.
12969
12970         * ecore.cs (EnumConstant): Implement the new functions to perform
12971         conversion by proxying to the child expression.
12972
12973         * codegen.cs: (ConstantCheckState): Constant evaluation has its
12974         own separate setting that can not be turned off from the command
12975         line using --unchecked or --checked and is only controlled using
12976         the checked/unchecked statements and expressions.  This setting is
12977         used by the constant folder to flag errors.
12978
12979         * expression.cs (CheckedExpr, UncheckedExpr): Set the
12980         ConstantCheckState as well.   
12981
12982         During Resolve, they also have to flag the state, because the
12983         constant folder runs completely in the Resolve phase.
12984
12985         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
12986         well.
12987
12988 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
12989
12990         * cfold.cs: New file, this file contains the constant folder.
12991
12992         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
12993         argument to track whether we are using the resulting address to
12994         load or store a value and provide better error messages. 
12995
12996         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
12997         new AddressOf arguments.
12998
12999         * statement.cs (Foreach.EmitCollectionForeach): Update
13000
13001         * expression.cs (Argument.Emit): Call AddressOf with proper
13002         arguments to track usage.
13003
13004         (New.DoEmit): Call AddressOf with new arguments.
13005
13006         (Unary.Emit): Adjust AddressOf call.
13007
13008 2002-03-01  Ravi Pratap  <ravi@ximian.com>
13009
13010         * cs-parser.jay (member_access): Change the case for pre-defined types
13011         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
13012         this suggestion.
13013
13014         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
13015         a method body.
13016
13017         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
13018         essentially like methods and apply attributes like MethodImplOptions to them too.
13019
13020         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
13021         not being null.
13022
13023         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
13024         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
13025         is the DeclSpace.
13026
13027         * Update code everywhere accordingly.
13028
13029         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
13030
13031         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
13032
13033 2002-02-28  Ravi Pratap  <ravi@ximian.com>
13034
13035         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
13036         try performing lookups against those instead of jumping straight into using
13037         the 'using' clauses.
13038
13039         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
13040
13041         (LookupType): Perform lookups in implicit parents too.
13042
13043         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
13044         sequence as RootContext.LookupType. 
13045
13046         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
13047         the various cases of namespace lookups into this method.
13048
13049 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
13050
13051         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
13052         in positional arguments)
13053
13054         * class.cs (Operator): Update the AllowedModifiers to contain
13055         extern. 
13056
13057         * cs-parser.jay: Update operator declaration to allow for the
13058         operator body to be empty.
13059
13060         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
13061         values. 
13062
13063 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
13064
13065         * class.cs (Method.Emit): Label parameters.
13066
13067         * driver.cs: Return 1 or 0 as the program exit code.
13068
13069 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
13070
13071         * expression.cs: Special case the `null' object when trying to
13072         auto-compute the type, as anything can be explicitly converted to
13073         that. 
13074
13075         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
13076         spotting this Paolo.
13077
13078         (Expression.ImplicitNumericConversion): Perform comparissions of
13079         the type using the underlying type in the case of an enumeration
13080         rather than using the enumeration type for the compare.
13081
13082         Cope with the underlying == type case, which is not possible to
13083         catch before. 
13084
13085         (Expression.ConvertNumericExplicit): Perform comparissions of
13086         the type using the underlying type in the case of an enumeration
13087         rather than using the enumeration type for the compare.
13088
13089         * driver.cs: If the user does not supply an extension, assume .exe
13090
13091         * cs-parser.jay (if_statement): Rewrote so that we can track the
13092         location for the if statement.
13093
13094         * expression.cs (Binary.ConstantFold): Only concat strings when
13095         the operation is "+", not everything ;-)
13096
13097         * statement.cs (Statement.EmitBoolExpression): Take a location
13098         argument. 
13099         (If, While, Do): Track location.
13100
13101         * expression.cs (Binary.ResolveOperator): In the object + string
13102         case, I was missing a call to ConvertImplicit
13103
13104 2002-02-25  Ravi Pratap  <ravi@ximian.com>
13105
13106         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
13107         Location arguments. Ensure we use RootContext.LookupType to do our work
13108         and not try to do a direct Type.GetType and ModuleBuilder.GetType
13109
13110         * interface.cs (PopulateMethod): Handle the type of the parameter being
13111         null gracefully.
13112
13113         * expression.cs (Invocation.BetterFunction): Handle the case when we 
13114         have a params method with no fixed arguments and a call is made with no
13115         arguments.
13116
13117 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
13118
13119         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
13120         the verbatim-string-literal
13121
13122         * support.cs (InternalParameters.ParameterModifier): handle null
13123         fixed parameters.
13124         (InternalParameters.ParameterType): ditto.
13125
13126         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
13127         duplicating the name of the variable parameter.
13128         (GetParameterByName): Fix bug where we were not looking up array
13129         paramters if they were the only present (thanks Paolo!).
13130         (GetParameterInfo): We only have an empty set of types if both
13131         fixed and array are set to null.
13132         (GetParameterInfo-idx): Handle FixedParameter == null
13133
13134         * cs-parser.jay: Handle the case where there is no catch
13135         statements (missing null test).
13136
13137 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
13138
13139         * driver.cs (MainDriver): Be conservative on our command line
13140         handling.
13141
13142         Catch DirectoryNotFoundException when calling GetFiles.
13143
13144         (SplitPathAndPattern): Used to split the input specification into
13145         a path and a pattern that we can feed to Directory.GetFiles.
13146
13147 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
13148
13149         * statement.cs (Fixed): Implement the last case of the Fixed
13150         statement (string handling).
13151
13152         * expression.cs (StringPtr): New class used to return a char * to
13153         a string;  Used by the Fixed statement.
13154
13155         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
13156
13157         * expression.cs (Binary.ResolveOperator): Remove redundant
13158         MemberLookup pn parent type.
13159         Optimize union call, we do not need a union if the types are the same.
13160         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
13161         type.
13162
13163         Specialize the use of MemberLookup everywhere, instead of using
13164         the default settings. 
13165
13166         (StackAlloc): Implement stackalloc keyword.
13167
13168         * cs-parser.jay: Add rule to parse stackalloc.
13169
13170         * driver.cs: Handle /h, /help, /?
13171
13172         * expression.cs (MakeByteBlob): Removed the hacks we had in place
13173         before we supported unsafe code.
13174
13175         * makefile: add --unsafe to the self compilation of mcs.
13176
13177 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
13178
13179         * expression.cs (PointerArithmetic): New class that is used to
13180         perform pointer arithmetic.
13181         (Binary.Resolve): Handle pointer arithmetic
13182         Handle pointer comparission.
13183         (ArrayPtr): Utility expression class that is used to take the
13184         address of an array.
13185
13186         (ElementAccess): Implement array access for pointers
13187
13188         * statement.cs (Fixed): Implement fixed statement for arrays, we
13189         are missing one more case before we are done.
13190
13191         * expression.cs (Indirection): Implement EmitAssign and set the
13192         ExprClass to Variable.  This allows pointer dereferences to be
13193         treated as variables, and to have values assigned to them.
13194
13195         * ecore.cs (Expression.StoreFromPtr): New utility function to
13196         store values dereferencing.
13197
13198 2002-02-20  Ravi Pratap  <ravi@ximian.com>
13199
13200         * expression.cs (Binary.ResolveOperator): Ensure that we are
13201         not trying to operate on a void type - this fixes the reported
13202         bug.
13203
13204         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
13205         the parent implementation is sealed.
13206
13207         * ../errors/cs0239.cs : Add.
13208
13209         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
13210
13211         * typemanager.cs (unverifiable_code_type): Corresponds to 
13212         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
13213         which have unsafe code in them.
13214
13215         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
13216         unsafe context.
13217
13218 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
13219
13220         * cs-tokenizer.cs: Add support for @"litreal strings"
13221
13222         Make tokenizer accept pre-processor directives
13223         on any column (remove the old C-like limitation). 
13224
13225         * rootcontext.cs (EmitCode): Emit any global attributes.
13226         (AddGlobalAttributes): Used to keep track of assembly attributes. 
13227
13228         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
13229
13230         * cs-parser.jay: Add support for global attributes.  
13231
13232 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
13233
13234         * expression.cs (Indirection): New helper class.  Unary will
13235         create Indirection classes to be able to implement the
13236         IMemoryLocation interface on it.
13237
13238 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
13239
13240         * cs-parser.jay (fixed_statement): reference the right statement.
13241
13242         * statement.cs (Fixed.Emit): Finish implementing the fixed
13243         statement for the &x case.
13244
13245 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
13246
13247         * class.cs (Property.Define, Method.Define): Remove newslot when
13248         `implementing'.  
13249
13250         * modifiers.cs: My use of NewSlot when `Abstract' was set was
13251         wrong.  NewSlot should only be used if the `new' keyword is present.
13252
13253         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
13254         locating our system dir.  Sorry about this.
13255
13256 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
13257
13258         * driver.cs (GetSystemDir): Compute correctly the location of our
13259         system assemblies.  I was using the compiler directory instead of
13260         the library directory.
13261
13262 2002-02-13  Ravi Pratap  <ravi@ximian.com>
13263
13264         * expression.cs (BetterFunction): Put back in what Miguel commented out
13265         since it is the correct fix. The problem is elsewhere ;-)
13266
13267         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
13268         parameters of the parms method are themselves compatible or not !
13269
13270         (StandardConversionExists): Fix very dangerous bug where we were forgetting
13271         to check that a class implements an interface before saying that an implicit
13272         conversion was allowed. Use ImplementsInterface to do the checking.
13273
13274 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
13275
13276         * class.cs (Method.Define): Track whether we are an explicit
13277         implementation or not.  And only call DefineMethodOverride if we
13278         are an explicit implementation.
13279
13280         (Property.DefineMethod): Ditto.
13281
13282 2002-02-11  Ravi Pratap  <ravi@ximian.com>
13283
13284         * expression.cs (BetterFunction): Catch hideous bug which was
13285          preventing us from detecting ambiguous calls due to implicit casts i.e
13286         cs0121.
13287
13288 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
13289
13290         * support.cs (Pair): Remove un-needed method.  I figured why I was
13291         getting the error in cs-parser.jay, the variable in a foreach loop
13292         is readonly, and the compiler does not really treat this as a variable.
13293
13294         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
13295         instead of EQUALS in grammar.  
13296
13297         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
13298
13299         * expression.cs (Unary.DoResolve): Check whether the argument is
13300         managed or not.
13301
13302 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
13303
13304         * support.cs: Api for Pair to set a value.  Despite the fact that
13305         the variables are public the MS C# compiler refuses to compile
13306         code that accesses the field if the variable is part of a foreach
13307         statement. 
13308
13309         * statement.cs (Fixed): Begin implementation of the fixed
13310         statement.
13311
13312         (Block.AddVariable): Return the VariableInfo on success and null
13313         on failure instead of true/false. 
13314
13315         * cs-parser.jay (foreach): Catch errors on variables already
13316         defined (we were ignoring this value before) and properly unwind
13317         the block hierarchy
13318
13319         (fixed_statement): grammar for the fixed statement.
13320
13321 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
13322
13323         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
13324         pointer types to be incretemented.
13325
13326         (SizeOf): Implement.
13327
13328         * cs-parser.jay (pointer_member_access): Implement
13329         expr->IDENTIFIER production.
13330
13331         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
13332         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
13333         on safe contexts.
13334
13335         (Unary): Implement indirection.
13336
13337         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
13338         use in non-unsafe context).
13339
13340         (SimpleName.DoResolve): Check for pointers in field access on safe
13341         contexts. 
13342
13343         (Expression.LoadFromPtr): Factor the load-indirect code in this
13344         function.  This was duplicated in UnboxCast and ParameterReference
13345
13346 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
13347
13348         * expression.cs (ComposedCast): report an error if a pointer cast
13349         is used in a safe region.
13350
13351         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
13352         pointer type casts in unsafe context.
13353
13354         * codegen.cs (EmitContext): Set up IsUnsafe.
13355
13356         * cs-parser.jay (non_expression_type): Add productions for pointer
13357         casts. 
13358
13359         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
13360         code.  We should not use force into static mode if the method is
13361         not virtual.  Fixes bug in MIS
13362
13363         * statement.cs (Do.Emit, While.Emit, For.Emit,
13364         Statement.EmitBoolExpression): Add support to Do and While to
13365         propagate infinite loop as `I do return' semantics.
13366
13367         Improve the For case to also test for boolean constants.
13368
13369         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
13370         to the list of attributes we can add.
13371
13372         Remove `EmitContext' argument.
13373
13374         * class.cs (Method.Define): Apply parameter attributes.
13375         (Constructor.Define): Apply parameter attributes.
13376         (MethodCore.LabelParameters): Move here the core of labeling
13377         parameters. 
13378
13379         * support.cs (ReflectionParameters.ParameterModifier,
13380         InternalParameters.ParameterModifier): Use IsByRef on the type and
13381         only return the OUT bit for these parameters instead of in/out/ref
13382         flags.
13383
13384         This is because I miss-understood things.  The ParameterInfo.IsIn
13385         and IsOut represent whether the parameter has the [In] and [Out]
13386         attributes set.  
13387
13388 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
13389
13390         * ecore.cs (FieldExpr.Emit): Release temporaries.
13391
13392         * assign.cs (LocalTemporary.Release): new function.
13393
13394         * codegen.cs (EmitContext.GetTemporaryStorage,
13395         EmitContext.FreeTemporaryStorage): Rework the way we deal with
13396         temporary storage.  Now we can "put back" localbuilders when we
13397         are done with them
13398
13399 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
13400
13401         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
13402         need to make a copy of the variable to generate verifiable code.
13403
13404 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
13405
13406         * driver.cs: Compute dynamically the system directory.
13407
13408         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
13409         Slower, but more generally useful.  Used by the abstract
13410         registering implementation. 
13411
13412         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
13413         the rules for the special rule on Type/instances.  First check if
13414         we have the same name, and if so, try that special static path
13415         rather than the instance path.
13416
13417 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
13418
13419         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
13420         for, while and if.
13421
13422         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
13423         Enum, ValueType, Delegate or Array for non-corlib compiles.
13424
13425         * cs-tokenizer.cs: Catch long identifiers (645)
13426
13427         * typemanager.cs (IndexerPropetyName): Ravi never tested this
13428         piece of code.
13429
13430         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
13431         fix, we were returning too early, so we were not registering
13432         pending methods from abstract classes.
13433
13434         Do not register pending methods if the class is abstract.
13435
13436         * expression.cs (Conditional.DoResolve): Report circular implicit
13437         conversions when we neecd to compute it for conditional
13438         expressions. 
13439
13440         (Is.DoResolve): If the expression is always of the provided type,
13441         flag warning 183.  If the expression can not ever be of the
13442         provided type flag warning 184.
13443
13444         * class.cs: Catch 169 as well.
13445
13446         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
13447         read. 
13448
13449 2002-01-18  Nick Drochak  <ndrochak@gol.com>
13450
13451         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
13452
13453 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
13454
13455         * interface.cs: (PopulateMethod): Check for pointers being defined
13456         only if the unsafe context is active.
13457         (PopulateProperty): ditto.
13458         (PopulateIndexer): ditto.
13459
13460         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
13461         specified.  If pointers are present, make sure that they are
13462         present in an unsafe context.
13463         (Constructor, Constructor.Define): ditto.
13464         (Field, Field.Define): ditto.
13465         (Property, Property.Define): ditto.
13466         (Event, Event.Define): ditto.
13467
13468         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
13469         hashtable if there are classes or structs defined.
13470
13471         * expression.cs (LocalVariableReference.DoResolve): Simplify this
13472         code, as the constant resolution moved.
13473
13474         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
13475         the metadata, so we can flag error 133. 
13476
13477         * decl.cs (MemberCore.UnsafeOK): New function to test that a
13478         pointer is being declared in an unsafe context.
13479
13480 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
13481
13482         * modifiers.cs (Modifiers.Check): Require a Location argument.
13483         Report error 227 for Unsafe use.
13484
13485         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
13486
13487         * statement.cs (For.Emit): If the test is null, then report that
13488         we do `return', as we wont reach anything afterwards.
13489
13490         (Switch.SwitchGoverningType): Track the expression that matched
13491         the conversion.
13492
13493         * driver.cs: Allow negative numbers as an error code to flag.
13494
13495         * cs-parser.jay: Handle 1551.
13496
13497         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
13498
13499 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
13500
13501         * cs-parser.jay: Report 1518 (type declaration can only contain
13502         class, struct, interface, enum or delegate)
13503
13504         (switch_label): Report 1523 (keywords `case' or `default' must
13505         preced code)
13506
13507         (opt_switch_sections): Report 1522 (empty switch)
13508
13509         * driver.cs: Report 1515 (response file specified multiple times)
13510         Report 1516 (Source file specified multiple times).
13511
13512         * expression.cs (Argument.Resolve): Signal 1510
13513
13514         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
13515         access not allowed in static code)
13516
13517 2002-01-11  Ravi Pratap  <ravi@ximian.com>
13518
13519         * typemanager.cs (IsPointerType): Utility method which we are going
13520         to need a lot.
13521
13522         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
13523         the object type, so we take care of that.
13524
13525         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
13526
13527         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
13528         added to non-params parameters :-)
13529
13530         * typemanager.cs (CSharpName): Include 'void' type too. 
13531
13532         (void_ptr_type): Include in the set of core types.
13533
13534         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
13535         duplicating code.
13536
13537         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
13538         an unsafe context.
13539
13540         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
13541         completely forgotten about it.
13542
13543 2002-01-10  Ravi Pratap  <ravi@ximian.com>
13544
13545         * cs-parser.jay (pointer_type): Add. This begins our implementation
13546         of parsing rules for unsafe code.
13547
13548         (unsafe_statement): Implement.
13549
13550         (embedded_statement): Modify to include the above.
13551
13552         * statement.cs (Unsafe): Implement new class for unsafe blocks.
13553
13554         * codegen.cs (EmitContext.InUnsafe): Add. This determines
13555         if the current context is an unsafe one.
13556
13557         * cs-parser.jay (local_variable_pointer_type): Since local variable types
13558         are handled differently, we need separate rules for them.
13559
13560         (local_variable_declaration): Update to use local_variable_pointer_type
13561         to allow variable declarations of unmanaged pointer types.
13562
13563         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
13564         in unsafe contexts.
13565
13566         * ../errors/cs0214.cs : Add.
13567
13568 2002-01-16  Nick Drochak  <ndrochak@gol.com>
13569
13570         * makefile: remove 'response' file when cleaning.
13571
13572 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
13573
13574         * cs-parser.jay: Report 1524.
13575
13576 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
13577
13578         * typemanager.cs (RegisterMethod): drop checking if we have
13579         registered this from here
13580
13581 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
13582
13583         * class.cs (Method.EmitDestructor): Implement calling our base
13584         destructor. 
13585
13586         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
13587         value of InFinally.
13588
13589         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
13590         this routine and will wrap the call in a try/catch block.  Deal
13591         with the case.
13592
13593 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
13594
13595         * ecore.cs (Expression.MemberLookup): instead of taking a
13596         parameter `same_type' that was used to tell whether we could
13597         access private members we compute our containing type from the
13598         EmitContext.
13599
13600         (FieldExpr): Added partial support for volatile fields.  This does
13601         not work for volatile fields exposed from assemblies, as I can not
13602         figure out how to extract the modreq from it.
13603
13604         Updated all the source files to use this.
13605
13606         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
13607         because it is referenced by MemberLookup very often. 
13608
13609 2002-01-09  Ravi Pratap  <ravi@ximian.com>
13610
13611         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
13612         TypeBuilder.GetCustomAttributes to retrieve what we need.
13613
13614         Get rid of redundant default_member_attr_type as this is the same as
13615         default_member_type which already exists.
13616
13617         * interface.cs, attribute.cs : Update accordingly.
13618
13619 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
13620
13621         * typemanager.cs: Enable IndexerPropertyName again.  It does not
13622         work for TYpeBuilders though.  Ravi, can you please fix this?
13623
13624         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
13625
13626         * expression.cs (Argument.Emit): Handle the case of ref objects
13627         being passed to ref functions;  
13628
13629         (ParameterReference.EmitLoad): Loads the content of the pointer
13630         without dereferencing.
13631
13632 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
13633
13634         * cs-tokenizer.cs: Implemented the pre-processing expressions.
13635
13636 2002-01-08  Ravi Pratap  <ravi@ximian.com>
13637
13638         * class.cs (Indexer.DefineMethod): Incorporate the interface
13639         type in the name of the method if we are doing explicit interface
13640         implementation.
13641
13642         * expression.cs (ConversionExists): Remove as it is completely obsolete.
13643
13644         (BetterConversion): Fix extremely trivial bug where we were referring to
13645         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
13646         again !
13647
13648         * ../errors/bug16.cs : Add although we have fixed it.
13649
13650 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
13651
13652         * expression.cs (BaseIndexer): Begin implementation.
13653
13654         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
13655
13656         * cs-parser.jay (indexer_declarator): Use qualified_identifier
13657         production directly to remove a shift/reduce, and implement
13658         explicit interface implementation.
13659
13660         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
13661         after a floating point suffix.
13662
13663         * expression.cs (DoNumericPromotions): Improved the conversion for
13664         uint/uint.  If we have a constant, we avoid doing a typecast to a
13665         larger type.
13666
13667         * class.cs (Indexer): Implement explicit interface implementation
13668         for indexers.
13669
13670 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
13671
13672         * class.cs: make the default instance constructor public and hidebysig.
13673
13674 2001-01-03  Ravi Pratap  <ravi@ximian.com>
13675
13676         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
13677         so we can call it from elsewhere.
13678
13679         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
13680         we emit it internally if the class has a defined indexer; otherwise the user
13681         emits it by decorating the class definition with the DefaultMemberAttribute.
13682
13683         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
13684         attribute is not used on a type which defines an indexer.
13685
13686         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
13687         character when we skip whitespace.
13688
13689         * ../errors/cs0646.cs : Add.
13690
13691 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
13692
13693         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
13694         again. 
13695
13696         * makefile: Add practical target `mcs3.exe' which builds the third
13697         generation compiler. 
13698
13699         * expression.cs (New): Fix structures constructor calling.
13700
13701         * class.cs (Property, Method, Indexer): Emit Final flag on the
13702         method if we are an interface implementation and we are not
13703         abstract. 
13704
13705         * ecore.cs (PropertyExpr): New public field `IsBase', tells
13706         whether this property is referencing a `base' method.
13707
13708         * expression.cs (Invocation.EmitCall): take an extra argument:
13709         is_base, this is used to determine whether the `call' or
13710         `callvirt' opcode should be used.
13711
13712
13713         * delegate.cs: update EmitCall.
13714
13715         * class.cs (Method.Define): Set NewSlot for the cases where we are
13716         not implementing an interface method.
13717
13718         (Property.Define): ditto.
13719
13720 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
13721
13722         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
13723         'r'.  Allows mcs to parse itself fully.
13724
13725 2002-01-02  Ravi Pratap  <ravi@ximian.com>
13726
13727         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
13728         of the number of initializers that require the InitializeArray method.
13729
13730         (CheckIndices): Store the Expression in all cases - not the plain value. Also
13731         update the above field where necessary.
13732
13733         (MakeByteBlob): Update accordingly.
13734
13735         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
13736         greater than 2.
13737
13738         (EmitDynamicInitializers): Update in accordance with the new optimization.
13739
13740         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
13741         same OpCode applies.
13742
13743         * cs-parser.jay : Fix some glaring errors I introduced.
13744
13745 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
13746
13747         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
13748         so that we can check for name clashes there too.
13749
13750         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
13751         for interface indexers.
13752
13753         * interfaces.cs (Define): Emit the default member attribute.
13754
13755         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
13756         variable was being referred to while setting the value ;-)
13757
13758 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
13759
13760         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
13761         byte-by-byte information when we know the data is zero.
13762
13763         Make the block always a multiple of 4, because
13764         DefineInitializedData has a bug.
13765
13766         * assign.cs: Fix, we should assign from the temporary, not from
13767         the source. 
13768
13769         * expression.cs (MakeByteBlob): Fix my incorrect code.
13770
13771 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
13772
13773         * typemanager.cs (EnumToUnderlying): This function is used to get
13774         the underlying type from an enumeration, because it does not
13775         always work. 
13776
13777         * constant.cs: Use the I4_S form for values between -128 and 127.
13778
13779         * statement.cs (Block.LookupLabel): Looks up a label.
13780         (Block): Drop support for labeled blocks.
13781
13782         (LabeledStatement): New kind of statement that represents a label
13783         only.
13784
13785         (Goto): Finally implement this bad boy.
13786
13787         * cs-parser.jay: Update to reflect new mechanism to implement
13788         labels.
13789
13790 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
13791
13792         * codegen.cs (EmitContext.This): a codegen property that keeps the
13793         a single instance of this instead of creating many different this
13794         instances. 
13795
13796         * delegate.cs (Delegate.DoResolve): Update to use the property;
13797
13798         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
13799
13800         * expression.cs (BaseAccess.DoResolve): Ditto.
13801
13802 2001-12-29  Ravi Pratap  <ravi@ximian.com>
13803
13804         * typemanager.cs (methodimpl_attr_type): Add to hold the type
13805         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
13806
13807         (InitCoreTypes): Update accordingly.
13808
13809         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
13810         so we can quickly store the state.
13811
13812         (ApplyAttributes): Set the correct implementation flags
13813         for InternalCall methods.
13814
13815 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
13816
13817         * expression.cs (EmitCall): if a method is not virtual, then do
13818         not use callvirt on it.
13819
13820         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
13821         user defined stuff) requires the use of stobj, which takes an
13822         address on the stack instead of an array and an index.  So emit
13823         the Ldelema operation for it.
13824
13825         (EmitStoreOpcode): Use stobj for valuetypes.
13826
13827         (UnaryMutator.EmitCode): Use the right 1 value depending on
13828         whether we are dealing with int64/uint64, float or doubles.
13829
13830         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
13831         constructors that I implemented last night.
13832
13833         (Constructor.IsDefault): Fix to work properly for static
13834         constructors.
13835
13836         * cs-parser.jay (CheckDef): report method signature errors.
13837         Update error number 103 to be 132.
13838
13839         * decl.cs: New AdditionResult enumeration value: MethodExists.
13840         Although we do this check for methods later on in the semantic
13841         analysis, catching repeated default constructors is so easy that
13842         we catch these here. 
13843
13844         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
13845         promotions code.
13846
13847         (ParameterReference.EmitAssign, Emit): handle
13848         bools as bytes.
13849
13850         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
13851         (ArrayAccess.EmitStoreOpcode): ditto.
13852
13853         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
13854
13855         * expression.cs (MakeByteBlob): Complete all the missing types
13856         (uint, short, ushort, byte, sbyte)
13857
13858         * class.cs: Only init instance field initializers on instance
13859         constructors. 
13860
13861         Rename `constructors' to instance_constructors. 
13862
13863         (TypeContainer.AddConstructor): Only add constructors to the list
13864         if it is not static.
13865
13866         Make sure that we handle default_static_constructor independently
13867         everywhere where we handle instance_constructors
13868
13869 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
13870
13871         * class.cs: Do not lookup or create a base initializer for a
13872         static constructor.
13873
13874         (ConstructorInitializer.Resolve): use the proper type to lookup
13875         for constructors.
13876
13877         * cs-parser.jay: Report error 1585 (modifiers between type and name).
13878
13879         * enum.cs, interface.cs: Remove CloseType, this is taken care by
13880         in DeclSpace. 
13881
13882         * decl.cs: CloseType is now an virtual method, the default
13883         implementation just closes this type.
13884
13885 2001-12-28  Ravi Pratap  <ravi@ximian.com>
13886
13887         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
13888         to PreserveSig by default. Also emit HideBySig on such methods.
13889
13890         Basically, set the defaults to standard values.
13891
13892         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
13893         argument, if candidate is better, it can't be worse than the best !
13894
13895         (Invocation): Re-write bits to differentiate between methods being
13896         applicable in their expanded form and their normal form - for params
13897         methods of course.
13898
13899         Get rid of use_standard everywhere as only standard conversions are allowed
13900         in overload resolution. 
13901
13902         More spec conformance.
13903
13904 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
13905
13906         * driver.cs: Add --timestamp, to see where the compiler spends
13907         most of its time.
13908
13909         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
13910         `this' in static code.
13911
13912         (SimpleName.DoResolve): Implement in terms of a helper function
13913         that allows static-references to be passed upstream to
13914         MemberAccess.
13915
13916         (Expression.ResolveWithSimpleName): Resolve specially simple
13917         names when called by MemberAccess to implement the special
13918         semantics. 
13919
13920         (Expression.ImplicitReferenceConversion): Handle conversions from
13921         Null to reference types before others, as Null's type is
13922         System.Object. 
13923
13924         * expression.cs (Invocation.EmitCall): Handle the special case of
13925         calling methods declared on a reference type from a ValueType
13926         (Base classes System.Object and System.Enum)
13927
13928         (MemberAccess.Resolve): Only perform lookups on Enumerations if
13929         the left hand side is a TypeExpr, not on every enumeration. 
13930
13931         (Binary.Resolve): If types are reference types, then do a cast to
13932         object on operators != and == of both arguments.
13933
13934         * typemanager.cs (FindMembers): Extract instance and static
13935         members if requested.
13936
13937         * interface.cs (PopulateProperty): Use void_type instead of null
13938         as the return type for the setter method.
13939
13940         (PopulateIndexer): ditto.
13941
13942 2001-12-27  Ravi Pratap  <ravi@ximian.com>
13943
13944         * support.cs (ReflectionParameters): Fix minor bug where we
13945         were examining the wrong parameter for the ParamArray attribute.
13946
13947         Cope with requests for the type of the parameter at position
13948         greater than the params parameter's. We now return the element
13949         type of the params array as that makes more sense.
13950
13951         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
13952         accordingly as we no longer have to extract the element type
13953         ourselves.
13954
13955         (Invocation.OverloadResolve): Update.
13956
13957 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
13958
13959         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
13960         against IEnumerator, test whether the return value is a descendant
13961         of the IEnumerator interface.
13962
13963         * class.cs (Indexer.Define): Use an auxiliary method to implement
13964         the other bits of the method definition.  Begin support for
13965         explicit interface implementation.
13966
13967         (Property.DefineMethod): Use TypeManager.void_type instead of null
13968         for an empty return value.
13969
13970 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
13971
13972         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
13973         dealing with a FieldExpr which is composed of a FieldBuilder, in
13974         the code path we did extract the constant, but we should have
13975         obtained the underlying value to be able to cast it (otherwise we
13976         end up in an infinite loop, this is what Ravi was running into).
13977
13978         (ArrayCreation.UpdateIndices): Arrays might be empty.
13979
13980         (MemberAccess.ResolveMemberAccess): Add support for section
13981         14.5.4.1 that deals with the special case of E.I when E is a type
13982         and something else, that I can be a reference to a static member.
13983
13984         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
13985         handle a particular array type to create byte blobs, it is just
13986         something we dont generate byteblobs for.
13987
13988         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
13989         arguments. 
13990
13991         * location.cs (Push): remove the key from the hashtable that we
13992         are about to add.   This happens for empty files.
13993
13994         * driver.cs: Dispose files after we have parsed them.
13995
13996         (tokenize): new function that only runs the tokenizer on its
13997         input, for speed testing.
13998
13999 2001-12-26  Ravi Pratap  <ravi@ximian.com>
14000
14001         * class.cs (Event.Define): Define the private field only if there
14002         are no accessors defined.
14003
14004         * expression.cs (ResolveMemberAccess): If there is no associated
14005         field with the event, that means we have an event defined with its
14006         own accessors and we should flag error cs0070 since transforming
14007         ourselves into a field is not valid in that case.
14008
14009         * ecore.cs (SimpleName.DoResolve): Same as above.
14010
14011         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
14012         and charset to sane values.
14013
14014 2001-12-25  Ravi Pratap  <ravi@ximian.com>
14015
14016         * assign.cs (DoResolve): Perform check on events only if they 
14017         are being accessed outside the declaring type.
14018
14019         * cs-parser.jay (event_declarations): Update rules to correctly
14020         set the type of the implicit parameter etc.
14021
14022         (add_accessor, remove_accessor): Set current local parameters.
14023
14024         * expression.cs (Binary): For delegate addition and subtraction,
14025         cast the return value from the method into the appropriate delegate
14026         type.
14027
14028 2001-12-24  Ravi Pratap  <ravi@ximian.com>
14029
14030         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
14031         of these as the workaround is unnecessary.
14032
14033         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
14034         delegate data - none of that is needed at all.
14035
14036         Re-write bits to extract the instance expression and the delegate method
14037         correctly.
14038
14039         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
14040         on delegates too.
14041
14042         * attribute.cs (ApplyAttributes): New method to take care of common tasks
14043         of attaching attributes instead of duplicating code everywhere.
14044
14045         * everywhere : Update code to do attribute emission using the above method.
14046
14047 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
14048
14049         * expression.cs (IsParamsMethodApplicable): if there are not
14050         parameters, return immediately.
14051
14052         * ecore.cs: The 0 literal can be implicity converted to an enum
14053         type. 
14054
14055         (SimpleName.DoResolve): First lookup the type, then lookup the
14056         members. 
14057
14058         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
14059         want to get its address.  If the InstanceExpression is not
14060         addressable, store the result in a temporary variable, then get
14061         the address of it.
14062
14063         * codegen.cs: Only display 219 errors on warning level or above. 
14064
14065         * expression.cs (ArrayAccess): Make it implement the
14066         IMemoryLocation interface.
14067
14068         (Binary.DoResolve): handle the operator == (object a, object b)
14069         and operator != (object a, object b) without incurring into a
14070         BoxedCast (because 5 != o should never be performed).
14071
14072         Handle binary enumerator operators.
14073
14074         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
14075         value type, otherwise use Ldelem_ref.
14076
14077         Use precomputed names;
14078
14079         (AddressOf): Implement address of
14080
14081         * cs-parser.jay (labeled_statement): Fix recursive block
14082         addition by reworking the production.
14083
14084         * expression.cs (New.DoEmit): New has a special case:
14085                 
14086                  If we are dealing with a ValueType, we have a few
14087                  situations to deal with:
14088                 
14089                     * The target of New is a ValueType variable, that is
14090                       easy, we just pass this as the variable reference
14091                 
14092                     * The target of New is being passed as an argument,
14093                       to a boxing operation or a function that takes a
14094                       ValueType.
14095                 
14096                       In this case, we need to create a temporary variable
14097                       that is the argument of New.
14098
14099
14100 2001-12-23  Ravi Pratap  <ravi@ximian.com>
14101
14102         * rootcontext.cs (LookupType): Check that current_type is not null before
14103         going about looking at nested types.
14104
14105         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
14106         not implement the IAssignMethod interface any more.
14107
14108         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
14109         where we tranform them into FieldExprs if they are being resolved from within
14110         the declaring type.
14111
14112         * ecore.cs (SimpleName.DoResolve): Do the same here.
14113
14114         * assign.cs (DoResolve, Emit): Clean up code considerably. 
14115
14116         * ../errors/bug10.cs : Add.
14117
14118         * ../errors/cs0070.cs : Add.
14119
14120         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
14121
14122         * assign.cs : Get rid of EventIsLocal everywhere.
14123
14124 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
14125
14126         * ecore.cs (ConvertIntLiteral): finished the implementation.
14127
14128         * statement.cs (SwitchLabel): Convert the value we are using as a
14129         key before looking up the table.
14130
14131 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
14132
14133         * codegen.cs (EmitTopBlock): Require a Location argument now.
14134
14135         * cs-parser.jay (constructor_declarator): We need to setup
14136         current_local_parameters before we parse the
14137         opt_constructor_initializer, to allow the variables to be bound
14138         to the constructor arguments.
14139
14140         * rootcontext.cs (LookupType): First lookup nested classes in our
14141         class and our parents before we go looking outside our class.
14142
14143         * expression.cs (ConstantFold): Extract/debox the values at the
14144         beginnning. 
14145
14146         * rootcontext.cs (EmitCode): Resolve the constants first before we
14147         resolve the types.  This is not really needed, but it helps debugging.
14148
14149         * statement.cs: report location.
14150
14151         * cs-parser.jay: pass location to throw statement.
14152
14153         * driver.cs: Small bug fix.
14154
14155         * report.cs: Updated format to be 4-zero filled digits.
14156
14157 2001-12-22  Ravi Pratap  <ravi@ximian.com>
14158
14159         * expression.cs (CheckIndices): Fix minor bug where the wrong
14160         variable was being referred to ;-)
14161
14162         (DoEmit): Do not call EmitStaticInitializers when the 
14163         underlying type is System.Object.
14164
14165 2001-12-21  Ravi Pratap  <ravi@ximian.com>
14166
14167         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
14168         and do the usual workaround for SRE.
14169
14170         * class.cs (MyEventBuilder.EventType): New member to get at the type
14171         of the event, quickly.
14172
14173         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
14174
14175         * assign.cs (Assign.DoResolve): Handle the case when the target
14176         is an EventExpr and perform the necessary checks.
14177
14178         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
14179         interface.
14180
14181         (SimpleName.MemberStaticCheck): Include check for EventExpr.
14182
14183         (EventExpr): Set the type in the constructor itself since we 
14184         are meant to be born fully resolved.
14185
14186         (EventExpr.Define): Revert code I wrote earlier.
14187                 
14188         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
14189         instance expression is null. The instance expression is a This in that case
14190         or a null, depending on whether it is a static method or not.
14191
14192         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
14193         refers to more than one method.
14194
14195         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
14196         and accordingly flag errors.
14197
14198 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
14199
14200         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
14201
14202 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
14203
14204         * location.cs (ToString): Provide useful rutine.
14205
14206 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
14207
14208         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
14209         objects, return the actual integral boxed.
14210
14211         * statement.cs (SwitchLabel): define an ILLabel for each
14212         SwitchLabel. 
14213
14214         (Switch.CheckSwitch): If the value is a Literal, extract
14215         the underlying literal.
14216
14217         Also in the unused hashtable we had, add the SwitchLabel so we can
14218         quickly look this value up.
14219
14220         * constant.cs: Implement a bunch of new constants.  Rewrite
14221         Literal based on this.  Made changes everywhere to adapt to this.
14222
14223         * expression.cs (Expression.MakeByteBlob): Optimize routine by
14224         dereferencing array only once, and also copes with enumrations.
14225
14226         bytes are two bytes wide, not one.
14227
14228         (Cast): Perform constant conversions.
14229
14230         * ecore.cs (TryImplicitIntConversion): Return literals instead of
14231         wrappers to the literals here.
14232
14233         * expression.cs (DoNumericPromotions): long literals can converted
14234         to ulong implicity (this is taken care of elsewhere, but I was
14235         missing this spot).
14236
14237         * ecore.cs (Expression.Literalize): Make the return type Literal,
14238         to improve type checking.
14239
14240         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
14241
14242 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
14243
14244         * literal.cs: Revert code from ravi that checked the bounds.  The
14245         bounds are sane by the definition of the type itself. 
14246
14247         * typemanager.cs: Fix implementation of ImplementsInterface.  We
14248         need to actually look up in our parent hierarchy for interfaces
14249         implemented. 
14250
14251         * const.cs: Use the underlying type for enumerations
14252
14253         * delegate.cs: Compute the basename for the delegate creation,
14254         that should fix the delegate test case, and restore the correct
14255         Type Lookup semantics in rootcontext
14256
14257         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
14258         referencing a nested type with the Reflection API is using the "+"
14259         sign. 
14260
14261         * cs-parser.jay: Do not require EOF token at the end.
14262
14263 2001-12-20  Ravi Pratap  <ravi@ximian.com>
14264
14265         * rootcontext.cs (LookupType): Concatenate type names with
14266         a '.' instead of a '+' The test suite passes again.
14267
14268         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
14269         field of the enumeration.
14270
14271         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
14272         the case when the member is an EventExpr.
14273
14274         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
14275         static has an associated instance expression.
14276
14277         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
14278
14279         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
14280
14281         * class.cs (Event.Define): Register event and perform appropriate checks
14282         for error #111.
14283
14284         We define the Add and Remove methods even if the use provides none because
14285         in that case, we provide default implementations ourselves.
14286
14287         Define a private field of the type of the event. This is done by the CSC compiler
14288         and we should be doing it too ;-)
14289
14290         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
14291         More methods we use in code we generate.
14292
14293         (multicast_delegate_type, delegate_type): Two separate types since the distinction
14294         is important.
14295
14296         (InitCoreTypes): Update accordingly for the above.
14297
14298         * class.cs (Event.Emit): Generate code for default accessors that we provide
14299
14300         (EmitDefaultMethod): Do the job in the above.
14301
14302         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
14303         appropriate place.
14304
14305 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
14306
14307         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
14308         builders even if we were missing one.
14309
14310         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
14311         pass the Basename as our class name instead of the Name.  The
14312         basename will be correctly composed for us.
14313
14314         * parameter.cs (Paramters): Now takes a Location argument.
14315
14316         * decl.cs (DeclSpace.LookupType): Removed convenience function and
14317         make all the code call directly LookupType in RootContext and take
14318         this chance to pass the Location information everywhere.
14319
14320         * Everywhere: pass Location information.
14321
14322 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
14323
14324         * class.cs (Constructor.Define): Updated way of detecting the
14325         length of the parameters.
14326
14327         (TypeContainer.DefineType): Use basename as the type name for
14328         nested types.
14329
14330         (TypeContainer.Define): Do not recursively define types here, as
14331         definition is taken care in order by the RootContext.
14332
14333         * tree.cs: Keep track of namespaces in a per-file basis.
14334
14335         * parameter.cs (Parameter.ComputeSignature): Update to use
14336         DeclSpace. 
14337
14338         (Parameters.GetSignature): ditto.
14339
14340         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
14341         instead of a TypeContainer.
14342
14343         (Interface.SemanticAnalysis): Use `this' instead of our parent to
14344         resolve names.  Because we need to be resolve in our context, not
14345         our parents.
14346
14347         * driver.cs: Implement response files.
14348
14349         * class.cs (TypeContainer.DefineType): If we are defined, do not
14350         redefine ourselves.
14351
14352         (Event.Emit): Emit the code for add/remove handlers.
14353         (Event.Define): Save the MethodBuilders for add/remove.
14354
14355         * typemanager.cs: Use pair here too.
14356
14357         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
14358         DictionaryEntry requires the first argument to be non-null.  
14359
14360         (enum_declaration): Compute full name for registering the
14361         enumeration.
14362
14363         (delegate_declaration): Instead of using
14364         formal_parameter_list, use opt_formal_parameter_list as the list
14365         can be empty.
14366
14367         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
14368         (EventParsing): New property that controls whether `add' and
14369         `remove' are returned as tokens or identifiers (for events);
14370
14371 2001-12-19  Ravi Pratap  <ravi@ximian.com>
14372
14373         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
14374         use MyEventBuilder only and let it wrap the real builder for us.
14375
14376         (MyEventBuilder): Revamp constructor etc.
14377
14378         Implement all operations that we perform on EventBuilder in precisely the same
14379         way here too.
14380
14381         (FindMembers): Update to use the EventBuilder member.
14382
14383         (Event.Emit): Update accordingly.
14384
14385 2001-12-18  Ravi Pratap  <ravi@ximian.com>
14386
14387         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
14388         by calling the appropriate methods.
14389
14390         (GetCustomAttributes): Make stubs as they cannot possibly do anything
14391         useful.
14392
14393         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
14394
14395 2001-12-17  Ravi Pratap  <ravi@ximian.com>
14396
14397         * delegate.cs (Delegate.Populate): Check that the return type
14398         and various parameters types are indeed accessible.
14399
14400         * class.cs (Constructor.Define): Same here.
14401
14402         (Field.Define): Ditto.
14403
14404         (Event.Define): Ditto.
14405
14406         (Operator.Define): Check that the underlying Method defined itself
14407         correctly - so it's MethodBuilder should not be null.
14408
14409         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
14410         expression happens to be null.
14411
14412         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
14413         members but as of now we don't seem to be able to do anything really useful with it.
14414
14415         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
14416         not the EventBuilder.
14417
14418 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
14419
14420         * cs-tokenizer.cs: Add support for defines.
14421         Add support for #if, #elif, #else, #endif
14422
14423         (eval_var): evaluates a variable.
14424         (eval): stubbed for evaluating functions.
14425
14426         * cs-parser.jay: Pass the defines information
14427
14428         * driver.cs: Add --define command line option.
14429
14430         * decl.cs: Move MemberCore here.
14431
14432         Make it the base class for DeclSpace.  This allows us to catch and
14433         report 108 and 109 for everything now.
14434
14435         * class.cs (TypeContainer.Define): Extract all the members
14436         before populating and emit the warning 108 (new keyword required
14437         to override) instead of having each member implement this.
14438
14439         (MemberCore.Define): New abstract method, we will be using this in
14440         the warning reporting engine in Populate.
14441
14442         (Operator.Define): Adjust to new MemberCore protocol. 
14443
14444         * const.cs (Const): This does not derive from Expression, it is a
14445         temporary object we use to create fields, it is a MemberCore. 
14446
14447         * class.cs (Method.Define): Allow the entry point to be in a
14448         specific class.
14449
14450         * driver.cs: Rewrite the argument handler to clean it up a bit.
14451
14452         * rootcontext.cs: Made it just an auxiliary namespace feature by
14453         making everything static.
14454
14455         * driver.cs: Adapt code to use RootContext type name instead of
14456         instance variable.
14457
14458         * delegate.cs: Remove RootContext argument.
14459
14460         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
14461         argument. 
14462
14463         * class.cs (Event.Define): The lookup can fail.
14464
14465         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
14466
14467         * expression.cs: Resolve the this instance before invoking the code.
14468
14469 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
14470
14471         * cs-parser.jay: Add a production in element_access that allows
14472         the thing to become a "type" reference.  This way we can parse
14473         things like "(string [])" as a type.
14474
14475         Note that this still does not handle the more complex rules of
14476         casts. 
14477
14478
14479         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
14480
14481         * ecore.cs: (CopyNewMethods): new utility function used to
14482         assemble the list of methods from running FindMembers.
14483
14484         (MemberLookup): Rework FindMembers so that 
14485
14486 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
14487
14488         * class.cs (TypeContainer): Remove Delegates who fail to be
14489         defined.
14490
14491         * delegate.cs (Populate): Verify that we dont get null return
14492         values.   TODO: Check for AsAccessible.
14493
14494         * cs-parser.jay: Use basename to emit error 574 (destructor should
14495         have the same name as container class), not the full name.
14496
14497         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
14498         possible representation.  
14499
14500         Also implements integer type suffixes U and L.
14501
14502 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
14503
14504         * expression.cs (ArrayCreation.DoResolve): We need to do the
14505         argument resolution *always*.
14506
14507         * decl.cs: Make this hold the namespace.  Hold the root context as
14508         well.
14509         (LookupType): Move here.
14510
14511         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
14512
14513         * location.cs (Row, Name): Fixed the code, it was always returning
14514         references to the first file.
14515
14516         * interface.cs: Register properties defined through interfaces.
14517
14518         * driver.cs: Add support for globbing on the command line
14519
14520         * class.cs (Field): Make it derive from MemberCore as well.
14521         (Event): ditto.
14522
14523 2001-12-15  Ravi Pratap  <ravi@ximian.com>
14524
14525         * class.cs (Event::Define): Check that the type of the event is a delegate
14526         type else flag error #66.
14527
14528         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
14529         same.
14530
14531         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
14532         values of EntryPoint, CharSet etc etc.
14533
14534         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
14535
14536         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
14537         be null and we should ignore this. I am not sure if this is really clean. Apparently,
14538         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
14539         which needs this to do its work.
14540
14541         * ../errors/cs0066.cs : Add.
14542
14543 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
14544
14545         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
14546         helper functions.
14547
14548         * class.cs: (MethodSignature.MethodSignature): Removed hack that
14549         clears out the parameters field.
14550         (MemberSignatureCompare): Cleanup
14551
14552         (MemberCore): New base class used to share code between MethodCore
14553         and Property.
14554
14555         (RegisterRequiredImplementations) BindingFlags.Public requires
14556         either BindingFlags.Instace or Static.  Use instance here.
14557
14558         (Property): Refactored code to cope better with the full spec.
14559
14560         * parameter.cs (GetParameterInfo): Return an empty array instead
14561         of null on error.
14562
14563         * class.cs (Property): Abstract or extern properties have no bodies.
14564
14565         * parameter.cs (GetParameterInfo): return a zero-sized array.
14566
14567         * class.cs (TypeContainer.MethodModifiersValid): Move all the
14568         method modifier validation to the typecontainer so we can reuse
14569         this on properties.
14570
14571         (MethodCore.ParameterTypes): return an empty sized array of types.
14572
14573         (Property.Define): Test property modifier validity.
14574
14575         Add tests for sealed/override too.
14576
14577         (Method.Emit): abstract or extern methods have no bodies.
14578
14579 2001-12-14  Ravi Pratap  <ravi@ximian.com>
14580
14581         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
14582         thing.
14583
14584         (Method::Define, ::Emit): Modify accordingly.
14585
14586         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
14587
14588         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
14589
14590         * makefile: Pass in /unsafe.
14591
14592 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
14593
14594         * class.cs (MakeKey): Kill routine.
14595
14596         * class.cs (TypeContainer.Define): Correctly define explicit
14597         method implementations (they require the full interface name plus
14598         the method name).
14599
14600         * typemanager.cs: Deply the PtrHashtable here and stop using the
14601         lame keys.  Things work so much better.
14602
14603         This of course broke everyone who depended on `RegisterMethod' to
14604         do the `test for existance' test.  This has to be done elsewhere.
14605
14606         * support.cs (PtrHashtable): A hashtable that avoid comparing with
14607         the object stupid Equals method (because, that like fails all over
14608         the place).  We still do not use it.
14609
14610         * class.cs (TypeContainer.SetRequiredInterface,
14611         TypeContainer.RequireMethods): Killed these two routines and moved
14612         all the functionality to RegisterRequiredImplementations.
14613
14614         (TypeContainer.RegisterRequiredImplementations): This routine now
14615         registers all the implementations required in an array for the
14616         interfaces and abstract methods.  We use an array of structures
14617         which can be computed ahead of time to reduce memory usage and we
14618         also assume that lookups are cheap as most classes will not
14619         implement too many interfaces.
14620
14621         We also avoid creating too many MethodSignatures.
14622
14623         (TypeContainer.IsInterfaceMethod): Update and optionally does not
14624         clear the "pending" bit if we find that there are problems with
14625         the declaration.
14626
14627         (TypeContainer.VerifyPendingMethods): Update to report errors of
14628         methods that look like implementations but are not.
14629
14630         (TypeContainer.Define): Add support for explicit interface method
14631         implementation. 
14632
14633 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
14634
14635         * typemanager.cs: Keep track of the parameters here instead of
14636         being a feature of the TypeContainer.
14637
14638         * class.cs: Drop the registration of parameters here, as
14639         InterfaceMethods are also interface declarations.
14640
14641         * delegate.cs: Register methods with the TypeManager not only with
14642         the TypeContainer.  This code was buggy.
14643
14644         * interface.cs: Full registation here.
14645
14646 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
14647
14648         * expression.cs: Remove reducer for binary expressions, it can not
14649         be done this way.
14650
14651         * const.cs: Put here the code that used to go into constant.cs
14652
14653         * constant.cs: Put here the code for constants, this is a new base
14654         class for Literals.
14655
14656         * literal.cs: Make Literal derive from Constant.
14657
14658 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
14659
14660         * statement.cs (Return.Emit): Report error 157 if the user
14661         attempts to return from a finally block.
14662
14663         (Return.Emit): Instead of emitting a return, jump to the end of
14664         the function.
14665
14666         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
14667         LocalBuilder to store the result of the function.  ReturnLabel is
14668         the target where we jump.
14669
14670
14671 2001-12-09  Radek Doulik  <rodo@ximian.com>
14672
14673         * cs-parser.jay: remember alias in current namespace
14674
14675         * ecore.cs (SimpleName::DoResolve): use aliases for types or
14676         namespaces
14677
14678         * class.cs (LookupAlias): lookup alias in my_namespace
14679
14680         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
14681         aliases hashtable
14682         (LookupAlias): lookup alias in this and if needed in parent
14683         namespaces
14684
14685 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
14686
14687         * support.cs: 
14688
14689         * rootcontext.cs: (ModuleBuilder) Made static, first step into
14690         making things static.  I need this to avoid passing the
14691         TypeContainer when calling ParameterType.
14692
14693         * support.cs (InternalParameters.ParameterType): Remove ugly hack
14694         that did string manipulation to compute the type and then call
14695         GetType.  Use Parameter.ParameterType instead.
14696
14697         * cs-tokenizer.cs: Consume the suffix for floating values.
14698
14699         * expression.cs (ParameterReference): figure out whether this is a
14700         reference parameter or not.  Kill an extra variable by computing
14701         the arg_idx during emission.
14702
14703         * parameter.cs (Parameters.GetParameterInfo): New overloaded
14704         function that returns whether a parameter is an out/ref value or not.
14705
14706         (Parameter.ParameterType): The type of the parameter (base,
14707         without ref/out applied).
14708
14709         (Parameter.Resolve): Perform resolution here.
14710         (Parameter.ExternalType): The full type (with ref/out applied).
14711
14712         * statement.cs (Using.Emit, Using.EmitExpression): Implement
14713         support for expressions on the using statement.
14714
14715 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
14716
14717         * statement.cs (Using.EmitLocalVariableDecls): Split the
14718         localvariable handling of the using statement.
14719
14720         (Block.EmitMeta): Keep track of variable count across blocks.  We
14721         were reusing slots on separate branches of blocks.
14722
14723         (Try.Emit): Emit the general code block, we were not emitting it. 
14724
14725         Check the type of the declaration to be an IDisposable or
14726         something that can be implicity converted to it. 
14727
14728         Emit conversions if required.
14729
14730         * ecore.cs (EmptyExpression): New utility class.
14731         (Expression.ImplicitConversionExists): New utility function.
14732
14733 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
14734
14735         * statement.cs (Using): Implement.
14736
14737         * expression.cs (LocalVariableReference): Support read only variables.
14738
14739         * statement.cs: Remove the explicit emit for the Leave opcode.
14740         (VariableInfo): Add a readonly field.
14741
14742 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
14743
14744         * ecore.cs (ConvCast): new class used to encapsulate the various
14745         explicit integer conversions that works in both checked and
14746         unchecked contexts.
14747
14748         (Expression.ConvertNumericExplicit): Use new ConvCast class to
14749         properly generate the overflow opcodes.
14750
14751 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
14752
14753         * statement.cs: The correct type for the EmptyExpression is the
14754         element_type, not the variable type.  Ravi pointed this out.
14755
14756 2001-12-04  Ravi Pratap  <ravi@ximian.com>
14757
14758         * class.cs (Method::Define): Handle PInvoke methods specially
14759         by using DefinePInvokeMethod instead of the usual one.
14760
14761         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
14762         above to do the task of extracting information and defining the method.
14763
14764 2001-12-04  Ravi Pratap  <ravi@ximian.com>
14765
14766         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
14767         of the condition for string type.
14768
14769         (Emit): Move that here. 
14770
14771         (ArrayCreation::CheckIndices): Keep string literals in their expression
14772         form.
14773
14774         (EmitDynamicInitializers): Handle strings appropriately.
14775
14776 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
14777
14778         * codegen.cs (EmitContext): Replace multiple variables with a
14779         single pointer to the current Switch statement.
14780
14781         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
14782         EmitContext.
14783
14784 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
14785
14786         * statement.cs 
14787
14788         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
14789         default'.
14790
14791         (Foreach.Emit): Foreach on arrays was not setting
14792         up the loop variables (for break/continue).
14793
14794         (GotoCase): Semi-implented.
14795
14796 2001-12-03  Ravi Pratap  <ravi@ximian.com>
14797
14798         * attribute.cs (CheckAttribute): Handle system attributes by using
14799         Attribute.GetAttributes to examine information we need.
14800
14801         (GetValidPlaces): Same here.
14802
14803         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
14804
14805         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
14806
14807         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
14808
14809         (Method::Define): Set appropriate flags if we have a DllImport attribute.
14810
14811         (Method::Emit): Handle the case when we are a PInvoke method.
14812
14813 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
14814
14815         * expression.cs: Use ResolveWithSimpleName on compound names.
14816
14817 2001-12-02  Ravi Pratap  <ravi@ximian.com>
14818
14819         * constant.cs (EmitConstant): Make sure we resolve the associated expression
14820         before trying to reduce it.
14821
14822         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
14823
14824         * constant.cs (LookupConstantValue): Implement.
14825
14826         (EmitConstant): Use the above in emitting the constant.
14827
14828         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
14829         that are user-defined by doing a LookupConstantValue on them.
14830
14831         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
14832         too, like above.
14833
14834 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
14835
14836         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
14837
14838         (BaseAccess.DoResolve): Implement.
14839
14840         (MemberAccess.DoResolve): Split this routine into a
14841         ResolveMemberAccess routine that can be used independently
14842
14843 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
14844
14845         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
14846         As that share bits of the implementation.  Is returns a boolean,
14847         while As returns the Type that is being probed.
14848
14849 2001-12-01  Ravi Pratap  <ravi@ximian.com>
14850
14851         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
14852         instead of a Literal - much easier.
14853
14854         (EnumInTransit): Remove - utterly useless :-)
14855
14856         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
14857
14858         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
14859
14860         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
14861         chain when we have no associated expression.
14862
14863 2001-11-30  Ravi Pratap  <ravi@ximian.com>
14864
14865         * constant.cs (Define): Use Location while reporting the errror.
14866
14867         Also emit a warning when 'new' is used and there is no inherited
14868         member to hide.
14869
14870         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
14871         populated.
14872
14873         (LookupEnumValue): Implement to lookup an enum member's value and define it
14874         if necessary.
14875
14876         (Populate): Re-write accordingly to use the above routine.
14877
14878 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
14879
14880         * expression.cs (This): Fix prototype for DoResolveLValue to
14881         override the base class DoResolveLValue.
14882
14883         * cs-parser.cs: Report errors cs574 and cs575 (destructor
14884         declarations) 
14885
14886         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
14887         (we need to load the address of the field here).  This fixes
14888         test-22. 
14889
14890         (FieldExpr.DoResolveLValue): Call the DoResolve
14891         function to initialize the Instance expression.
14892
14893         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
14894         correctly the GetEnumerator operation on a value type.
14895
14896         * cs-parser.jay: Add more simple parsing error catches.
14897
14898         * statement.cs (Switch): Add support for string switches.
14899         Handle null specially.
14900
14901         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
14902
14903 2001-11-28  Ravi Pratap  <ravi@ximian.com>
14904
14905         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
14906
14907         (declare_local_constant): New helper function.
14908
14909         * statement.cs (AddConstant): Keep a separate record of constants
14910
14911         (IsConstant): Implement to determine if a variable is a constant.
14912
14913         (GetConstantExpression): Implement.
14914
14915         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
14916
14917         * statement.cs (IsVariableDefined): Re-write.
14918
14919 2001-11-27  Ravi Pratap  <ravi@ximian.com>
14920
14921         * class.cs (TypeContainer::FindMembers): Look for constants
14922         in the case when we are looking for MemberTypes.Field
14923
14924         * expression.cs (MemberAccess::DoResolve): Check that in the
14925         case we are a FieldExpr and a Literal, we are not being accessed
14926         by an instance reference.
14927
14928         * cs-parser.jay (local_constant_declaration): Implement.
14929
14930         (declaration_statement): Implement for constant declarations.
14931
14932 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
14933
14934         * statement.cs (Switch): Catch double defaults.
14935
14936         (Switch): More work on the switch() statement
14937         implementation.  It works for integral values now, need to finish
14938         string support.
14939
14940
14941 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
14942
14943         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
14944         integer literals into other integer literals.  To be used by
14945         switch. 
14946
14947 2001-11-24  Ravi Pratap  <ravi@ximian.com>
14948
14949         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
14950         some memory.
14951
14952         (EmitDynamicInitializers): Cope with the above since we extract data
14953         directly from ArrayData now.
14954
14955         (ExpectInitializers): Keep track of whether initializers are mandatory
14956         or not.
14957
14958         (Bounds): Make it a hashtable to prevent the same dimension being 
14959         recorded for every element in that dimension.
14960
14961         (EmitDynamicInitializers): Fix bug which prevented the Set array method
14962         from being found.
14963
14964         Also fix bug which was causing the indices to be emitted in the reverse
14965         order.
14966
14967 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
14968
14969         * expression.cs (ArrayCreation): Implement the bits that Ravi left
14970         unfinished.  They do not work, because the underlying code is
14971         sloppy.
14972
14973 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
14974
14975         * cs-parser.jay: Remove bogus fixme.
14976
14977         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
14978         on Switch statement.
14979
14980 2001-11-23  Ravi Pratap  <ravi@ximian.com>
14981
14982         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
14983         the same. 
14984
14985         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
14986         parameter. Apparently, any expression is allowed. 
14987
14988         (ValidateInitializers): Update accordingly.
14989
14990         (CheckIndices): Fix some tricky bugs thanks to recursion.
14991
14992         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
14993         I was being completely brain-dead.
14994
14995         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
14996         and re-write acordingly.
14997
14998         (DelegateInvocation): Re-write accordingly.
14999
15000         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
15001
15002         (MakeByteBlob): Handle types more correctly.
15003
15004         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
15005         initialization from expressions but it is incomplete because I am a complete
15006         Dodo :-|
15007
15008 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
15009
15010         * statement.cs (If.Emit): Fix a bug that generated incorrect code
15011         on If.  Basically, we have to return `true' (ie, we do return to
15012         our caller) only if both branches of the if return.
15013
15014         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
15015         short-circuit operators, handle them as short circuit operators. 
15016
15017         (Cast.DoResolve): Resolve type.
15018         (Cast.Cast): Take an expression as the target type.
15019
15020         * cs-parser.jay (cast_expression): Remove old hack that only
15021         allowed a limited set of types to be handled.  Now we take a
15022         unary_expression and we resolve to a type during semantic
15023         analysis.
15024
15025         Use the grammar productions from Rhys to handle casts (this is
15026         not complete like Rhys syntax yet, we fail to handle that corner
15027         case that C# has regarding (-x), but we will get there.
15028
15029 2001-11-22  Ravi Pratap  <ravi@ximian.com>
15030
15031         * class.cs (EmitFieldInitializer): Take care of the case when we have a
15032         field which is an array type.
15033
15034         * cs-parser.jay (declare_local_variables): Support array initialization too.
15035
15036         * typemanager.cs (MakeKey): Implement.
15037
15038         (everywhere): Use the above appropriately.
15039
15040         * cs-parser.jay (for_statement): Update for array initialization while
15041         declaring variables.
15042
15043         * ecore.cs : The error message was correct, it's the variable's names that
15044         were misleading ;-) Make the code more readable.
15045
15046         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
15047         the correct type etc.
15048
15049         (ConvertExplicit): Handle Enum types by examining the underlying type.
15050
15051 2001-11-21  Ravi Pratap  <ravi@ximian.com>
15052
15053         * parameter.cs (GetCallingConvention): Always return
15054         CallingConventions.Standard for now.
15055
15056 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
15057
15058         * expression.cs (Binary.ResolveOperator): Update the values of `l'
15059         and `r' after calling DoNumericPromotions.
15060
15061         * ecore.cs: Fix error message (the types were in the wrong order).
15062
15063         * statement.cs (Foreach.ProbeCollectionType): Need to pass
15064         BindingFlags.Instance as well 
15065
15066         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
15067         implicit int literal conversion in an empty cast so that we
15068         propagate the right type upstream.
15069
15070         (UnboxCast): new class used to unbox value types.
15071         (Expression.ConvertExplicit): Add explicit type conversions done
15072         by unboxing.
15073
15074         (Expression.ImplicitNumericConversion): Oops, forgot to test for
15075         the target type before applying the implicit LongLiterals to ULong
15076         literal cast.
15077
15078 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
15079
15080         * cs-parser.jay (for_statement): Reworked the way For works: now
15081         we declare manually any variables that are introduced in
15082         for_initializer to solve the problem of having out-of-band code
15083         emition (that is what got for broken).
15084
15085         (declaration_statement): Perform the actual variable declaration
15086         that used to be done in local_variable_declaration here.
15087
15088         (local_variable_declaration): Do not declare anything, just pass
15089         the information on a DictionaryEntry
15090
15091 2001-11-20  Ravi Pratap  <ravi@ximian.com>
15092
15093         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
15094         re-write of the logic to now make it recursive.
15095
15096         (UpdateIndices): Re-write accordingly.
15097
15098         Store element data in a separate ArrayData list in the above methods.
15099
15100         (MakeByteBlob): Implement to dump the array data into a byte array.
15101
15102 2001-11-19  Ravi Pratap  <ravi@ximian.com>
15103
15104         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
15105         into CheckIndices.
15106
15107         * constant.cs (Define): Implement.
15108
15109         (EmitConstant): Re-write fully.
15110
15111         Pass in location info.
15112
15113         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
15114         respectively.
15115
15116         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
15117         DictionaryEntry since we need location info too.
15118
15119         (constant_declaration): Update accordingly.
15120
15121         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
15122         code into another method : UpdateIndices.
15123
15124 2001-11-18  Ravi Pratap  <ravi@ximian.com>
15125
15126         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
15127         some type checking etc.
15128
15129 2001-11-17  Ravi Pratap  <ravi@ximian.com>
15130
15131         * expression.cs (ArrayCreation::ValidateInitializers): Implement
15132         bits to provide dimension info if the user skips doing that.
15133
15134         Update second constructor to store the rank correctly.
15135
15136 2001-11-16  Ravi Pratap  <ravi@ximian.com>
15137
15138         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
15139         and try to implement.
15140
15141         * ../errors/cs0150.cs : Add.
15142
15143         * ../errors/cs0178.cs : Add.
15144
15145 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
15146
15147         * statement.cs: Implement foreach on multi-dimensional arrays. 
15148
15149         * parameter.cs (Parameters.GetParameterByName): Also lookup the
15150         name of the params argument.
15151
15152         * expression.cs: Use EmitStoreOpcode to get the right opcode while
15153         initializing the array.
15154
15155         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
15156         we can use this elsewhere.
15157
15158         * statement.cs: Finish implementation of foreach for single
15159         dimension arrays.
15160
15161         * cs-parser.jay: Use an out-of-band stack to pass information
15162         around, I wonder why I need this.
15163
15164         foreach_block: Make the new foreach_block the current_block.
15165
15166         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
15167         function used to return a static Parameters structure.  Used for
15168         empty parameters, as those are created very frequently.
15169
15170         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
15171
15172 2001-11-15  Ravi Pratap  <ravi@ximian.com>
15173
15174         * interface.cs : Default modifier is private, not public. The
15175         make verify test passes again.
15176
15177 2001-11-15  Ravi Pratap  <ravi@ximian.com>
15178
15179         * support.cs (ReflectionParameters): Fix logic to determine
15180         whether the last parameter is a params one. Test 9 passes again.
15181
15182         * delegate.cs (Populate): Register the builders we define with
15183         RegisterParameterForBuilder. Test 19 passes again.
15184
15185         * cs-parser.jay (property_declaration): Reference $6 instead
15186         of $$ to get at the location.
15187
15188         (indexer_declaration): Similar stuff.
15189
15190         (attribute): Ditto.
15191
15192         * class.cs (Property): Register parameters for the Get and Set methods
15193         if they exist. Test 23 passes again.
15194
15195         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
15196         call to EmitArguments as we are sure there aren't any params arguments. 
15197         Test 32 passes again.
15198
15199         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
15200         IndexOutOfRangeException. 
15201
15202         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
15203         Test 33 now passes again.
15204
15205 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
15206
15207         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
15208         broke a bunch of things.  Will have to come up with a better way
15209         of tracking locations.
15210
15211         * statement.cs: Implemented foreach for single dimension arrays.
15212
15213 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
15214
15215         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
15216         an error.  This removes the lookup from the critical path.
15217
15218         * cs-parser.jay: Removed use of temporary_loc, which is completely
15219         broken. 
15220
15221 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
15222
15223         * support.cs (ReflectionParameters.ParameterModifier): Report
15224         whether the argument is a PARAMS argument or not.
15225
15226         * class.cs: Set the attribute `ParamArrayAttribute' on the
15227         parameter argument.
15228
15229         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
15230         and cons_param_array_attribute (ConstructorInfo for
15231         ParamArrayAttribute)., 
15232
15233         * codegen.cs: Emit the return using the `Return' statement, that
15234         way we can report the error correctly for missing return values. 
15235
15236         * class.cs (Method.Emit): Clean up.
15237
15238         * expression.cs (Argument.Resolve): Take another argument: the
15239         location where this argument is used.  Notice that this is not
15240         part of the "Argument" class as to reduce the size of the
15241         structure (we know the approximate location anyways).
15242
15243         Test if the argument is a variable-reference, if not, then
15244         complain with a 206.
15245
15246         (Argument.Emit): Emit addresses of variables.
15247
15248         (Argument.FullDesc): Simplify.
15249
15250         (Invocation.DoResolve): Update for Argument.Resolve.
15251
15252         (ElementAccess.DoResolve): ditto.
15253
15254         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
15255         method should be virtual, as this method is always virtual.
15256
15257         (NewDelegate.DoResolve): Update for Argument.Resolve.
15258
15259         * class.cs (ConstructorInitializer.DoResolve): ditto.
15260
15261         * attribute.cs (Attribute.Resolve): ditto.
15262
15263 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
15264
15265         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
15266
15267         * expression.cs (ParameterReference): Drop IStackStorage and implement
15268         IAssignMethod instead. 
15269
15270         (LocalVariableReference): ditto.
15271
15272         * ecore.cs (FieldExpr): Drop IStackStorage and implement
15273         IAssignMethod instead. 
15274
15275 2001-11-13  Miguel de Icaza <miguel@ximian.com>
15276
15277         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
15278         enumerations that are used in heavily used structures derive from
15279         byte in a laughable and pathetic attempt to reduce memory usage.
15280         This is the kind of pre-optimzations that you should not do at
15281         home without adult supervision.
15282
15283         * expression.cs (UnaryMutator): New class, used to handle ++ and
15284         -- separatedly from the other unary operators.  Cleans up the
15285         code, and kills the ExpressionStatement dependency in Unary.
15286
15287         (Unary): Removed `method' and `Arguments' from this class, making
15288         it smaller, and moving it all to SimpleCall, so I can reuse this
15289         code in other locations and avoid creating a lot of transient data
15290         strucutres when not required.
15291
15292         * cs-parser.jay: Adjust for new changes.
15293
15294 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
15295
15296         * enum.cs (Enum.Populate): If there is a failure during
15297         definition, return
15298
15299         * cs-parser.jay (opt_enum_base): we used to catch type errors
15300         here, but this is really incorrect.  The type error should be
15301         catched during semantic analysis.
15302
15303 2001-12-11  Ravi Pratap  <ravi@ximian.com>
15304
15305         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
15306         current_local_parameters as expected since I, in my stupidity, had forgotten
15307         to do this :-)
15308
15309         * attribute.cs (GetValidPlaces): Fix stupid bug.
15310
15311         * class.cs (Method::Emit): Perform check on applicability of attributes.
15312
15313         (Constructor::Emit): Ditto.
15314
15315         (Field::Emit): Ditto.
15316
15317         (Field.Location): Store location information.
15318
15319         (Property, Event, Indexer, Operator): Ditto.
15320
15321         * cs-parser.jay (field_declaration): Pass in location for each field.
15322
15323         * ../errors/cs0592.cs : Add.
15324
15325 2001-11-12  Ravi Pratap  <ravi@ximian.com>
15326
15327         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
15328
15329         (InitCoreTypes): Update accordingly.
15330
15331         (RegisterAttrType, LookupAttr): Implement.
15332
15333         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
15334         info about the same.
15335
15336         (Resolve): Update to populate the above as necessary.
15337
15338         (Error592): Helper.
15339
15340         (GetValidPlaces): Helper to the above.
15341
15342         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
15343
15344         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
15345
15346 2001-11-12  Ravi Pratap  <ravi@ximian.com>
15347
15348         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
15349
15350         * ../errors/cs0617.cs : Add.
15351
15352 2001-11-11  Ravi Pratap  <ravi@ximian.com>
15353
15354         * enum.cs (Emit): Rename to Populate to be more consistent with what
15355         we expect it to do and when exactly it is called.
15356
15357         * class.cs, rootcontext.cs : Update accordingly.
15358
15359         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
15360         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
15361
15362         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
15363
15364         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
15365         of a fieldinfo using the above, when dealing with a FieldBuilder.
15366
15367 2001-11-10  Ravi Pratap  <ravi@ximian.com>
15368
15369         * ../errors/cs0031.cs : Add.
15370
15371         * ../errors/cs1008.cs : Add.
15372
15373         * ../errrors/cs0543.cs : Add.
15374
15375         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
15376         enum type.
15377
15378         (FindMembers): Implement.
15379
15380         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
15381         enums and delegates too.
15382
15383         (enum_types): Rename to builder_to_enum.
15384
15385         (delegate_types): Rename to builder_to_delegate.
15386
15387         * delegate.cs (FindMembers): Implement.
15388
15389 2001-11-09  Ravi Pratap  <ravi@ximian.com>
15390
15391         * typemanager.cs (IsEnumType): Implement.
15392
15393         * enum.cs (Emit): Re-write parts to account for the underlying type
15394         better and perform checking etc.
15395
15396         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
15397         of the underlying type.
15398
15399         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
15400         value
15401
15402         * enum.cs (error31): Helper to report error #31.
15403
15404         * cs-parser.jay (enum_declaration): Store location of each member too.
15405
15406         * enum.cs (member_to_location): New hashtable. 
15407
15408         (AddEnumMember): Update location hashtable.
15409
15410         (Emit): Use the location of each member while reporting errors.
15411
15412 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
15413
15414         * cs-parser.jay: A for_initializer if is a
15415         local_variable_declaration really ammount to have an implicit
15416         block with the variable declaration and no initializer for for.
15417
15418         * statement.cs (For.Emit): Cope with null initializers.
15419
15420         This fixes the infinite loop on for initializers.
15421
15422 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
15423
15424         * enum.cs: More cleanup.
15425
15426         * ecore.cs: Remove dead code.
15427
15428         * class.cs (Property.Emit): More simplification.
15429         (Event.Emit): ditto.
15430
15431         Reworked to have less levels of indentation.
15432
15433 2001-11-08  Ravi Pratap  <ravi@ximian.com>
15434
15435         * class.cs (Property): Emit attributes.
15436
15437         (Field): Ditto.
15438
15439         (Event): Ditto.
15440
15441         (Indexer): Ditto.
15442
15443         (Operator): Ditto.
15444
15445         * enum.cs (Emit): Ditto.
15446
15447         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
15448         Enums too.
15449
15450         * class.cs (Field, Event, etc.): Move attribute generation into the
15451         Emit method everywhere.
15452
15453         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
15454         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
15455         as we had no way of defining nested enums !
15456
15457         * rootcontext.cs : Adjust code accordingly.
15458
15459         * typemanager.cs (AddEnumType): To keep track of enum types separately.
15460
15461 2001-11-07  Ravi Pratap  <ravi@ximian.com>
15462
15463         * expression.cs (EvalConstantExpression): Move into ecore.cs
15464
15465         * enum.cs (Enum): Rename some members and make them public and readonly
15466         according to our convention.
15467
15468         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
15469         nothing else.
15470
15471         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
15472
15473         (Enum::Emit): Write a simple version for now which doesn't try to compute
15474         expressions. I shall modify this to be more robust in just a while.
15475
15476         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
15477
15478         (TypeContainer::CloseType): Create the Enum types too.
15479
15480         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
15481
15482         * expression.cs (EvalConstantExpression): Get rid of completely.
15483
15484         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
15485         user-defined values and other cases.
15486
15487         (IsValidEnumLiteral): Helper function.
15488
15489         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
15490         out there in the case we had a literal FieldExpr.
15491
15492         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
15493
15494         (Literalize): Revamp a bit to take two arguments.
15495
15496         (EnumLiteral): New class which derives from Literal to wrap enum literals.
15497
15498 2001-11-06  Ravi Pratap  <ravi@ximian.com>
15499
15500         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
15501
15502         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
15503
15504         (Resolve): Use the above to ensure we have proper initializers.
15505
15506 2001-11-05  Ravi Pratap  <ravi@ximian.com>
15507
15508         * expression.cs (Expression::EvalConstantExpression): New method to 
15509         evaluate constant expressions.
15510
15511         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
15512
15513 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
15514
15515         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
15516         in an array.
15517
15518         (Binary.ResolveOperator): Handle operator != (object a, object b)
15519         and operator == (object a, object b);
15520
15521         (Binary.DoNumericPromotions): Indicate whether the numeric
15522         promotion was possible.
15523
15524         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
15525         Implement.  
15526
15527         Made the ArrayAccess implement interface IAssignMethod instead of
15528         IStackStore as the order in which arguments are passed reflects
15529         this.
15530
15531         * assign.cs: Instead of using expr.ExprClass to select the way of
15532         assinging, probe for the IStackStore/IAssignMethod interfaces.
15533
15534         * typemanager.cs: Load InitializeArray definition.
15535
15536         * rootcontext.cs (RootContext.MakeStaticData): Used to define
15537         static data that can be used to initialize arrays. 
15538
15539 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
15540
15541         * expression.cs: Handle operator== and operator!= for booleans.
15542
15543         (Conditioal.Reduce): Implement reducer for the ?: operator.
15544
15545         (Conditional.Resolve): Implement dead code elimination.
15546
15547         (Binary.Resolve): Catch string literals and return a new
15548         concatenated string.
15549
15550         (Unary.Reduce): Implement reduction of unary expressions.
15551
15552         * ecore.cs: Split out the expression core handling here.
15553
15554         (Expression.Reduce): New method used to perform constant folding
15555         and CSE.  This is needed to support constant-expressions. 
15556
15557         * statement.cs (Statement.EmitBoolExpression): Pass true and false
15558         targets, and optimize for !x.
15559
15560 2001-11-04  Ravi Pratap  <ravi@ximian.com>
15561
15562         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
15563         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
15564         set custom atttributes.
15565
15566         * literal.cs (Literal::GetValue): New abstract method to return the actual
15567         value of the literal, cast as an object.
15568
15569         (*Literal): Implement GetValue method.
15570
15571         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
15572         expressions to the arraylist but objects of type Argument.
15573
15574         * class.cs (TypeContainer::Emit): Emit our attributes too.
15575
15576         (Method::Emit, Constructor::Emit): Ditto.
15577
15578         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
15579         to be ignoring earlier.
15580
15581 2001-11-03  Ravi Pratap  <ravi@ximian.com>
15582
15583         * attribute.cs (AttributeSection::Define): Implement to do the business
15584         of constructing a CustomAttributeBuilder.
15585
15586         (Attribute): New trivial class. Increases readability of code.  
15587
15588         * cs-parser.jay : Update accordingly.
15589
15590         (positional_argument_list, named_argument_list, named_argument): New rules
15591
15592         (attribute_arguments): Use the above so that we are more correct.
15593
15594 2001-11-02  Ravi Pratap  <ravi@ximian.com>
15595
15596         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
15597         to perform all checks for a method with a params parameter.
15598
15599         (Invocation::OverloadResolve): Update to use the above method and therefore
15600         cope correctly with params method invocations.
15601
15602         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
15603         params too.
15604
15605         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
15606         constructors in our parent too because we can't afford to miss out on 
15607         protected ones ;-)
15608
15609         * attribute.cs (AttributeSection): New name for the class Attribute
15610
15611         Other trivial changes to improve readability.
15612
15613         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
15614         use the new class names.
15615
15616 2001-11-01  Ravi Pratap  <ravi@ximian.com>
15617
15618         * class.cs (Method::Define): Complete definition for params types too
15619
15620         (Indexer::Define): Ditto.
15621
15622         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
15623         Cope everywhere with a request for info about the array parameter.
15624
15625 2001-11-01  Ravi Pratap  <ravi@ximian.com>
15626
15627         * tree.cs (RecordNamespace): Fix up to check for the correct key.
15628
15629         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
15630         local_variable_type to extract the string corresponding to the type.
15631
15632         (local_variable_type): Fixup the action to use the new helper method.
15633
15634         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
15635         go.
15636
15637         * expression.cs : Clean out code which uses the above.
15638
15639 2001-10-31  Ravi Pratap  <ravi@ximian.com>
15640
15641         * typemanager.cs (RegisterMethod): Check if we already have an existing key
15642         and bale out if necessary by returning a false.
15643
15644         (RegisterProperty): Ditto.
15645
15646         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
15647         and print out appropriate error messages.
15648
15649         * interface.cs (everywhere): Ditto.
15650
15651         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
15652         location to constructor.
15653
15654         * class.cs (Property, Event, Indexer): Update accordingly.
15655
15656         * ../errors/cs111.cs : Added.
15657
15658         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
15659         of a method, as laid down by the spec.
15660
15661         (Invocation::OverloadResolve): Use the above method.
15662
15663 2001-10-31  Ravi Pratap  <ravi@ximian.com>
15664
15665         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
15666         now take a TypeContainer and a Parameters object.
15667
15668         (ParameterData): Modify return type of ParameterModifier method to be 
15669         Parameter.Modifier and not a string.
15670
15671         (ReflectionParameters, InternalParameters): Update accordingly.
15672
15673         * expression.cs (Argument::GetParameterModifier): Same here.
15674
15675         * support.cs (InternalParameters::ParameterType): Find a better way of determining
15676         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
15677         symbol in it at all so maybe this is only for now.
15678
15679 2001-10-30  Ravi Pratap  <ravi@ximian.com>
15680
15681         * support.cs (InternalParameters): Constructor now takes an extra argument 
15682         which is the actual Parameters class.
15683
15684         (ParameterDesc): Update to provide info on ref/out modifiers.
15685
15686         * class.cs (everywhere): Update call to InternalParameters to pass in
15687         the second argument too.
15688
15689         * support.cs (ParameterData): Add ParameterModifier, which is a method 
15690         to return the modifier info [ref/out etc]
15691
15692         (InternalParameters, ReflectionParameters): Implement the above.
15693
15694         * expression.cs (Argument::ParameterModifier): Similar function to return
15695         info about the argument's modifiers.
15696
15697         (Invocation::OverloadResolve): Update to take into account matching modifiers 
15698         too.
15699
15700         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
15701         a new SetFormalParameters object which we pass to InternalParameters.
15702
15703 2001-10-30  Ravi Pratap  <ravi@ximian.com>
15704
15705         * expression.cs (NewArray): Merge into the ArrayCreation class.
15706
15707 2001-10-29  Ravi Pratap  <ravi@ximian.com>
15708
15709         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
15710         NewUserdefinedArray into one as there wasn't much of a use in having
15711         two separate ones.
15712
15713         * expression.cs (Argument): Change field's name to ArgType from Type.
15714
15715         (Type): New readonly property which returns the proper type, taking into 
15716         account ref/out modifiers.
15717
15718         (everywhere): Adjust code accordingly for the above.
15719
15720         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
15721         whether we are emitting for a ref or out parameter.
15722
15723         * expression.cs (Argument::Emit): Use the above field to set the state.
15724
15725         (LocalVariableReference::Emit): Update to honour the flag and emit the
15726         right stuff.
15727
15728         * parameter.cs (Attributes): Set the correct flags for ref parameters.
15729
15730         * expression.cs (Argument::FullDesc): New function to provide a full desc.
15731
15732         * support.cs (ParameterData): Add method ParameterDesc to the interface.
15733
15734         (ReflectionParameters, InternalParameters): Implement the above method.
15735
15736         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
15737         reporting errors.
15738
15739         (Invocation::FullMethodDesc): Ditto. 
15740
15741 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
15742
15743         * cs-parser.jay: Add extra production for the second form of array
15744         creation. 
15745
15746         * expression.cs (ArrayCreation): Update to reflect the above
15747         change. 
15748
15749         * Small changes to prepare for Array initialization.
15750
15751 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
15752
15753         * typemanager.cs (ImplementsInterface): interface might be null;
15754         Deal with this problem;
15755
15756         Also, we do store negative hits on the cache (null values), so use
15757         this instead of calling t.GetInterfaces on the type everytime.
15758
15759 2001-10-28  Ravi Pratap  <ravi@ximian.com>
15760
15761         * typemanager.cs (IsBuiltinType): New method to help determine the same.
15762
15763         * expression.cs (New::DoResolve): Get rid of array creation code and instead
15764         split functionality out into different classes.
15765
15766         (New::FormArrayType): Move into NewBuiltinArray.
15767
15768         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
15769         quite useless.
15770
15771         (NewBuiltinArray): New class to handle creation of built-in arrays.
15772
15773         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
15774         account creation of one-dimensional arrays.
15775
15776         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
15777
15778         (NewUserdefinedArray::DoResolve): Implement.
15779
15780         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
15781
15782         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
15783         we maintain inside the TypeManager. This is necessary to perform lookups on the
15784         module builder.
15785
15786         (LookupType): Update to perform GetType on the module builders too.     
15787
15788         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
15789
15790         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
15791
15792 2001-10-23  Ravi Pratap  <ravi@ximian.com>
15793
15794         * expression.cs (New::DoResolve): Implement guts of array creation.
15795
15796         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
15797
15798 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
15799
15800         * expression.cs: Fix bug I introduced lsat night that broke
15801         Delegates. 
15802
15803         (Expression.Resolve): Report a 246 error (can not resolve name)
15804         if we find a SimpleName in the stream.
15805
15806         (Expression.ResolveLValue): Ditto.
15807
15808         (Expression.ResolveWithSimpleName): This function is a variant of
15809         ResolveName, this one allows SimpleNames to be returned without a
15810         warning.  The only consumer of SimpleNames is MemberAccess
15811
15812 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
15813
15814         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
15815         might arrive here.  I have my doubts that this is correct.
15816
15817         * statement.cs (Lock): Implement lock statement.
15818
15819         * cs-parser.jay: Small fixes to support `lock' and `using'
15820
15821         * cs-tokenizer.cs: Remove extra space
15822
15823         * driver.cs: New flag --checked, allows to turn on integer math
15824         checking. 
15825
15826         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
15827         Threading.Monitor.Exit 
15828
15829 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
15830
15831         * expression.cs (IndexerAccess::DoResolveLValue): Set the
15832         Expression Class to be IndexerAccess.
15833
15834         Notice that Indexer::DoResolve sets the eclass to Value.
15835
15836 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
15837
15838         * class.cs (TypeContainer::Emit): Emit code for indexers.
15839
15840         * assign.cs (IAssignMethod): New interface implemented by Indexers
15841         and Properties for handling assignment.
15842
15843         (Assign::Emit): Simplify and reuse code. 
15844
15845         * expression.cs (IndexerAccess, PropertyExpr): Implement
15846         IAssignMethod, clean up old code. 
15847
15848 2001-10-22  Ravi Pratap  <ravi@ximian.com>
15849
15850         * typemanager.cs (ImplementsInterface): New method to determine if a type
15851         implements a given interface. Provides a nice cache too.
15852
15853         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
15854         method.
15855
15856         (ConvertReferenceExplicit): Ditto.
15857
15858         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
15859         various methods, with correct names etc.
15860
15861         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
15862         Operator.UnaryNegation.
15863
15864         * cs-parser.jay (operator_declarator): Be a little clever in the case where
15865         we have a unary plus or minus operator.
15866
15867         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
15868         UnaryMinus.
15869
15870         * everywhere : update accordingly.
15871
15872         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
15873         respectively.
15874
15875         * class.cs (Method::Define): For the case where we are implementing a method
15876         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
15877         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
15878
15879 2001-10-21  Ravi Pratap  <ravi@ximian.com>
15880
15881         * interface.cs (FindMembers): Implement to work around S.R.E
15882         lameness.
15883
15884         * typemanager.cs (IsInterfaceType): Implement.
15885
15886         (FindMembers): Update to handle interface types too.
15887
15888         * expression.cs (ImplicitReferenceConversion): Re-write bits which
15889         use IsAssignableFrom as that is not correct - it doesn't work.
15890
15891         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
15892         and accordingly override EmitStatement.
15893
15894         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
15895         using the correct logic :-)
15896
15897 2001-10-19  Ravi Pratap  <ravi@ximian.com>
15898
15899         * ../errors/cs-11.cs : Add to demonstrate error -11 
15900
15901 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
15902
15903         * assign.cs (Assign::Resolve): Resolve right hand side first, and
15904         then pass this as a hint to ResolveLValue.
15905
15906         * expression.cs (FieldExpr): Add Location information
15907
15908         (FieldExpr::LValueResolve): Report assignment to readonly
15909         variable. 
15910
15911         (Expression::ExprClassFromMemberInfo): Pass location information.
15912
15913         (Expression::ResolveLValue): Add new method that resolves an
15914         LValue. 
15915
15916         (Expression::DoResolveLValue): Default invocation calls
15917         DoResolve. 
15918
15919         (Indexers): New class used to keep track of indexers in a given
15920         Type. 
15921
15922         (IStackStore): Renamed from LValue, as it did not really describe
15923         what this did.  Also ResolveLValue is gone from this interface and
15924         now is part of Expression.
15925
15926         (ElementAccess): Depending on the element access type
15927
15928         * typemanager.cs: Add `indexer_name_type' as a Core type
15929         (System.Runtime.CompilerServices.IndexerNameAttribute)
15930
15931         * statement.cs (Goto): Take a location.
15932
15933 2001-10-18  Ravi Pratap  <ravi@ximian.com>
15934
15935         * delegate.cs (Delegate::VerifyDelegate): New method to verify
15936         if two delegates are compatible.
15937
15938         (NewDelegate::DoResolve): Update to take care of the case when
15939         we instantiate a delegate from another delegate.
15940
15941         * typemanager.cs (FindMembers): Don't even try to look up members
15942         of Delegate types for now.
15943
15944 2001-10-18  Ravi Pratap  <ravi@ximian.com>
15945
15946         * delegate.cs (NewDelegate): New class to take care of delegate
15947         instantiation.
15948
15949         * expression.cs (New): Split the delegate related code out into 
15950         the NewDelegate class.
15951
15952         * delegate.cs (DelegateInvocation): New class to handle delegate 
15953         invocation.
15954
15955         * expression.cs (Invocation): Split out delegate related code into
15956         the DelegateInvocation class.
15957
15958 2001-10-17  Ravi Pratap  <ravi@ximian.com>
15959
15960         * expression.cs (New::DoResolve): Implement delegate creation fully
15961         and according to the spec.
15962
15963         (New::DoEmit): Update to handle delegates differently.
15964
15965         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
15966         because of which we were printing out arguments in reverse order !
15967
15968         * delegate.cs (VerifyMethod): Implement to check if the given method
15969         matches the delegate.
15970
15971         (FullDelegateDesc): Implement.
15972
15973         (VerifyApplicability): Implement.
15974
15975         * expression.cs (Invocation::DoResolve): Update to accordingly handle
15976         delegate invocations too.
15977
15978         (Invocation::Emit): Ditto.
15979
15980         * ../errors/cs1593.cs : Added.
15981
15982         * ../errors/cs1594.cs : Added.
15983
15984         * delegate.cs (InstanceExpression, TargetMethod): New properties.
15985
15986 2001-10-16  Ravi Pratap  <ravi@ximian.com>
15987
15988         * typemanager.cs (intptr_type): Core type for System.IntPtr
15989
15990         (InitCoreTypes): Update for the same.
15991
15992         (iasyncresult_type, asynccallback_type): Ditto.
15993
15994         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
15995         correct.
15996
15997         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
15998         too.
15999
16000         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
16001         the builders for the 4 members of a delegate type :-)
16002
16003         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
16004         type.
16005
16006         * expression.cs (New::DoResolve): Implement guts for delegate creation.
16007
16008         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
16009
16010 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
16011
16012         * statement.cs (Break::Emit): Implement.   
16013         (Continue::Emit): Implement.
16014
16015         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
16016         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
16017         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
16018         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
16019         end loop
16020
16021         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
16022         properties that track the label for the current loop (begin of the
16023         loop and end of the loop).
16024
16025 2001-10-15  Ravi Pratap  <ravi@ximian.com>
16026
16027         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
16028         use of emitting anything at all.
16029
16030         * class.cs, rootcontext.cs : Get rid of calls to the same.
16031
16032         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
16033
16034         (Populate): Define the constructor correctly and set the implementation
16035         attributes.
16036
16037         * typemanager.cs (delegate_types): New hashtable to hold delegates that
16038         have been defined.
16039
16040         (AddDelegateType): Implement.
16041
16042         (IsDelegateType): Implement helper method.
16043
16044         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
16045
16046         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
16047         and accordingly handle it.
16048
16049         * delegate.cs (Populate): Take TypeContainer argument.
16050         Implement bits to define the Invoke method. However, I still haven't figured out
16051         how to take care of the native int bit :-(
16052
16053         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
16054         Qualify the name of the delegate, not its return type !
16055
16056         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
16057         conversion.
16058
16059         (StandardConversionExists): Checking for array types turns out to be recursive.
16060
16061         (ConvertReferenceExplicit): Implement array conversion.
16062
16063         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
16064
16065 2001-10-12  Ravi Pratap  <ravi@ximian.com>
16066
16067         * cs-parser.jay (delegate_declaration): Store the fully qualified
16068         name as it is a type declaration.
16069
16070         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
16071         readonly.
16072
16073         (DefineDelegate): Renamed from Define. Does the same thing essentially,
16074         as TypeContainer::DefineType.
16075
16076         (Populate): Method in which all the definition of the various methods (Invoke)
16077         etc is done.
16078
16079         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
16080         see.
16081
16082         (CloseDelegate): Finally creates the delegate.
16083
16084         * class.cs (TypeContainer::DefineType): Update to define delegates.
16085         (Populate, Emit and CloseType): Do the same thing here too.
16086
16087         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
16088         delegates in all these operations.
16089
16090 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
16091
16092         * expression.cs: LocalTemporary: a new expression used to
16093         reference a temporary that has been created.
16094
16095         * assign.cs: Handle PropertyAccess back here, so that we can
16096         provide the proper semantic access to properties.
16097
16098         * expression.cs (Expression::ConvertReferenceExplicit): Implement
16099         a few more explicit conversions. 
16100
16101         * modifiers.cs: `NEW' modifier maps to HideBySig.
16102
16103         * expression.cs (PropertyExpr): Make this into an
16104         ExpressionStatement, and support the EmitStatement code path. 
16105
16106         Perform get/set error checking, clean up the interface.
16107
16108         * assign.cs: recognize PropertyExprs as targets, and if so, turn
16109         them into toplevel access objects.
16110
16111 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
16112
16113         * expression.cs: PropertyExpr::PropertyExpr: use work around the
16114         SRE.
16115
16116         * typemanager.cs: Keep track here of our PropertyBuilders again to
16117         work around lameness in SRE.
16118
16119 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
16120
16121         * expression.cs (LValue::LValueResolve): New method in the
16122         interface, used to perform a second resolution pass for LValues. 
16123
16124         (This::DoResolve): Catch the use of this in static methods.
16125
16126         (This::LValueResolve): Implement.
16127
16128         (This::Store): Remove warning, assigning to `this' in structures
16129         is 
16130
16131         (Invocation::Emit): Deal with invocation of
16132         methods on value types.  We need to pass the address to structure
16133         methods rather than the object itself.  (The equivalent code to
16134         emit "this" for structures leaves the entire structure on the
16135         stack instead of a pointer to it). 
16136
16137         (ParameterReference::DoResolve): Compute the real index for the
16138         argument based on whether the method takes or not a `this' pointer
16139         (ie, the method is static).
16140
16141         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
16142         value types returned from functions when we need to invoke a
16143         method on the sturcture.
16144
16145
16146 2001-10-11  Ravi Pratap  <ravi@ximian.com>
16147
16148         * class.cs (TypeContainer::DefineType): Method to actually do the business of
16149         defining the type in the Modulebuilder or Typebuilder. This is to take
16150         care of nested types which need to be defined on the TypeBuilder using
16151         DefineNestedMethod.
16152
16153         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
16154         methods in RootContext, only ported to be part of TypeContainer.
16155
16156         (TypeContainer::GetInterfaceOrClass): Ditto.
16157
16158         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
16159
16160         * interface.cs (Interface::DefineInterface): New method. Does exactly
16161         what RootContext.CreateInterface did earlier, only it takes care of nested types 
16162         too.
16163
16164         (Interface::GetInterfaces): Move from RootContext here and port.
16165
16166         (Interface::GetInterfaceByName): Same here.
16167
16168         * rootcontext.cs (ResolveTree): Re-write.
16169
16170         (PopulateTypes): Re-write.
16171
16172         * class.cs (TypeContainer::Populate): Populate nested types too.
16173         (TypeContainer::Emit): Emit nested members too.
16174
16175         * typemanager.cs (AddUserType): Do not make use of the FullName property,
16176         instead just use the name argument passed in as it is already fully
16177         qualified.
16178
16179         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
16180         to TypeContainer mapping to see if a type is user-defined.
16181
16182         * class.cs (TypeContainer::CloseType): Implement. 
16183
16184         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
16185         the default constructor.
16186
16187         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
16188         twice.
16189
16190         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
16191
16192         * interface.cs (CloseType): Create the type here.
16193
16194         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
16195         the hierarchy.
16196
16197         Remove all the methods which are now in TypeContainer.
16198
16199 2001-10-10  Ravi Pratap  <ravi@ximian.com>
16200
16201         * delegate.cs (Define): Re-write bits to define the delegate
16202         correctly.
16203
16204 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
16205
16206         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
16207
16208         * expression.cs (ImplicitReferenceConversion): handle null as well
16209         as a source to convert to any reference type.
16210
16211         * statement.cs (Return): Perform any implicit conversions to
16212         expected return type.  
16213
16214         Validate use of return statement.  
16215
16216         * codegen.cs (EmitContext): Pass the expected return type here.
16217
16218         * class.cs (Method, Constructor, Property): Pass expected return
16219         type to EmitContext.
16220
16221 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
16222
16223         * expression.cs: Make DoResolve take an EmitContext instead of a
16224         TypeContainer.
16225
16226         Replaced `l' and `location' for `loc', for consistency.
16227
16228         (Error, Warning): Remove unneeded Tc argument.
16229
16230         * assign.cs, literal.cs, constant.cs: Update to new calling
16231         convention. 
16232
16233         * codegen.cs: EmitContext now contains a flag indicating whether
16234         code is being generated in a static method or not.
16235
16236         * cs-parser.jay: DecomposeQI, new function that replaces the old
16237         QualifiedIdentifier.  Now we always decompose the assembled
16238         strings from qualified_identifier productions into a group of
16239         memberaccesses.
16240
16241 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
16242
16243         * rootcontext.cs: Deal with field-less struct types correctly now
16244         by passing the size option to Define Type.
16245
16246         * class.cs: Removed hack that created one static field. 
16247
16248 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
16249
16250         * statement.cs: Moved most of the code generation here. 
16251
16252 2001-10-09  Ravi Pratap  <ravi@ximian.com>
16253
16254         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
16255         seem very right.
16256
16257         (ElementAccess): Remove useless bits for now - keep checks as the spec
16258         says.
16259
16260 2001-10-08  Ravi Pratap  <ravi@ximian.com>
16261
16262         * expression.cs (ElementAccess::DoResolve): Remove my crap code
16263         and start performing checks according to the spec.
16264
16265 2001-10-07  Ravi Pratap  <ravi@ximian.com>
16266
16267         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
16268         rank_specifiers instead.
16269
16270         (rank_specifiers): Change the order in which the rank specifiers are stored
16271
16272         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
16273
16274         * expression.cs (ElementAccess): Implement the LValue interface too.
16275
16276 2001-10-06  Ravi Pratap  <ravi@ximian.com>
16277
16278         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
16279         except that user defined conversions are not included.
16280
16281         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
16282         perform the conversion of the return type, if necessary.
16283
16284         (New::DoResolve): Check whether we are creating an array or an object
16285         and accordingly do the needful.
16286
16287         (New::Emit): Same here.
16288
16289         (New::DoResolve): Implement guts of array creation.
16290
16291         (New::FormLookupType): Helper function.
16292
16293 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
16294
16295         * codegen.cs: Removed most of the code generation here, and move the
16296         corresponding code generation bits to the statement classes. 
16297
16298         Added support for try/catch/finalize and throw.
16299
16300         * cs-parser.jay: Added support for try/catch/finalize.
16301
16302         * class.cs: Catch static methods having the flags override,
16303         virtual or abstract.
16304
16305         * expression.cs (UserCast): This user cast was not really doing
16306         what it was supposed to do.  Which is to be born in fully resolved
16307         state.  Parts of the resolution were being performed at Emit time! 
16308
16309         Fixed this code.
16310
16311 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
16312
16313         * expression.cs: Implicity convert the result from UserCast.
16314
16315 2001-10-05  Ravi Pratap  <ravi@ximian.com>
16316
16317         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
16318         prevented it from working correctly. 
16319
16320         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
16321         merely ConvertImplicit.
16322
16323 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
16324
16325         * typemanager.cs: Make the LookupTypeContainer function static,
16326         and not per-instance.  
16327
16328         * class.cs: Make static FindMembers (the one that takes a Type
16329         argument). 
16330
16331         * codegen.cs: Add EmitForeach here.
16332
16333         * cs-parser.jay: Make foreach a toplevel object instead of the
16334         inline expansion, as we need to perform semantic analysis on it. 
16335
16336 2001-10-05  Ravi Pratap  <ravi@ximian.com>
16337
16338         * expression.cs (Expression::ImplicitUserConversion): Rename to
16339         UserDefinedConversion.
16340
16341         (Expression::UserDefinedConversion): Take an extra argument specifying 
16342         whether we look for explicit user conversions too.
16343
16344         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
16345
16346         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
16347
16348         (ExplicitUserConversion): Make it a call to UserDefinedConversion
16349         with the appropriate arguments.
16350
16351         * cs-parser.jay (cast_expression): Record location too.
16352
16353         * expression.cs (Cast): Record location info.
16354
16355         (Expression::ConvertExplicit): Take location argument.
16356
16357         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
16358         to determine if we are doing explicit conversions.
16359
16360         (UserCast::Emit): Update accordingly.
16361
16362         (Expression::ConvertExplicit): Report an error if everything fails.
16363
16364         * ../errors/cs0030.cs : Add.
16365
16366 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
16367
16368         * modifiers.cs: If the ABSTRACT keyword is present, also set the
16369         virtual and newslot bits. 
16370
16371         * class.cs (TypeContainer::RegisterRequiredImplementations):
16372         Record methods we need.
16373
16374         (TypeContainer::MakeKey): Helper function to make keys for
16375         MethodBases, since the Methodbase key is useless.
16376
16377         (TypeContainer::Populate): Call RegisterRequiredImplementations
16378         before defining the methods.   
16379
16380         Create a mapping for method_builders_to_methods ahead of time
16381         instead of inside a tight loop.
16382
16383         (::RequireMethods):  Accept an object as the data to set into the
16384         hashtable so we can report interface vs abstract method mismatch.
16385
16386 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
16387
16388         * report.cs: Make all of it static.
16389
16390         * rootcontext.cs: Drop object_type and value_type computations, as
16391         we have those in the TypeManager anyways.
16392
16393         Drop report instance variable too, now it is a global.
16394
16395         * driver.cs: Use try/catch on command line handling.
16396
16397         Add --probe option to debug the error reporting system with a test
16398         suite. 
16399
16400         * report.cs: Add support for exiting program when a probe
16401         condition is reached.
16402
16403 2001-10-03  Ravi Pratap  <ravi@ximian.com>
16404
16405         * expression.cs (Binary::DoNumericPromotions): Fix the case when
16406         we do a forcible conversion regardless of type, to check if 
16407         ForceConversion returns a null.
16408
16409         (Binary::error19): Use location to report error.
16410
16411         (Unary::error23): Use location here too.
16412
16413         * ../errors/cs0019.cs : Check in.
16414
16415         * ../errors/cs0023.cs : Check in.
16416
16417         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
16418         case of a non-null MethodInfo object with a length of 0 !
16419
16420         (Binary::ResolveOperator): Flag error if overload resolution fails to find
16421         an applicable member - according to the spec :-)
16422         Also fix logic to find members in base types.
16423
16424         (Unary::ResolveOperator): Same here.
16425
16426         (Unary::report23): Change name to error23 and make first argument a TypeContainer
16427         as I was getting thoroughly confused between this and error19 :-)
16428
16429         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
16430         (::FindMostEncompassedType): Implement.
16431         (::FindMostEncompassingType): Implement.
16432         (::StandardConversionExists): Implement.
16433
16434         (UserImplicitCast): Re-vamp. We now need info about most specific
16435         source and target types so that we can do the necessary conversions.
16436
16437         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
16438         mathematical union with no duplicates.
16439
16440 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
16441
16442         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
16443         in order from base classes to child classes, so that we can in
16444         child classes look up in our parent for method names and
16445         attributes (required for handling abstract, virtual, new, override
16446         constructs: we need to instrospect our base class, and if we dont
16447         populate the classes in order, the introspection might be
16448         incorrect.  For example, a method could query its parent before
16449         the parent has any methods and would determine that the parent has
16450         no abstract methods (while it could have had them)).
16451
16452         (RootContext::CreateType): Record the order in which we define the
16453         classes.
16454
16455 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
16456
16457         * class.cs (TypeContainer::Populate): Also method definitions can
16458         fail now, keep track of this.
16459
16460         (TypeContainer::FindMembers): Implement support for
16461         DeclaredOnly/noDeclaredOnly flag.
16462
16463         (Constructor::Emit) Return the ConstructorBuilder.
16464
16465         (Method::Emit) Return the MethodBuilder. 
16466         Check for abstract or virtual methods to be public.
16467
16468         * rootcontext.cs (RootContext::CreateType): Register all the
16469         abstract methods required for the class to be complete and the
16470         interface methods that must be implemented. 
16471
16472         * cs-parser.jay: Report error 501 (method requires body if it is
16473         not marked abstract or extern).
16474
16475         * expression.cs (TypeOf::Emit): Implement.
16476
16477         * typemanager.cs: runtime_handle_type, new global type.
16478
16479         * class.cs (Property::Emit): Generate code for properties.
16480
16481 2001-10-02  Ravi Pratap  <ravi@ximian.com>
16482
16483         * expression.cs (Unary::ResolveOperator): Find operators on base type
16484         too - we now conform exactly to the spec.
16485
16486         (Binary::ResolveOperator): Same here.
16487
16488         * class.cs (Operator::Define): Fix minor quirk in the tests.
16489
16490         * ../errors/cs0215.cs : Added.
16491
16492         * ../errors/cs0556.cs : Added.
16493
16494         * ../errors/cs0555.cs : Added.
16495
16496 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
16497
16498         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
16499         single integer which is really efficient
16500
16501 2001-10-01  Ravi Pratap  <ravi@ximian.com>
16502
16503         *  expression.cs (Expression::ImplicitUserConversion): Use location
16504         even in the case when we are examining True operators.
16505  
16506         * class.cs (Operator::Define): Perform extensive checks to conform
16507         with the rules for operator overloading in the spec.
16508
16509         * expression.cs (Expression::ImplicitReferenceConversion): Implement
16510         some of the other conversions mentioned in the spec.
16511
16512         * typemanager.cs (array_type): New static member for the System.Array built-in
16513         type.
16514
16515         (cloneable_interface): For System.ICloneable interface.
16516
16517         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
16518         we start resolving the tree and populating types.
16519
16520         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
16521  
16522 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
16523
16524         * expression.cs (Expression::ExprClassFromMemberInfo,
16525         Expression::Literalize): Create literal expressions from
16526         FieldInfos which are literals.
16527
16528         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
16529         type casts, because they were wrong.  The test suite in tests
16530         caught these ones.
16531
16532         (ImplicitNumericConversion): ushort to ulong requires a widening
16533         cast. 
16534
16535         Int32 constant to long requires widening cast as well.
16536
16537         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
16538         for integers because the type on the stack is not i4.
16539
16540 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
16541
16542         * expression.cs (report118): require location argument. 
16543
16544         * parameter.cs: Do not dereference potential null value.
16545
16546         * class.cs: Catch methods that lack the `new' keyword when
16547         overriding a name.  Report warnings when `new' is used without
16548         anything being there to override.
16549
16550         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
16551
16552         * class.cs: Only add constructor to hashtable if it is non-null
16553         (as now constructors can fail on define).
16554
16555         (TypeManager, Class, Struct): Take location arguments.
16556
16557         Catch field instance initialization in structs as errors.
16558
16559         accepting_filter: a new filter for FindMembers that is static so
16560         that we dont create an instance per invocation.
16561
16562         (Constructor::Define): Catch errors where a struct constructor is
16563         parameterless 
16564
16565         * cs-parser.jay: Pass location information for various new
16566         constructs. 
16567
16568         * delegate.cs (Delegate): take a location argument.
16569
16570         * driver.cs: Do not call EmitCode if there were problesm in the
16571         Definition of the types, as many Builders wont be there. 
16572
16573         * decl.cs (Decl::Decl): Require a location argument.
16574
16575         * cs-tokenizer.cs: Handle properly hex constants that can not fit
16576         into integers, and find the most appropiate integer for it.
16577
16578         * literal.cs: Implement ULongLiteral.
16579
16580         * rootcontext.cs: Provide better information about the location of
16581         failure when CreateType fails.
16582
16583 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
16584
16585         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
16586         as well.
16587
16588         * expression.cs (Binary::CheckShiftArguments): Add missing type
16589         computation.
16590         (Binary::ResolveOperator): Add type to the logical and and logical
16591         or, Bitwise And/Or and Exclusive Or code paths, it was missing
16592         before.
16593
16594         (Binary::DoNumericPromotions): In the case where either argument
16595         is ulong (and most signed types combined with ulong cause an
16596         error) perform implicit integer constant conversions as well.
16597
16598 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
16599
16600         * expression.cs (UserImplicitCast): Method should always be
16601         non-null. 
16602         (Invocation::BetterConversion): Simplified test for IntLiteral.
16603
16604         (Expression::ImplicitNumericConversion): Split this routine out.
16605         Put the code that performs implicit constant integer conversions
16606         here. 
16607
16608         (Expression::Resolve): Become a wrapper around DoResolve so we can
16609         check eclass and type being set after resolve.
16610
16611         (Invocation::Badness): Remove this dead function
16612
16613         (Binary::ResolveOperator): Do not compute the expensive argumnets
16614         unless we have a union for it.
16615
16616         (Probe::Emit): Is needs to do an isinst and then
16617         compare against null.
16618
16619         (::CanConvert): Added Location argument.  If the Location argument
16620         is null (Location.Null), then we do not report errors.  This is
16621         used by the `probe' mechanism of the Explicit conversion.  We do
16622         not want to generate an error for something that the user
16623         explicitly requested to be casted.  But the pipeline for an
16624         explicit cast first tests for potential implicit casts.
16625
16626         So for now, if the Location is null, it means `Probe only' to
16627         avoid adding another argument.   Might have to revise this
16628         strategy later.
16629
16630         (ClassCast): New class used to type cast objects into arbitrary
16631         classes (used in Explicit Reference Conversions).
16632
16633         Implement `as' as well.
16634
16635         Reverted all the patches from Ravi below: they were broken:
16636
16637                 * The use of `level' as a mechanism to stop recursive
16638                   invocations is wrong.  That was there just to catch the
16639                   bug with a strack trace but not as a way of addressing
16640                   the problem.
16641
16642                   To fix the problem we have to *understand* what is going
16643                   on and the interactions and come up with a plan, not
16644                   just get things going.
16645
16646                 * The use of the type conversion cache that I proposed
16647                   last night had an open topic: How does this work across
16648                   protection domains.  A user defined conversion might not
16649                   be public in the location where we are applying the
16650                   conversion, a different conversion might be selected
16651                   (ie, private A->B (better) but public B->A (worse),
16652                   inside A, A->B applies, but outside it, B->A will
16653                   apply).
16654
16655                 * On top of that (ie, even if the above is solved),
16656                   conversions in a cache need to be abstract.  Ie, `To
16657                   convert from an Int to a Short use an OpcodeCast', not
16658                   `To convert from an Int to a Short use the OpcodeCast on
16659                   the variable 5' (which is what this patch was doing).
16660
16661 2001-09-28  Ravi Pratap  <ravi@ximian.com>
16662
16663         * expression.cs (Invocation::ConversionExists): Re-write to use
16664         the conversion cache
16665
16666         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
16667         cache all conversions done, not just user-defined ones.
16668
16669         (Invocation::BetterConversion): The real culprit. Use ConversionExists
16670         to determine if a conversion exists instead of acutually trying to 
16671         perform the conversion. It's faster too.
16672
16673         (Expression::ConvertExplicit): Modify to use ConversionExists to check
16674         and only then attempt the implicit conversion.
16675
16676 2001-09-28  Ravi Pratap  <ravi@ximian.com>
16677
16678         * expression.cs (ConvertImplicit): Use a cache for conversions
16679         already found. Check level of recursion and bail out if necessary.
16680
16681 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
16682
16683         * typemanager.cs (string_concat_string_string, string_concat_object_object):
16684         Export standard methods that we expect for string operations.
16685
16686         * statement.cs (Block::UsageWarning): Track usage of variables and
16687         report the errors for not used variables.
16688
16689         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
16690         operator. 
16691
16692 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
16693
16694         * codegen.cs: remove unnneded code 
16695
16696         * expression.cs: Removed BuiltinTypeAccess class
16697
16698         Fix the order in which implicit conversions are
16699         done.  
16700
16701         The previous fixed dropped support for boxed conversions (adding a
16702         test to the test suite now)
16703
16704         (UserImplicitCast::CanConvert): Remove test for source being null,
16705         that code is broken.  We should not feed a null to begin with, if
16706         we do, then we should track the bug where the problem originates
16707         and not try to cover it up here.
16708
16709         Return a resolved expression of type UserImplicitCast on success
16710         rather than true/false.  Ravi: this is what I was talking about,
16711         the pattern is to use a static method as a "constructor" for
16712         objects. 
16713
16714         Also, do not create arguments until the very last minute,
16715         otherwise we always create the arguments even for lookups that
16716         will never be performed. 
16717
16718         (UserImplicitCast::Resolve): Eliminate, objects of type
16719         UserImplicitCast are born in a fully resolved state. 
16720
16721         * typemanager.cs (InitCoreTypes): Init also value_type
16722         (System.ValueType). 
16723
16724         * expression.cs (Cast::Resolve): First resolve the child expression.
16725
16726         (LValue): Add new method AddressOf to be used by
16727         the `&' operator.  
16728
16729         Change the argument of Store to take an EmitContext instead of an
16730         ILGenerator, because things like FieldExpr need to be able to call
16731         their children expression to generate the instance code. 
16732
16733         (Expression::Error, Expression::Warning): Sugar functions for
16734         reporting errors.
16735
16736         (Expression::MemberLookup): Accept a TypeContainer instead of a
16737         Report as the first argument.
16738
16739         (Expression::ResolvePrimary): Killed.  I still want to improve
16740         this as currently the code is just not right.
16741
16742         (Expression::ResolveMemberAccess): Simplify, but it is still
16743         wrong. 
16744
16745         (Unary::Resolve): Catch errors in AddressOf operators.
16746
16747         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
16748         index to a byte for the short-version, or the compiler will choose
16749         the wrong Emit call, which generates the wrong data.
16750
16751         (ParameterReference::Emit, ::Store): same.
16752
16753         (FieldExpr::AddressOf): Implement.
16754
16755         * typemanager.cs: TypeManager: made public variable instead of
16756         property.
16757
16758         * driver.cs: document --fatal.
16759
16760         * report.cs (ErrorMessage, WarningMessage): new names for the old
16761         Error and Warning classes.
16762
16763         * cs-parser.jay (member_access): Turn built-in access to types
16764         into a normal simplename
16765
16766 2001-09-27  Ravi Pratap  <ravi@ximian.com>
16767
16768         * expression.cs (Invocation::BetterConversion): Fix to cope
16769         with q being null, since this was introducing a bug.
16770
16771         * expression.cs (ConvertImplicit): Do built-in conversions first.
16772
16773 2001-09-27  Ravi Pratap  <ravi@ximian.com>
16774
16775         * expression.cs (UserImplicitCast::Resolve): Fix bug.
16776
16777 2001-09-27  Ravi Pratap  <ravi@ximian.com>
16778
16779         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
16780         I had introduced long ago (what's new ?).
16781
16782         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
16783         the work of all the checking. 
16784         (ConvertImplicit): Call CanConvert and only then create object if necessary.
16785         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
16786
16787         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
16788         that is the right way. 
16789
16790         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
16791         overloading resolution. Use everywhere instead of cutting and pasting code.
16792
16793         (Binary::ResolveOperator): Use MakeUnionSet.
16794
16795         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
16796         we have to convert to bool types. Not complete yet.
16797
16798 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
16799
16800         * typemanager.cs (TypeManager::CSharpName): support ushort.
16801
16802         * expression.cs (Expression::TryImplicitIntConversion): Attempts
16803         to provide an expression that performsn an implicit constant int
16804         conversion (section 6.1.6).
16805         (Expression::ConvertImplicitRequired): Reworked to include
16806         implicit constant expression conversions.
16807
16808         (Expression::ConvertNumericExplicit): Finished.
16809
16810         (Invocation::Emit): If InstanceExpression is null, then it means
16811         that we perform a call on this.
16812
16813 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
16814
16815         * expression.cs (Unary::Emit): Remove some dead code.
16816         (Probe): Implement Resolve and Emit for `is'.
16817         (Expression::ConvertImplicitRequired): Attempt to do constant
16818         expression conversions here.  Maybe should be moved to
16819         ConvertImplicit, but I am not sure.
16820         (Expression::ImplicitLongConstantConversionPossible,
16821         Expression::ImplicitIntConstantConversionPossible): New functions
16822         that tell whether is it possible to apply an implicit constant
16823         expression conversion.
16824
16825         (ConvertNumericExplicit): Started work on explicit numeric
16826         conversions.
16827
16828         * cs-parser.jay: Update operator constants.
16829
16830         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
16831         (Parameters::GetSignature): Hook up VerifyArgs here.
16832         (Parameters::VerifyArgs): Verifies that no two arguments have the
16833         same name. 
16834
16835         * class.cs (Operator): Update the operator names to reflect the
16836         ones that the spec expects (as we are just stringizing the
16837         operator names).
16838
16839         * expression.cs (Unary::ResolveOperator): Fix bug: Use
16840         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
16841         previous usage did only work for our methods.
16842         (Expression::ConvertImplicit): Handle decimal implicit numeric
16843         conversions as well.
16844         (Expression::InternalTypeConstructor): Used to invoke constructors
16845         on internal types for default promotions.
16846
16847         (Unary::Emit): Implement special handling for the pre/post
16848         increment/decrement for overloaded operators, as they need to have
16849         the same semantics as the other operators.
16850
16851         (Binary::ResolveOperator): ditto.
16852         (Invocation::ConversionExists): ditto.
16853         (UserImplicitCast::Resolve): ditto.
16854
16855 2001-09-26  Ravi Pratap  <ravi@ximian.com>
16856
16857         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
16858         operator, return after emitting body. Regression tests pass again !
16859
16860         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
16861         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
16862         (Invocation::OverloadResolve): Ditto.
16863         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
16864
16865         * everywhere : update calls to the above methods accordingly.
16866
16867 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
16868
16869         * assign.cs (Assign): Make it inherit from ExpressionStatement.
16870
16871         * expression.cs (ExpressionStatement): New base class used for
16872         expressions that can appear in statements, so that we can provide
16873         an alternate path to generate expression that do not leave a value
16874         on the stack.
16875
16876         (Expression::Emit, and all the derivatives): We no longer return
16877         whether a value is left on the stack or not.  Every expression
16878         after being emitted leaves a single value on the stack.
16879
16880         * codegen.cs (EmitContext::EmitStatementExpression): Use the
16881         facilties of ExpressionStatement if possible.
16882
16883         * cs-parser.jay: Update statement_expression.
16884
16885 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
16886
16887         * driver.cs: Change the wording of message
16888
16889 2001-09-25  Ravi Pratap  <ravi@ximian.com>
16890
16891         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
16892         the type of the expression to the return type of the method if
16893         we have an overloaded operator match ! The regression tests pass again !
16894         (Unary::ResolveOperator): Ditto.
16895
16896         * expression.cs (Invocation::ConversionExists): Correct the member lookup
16897         to find "op_Implicit", not "implicit" ;-)
16898         (UserImplicitCast): New class to take care of user-defined implicit conversions.
16899         (ConvertImplicit, ForceConversion): Take TypeContainer argument
16900
16901         * everywhere : Correct calls to the above accordingly.
16902
16903         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
16904         (ConvertImplicit): Do user-defined conversion if it exists.
16905
16906 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
16907
16908         * assign.cs: track location.
16909         (Resolve): Use implicit conversions on assignment.
16910
16911         * literal.cs: Oops.  Not good, Emit of short access values should
16912         pass (Bytes) or the wrong argument will be selected.
16913
16914         * expression.cs (Unary::Emit): Emit code for -expr.
16915
16916         (Unary::ResolveOperator): Handle `Substract' for non-constants
16917         (substract from zero from the non-constants).
16918         Deal with Doubles as well. 
16919
16920         (Expression::ConvertImplicitRequired): New routine that reports an
16921         error if no implicit conversion exists. 
16922
16923         (Invocation::OverloadResolve): Store the converted implicit
16924         expressions if we make them
16925
16926 2001-09-24  Ravi Pratap  <ravi@ximian.com>
16927
16928         * class.cs (ConstructorInitializer): Take a Location argument.
16929         (ConstructorBaseInitializer): Same here.
16930         (ConstructorThisInitializer): Same here.
16931
16932         * cs-parser.jay : Update all calls accordingly.
16933
16934         * expression.cs (Unary, Binary, New): Take location argument.
16935         Update accordingly everywhere.
16936
16937         * cs-parser.jay : Update all calls to the above to take a location
16938         argument.
16939
16940         * class.cs : Ditto.
16941
16942 2001-09-24  Ravi Pratap  <ravi@ximian.com>
16943
16944         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
16945         (Invocation::BetterConversion): Same here
16946         (Invocation::ConversionExists): Ditto.
16947
16948         (Invocation::ConversionExists): Implement.
16949
16950 2001-09-22  Ravi Pratap  <ravi@ximian.com>
16951
16952         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
16953         Also take an additional TypeContainer argument.
16954
16955         * All over : Pass in TypeContainer as argument to OverloadResolve.
16956
16957         * typemanager.cs (CSharpName): Update to check for the string type and return
16958         that too.
16959
16960         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
16961         a given method.
16962
16963 2001-09-21  Ravi Pratap  <ravi@ximian.com>
16964
16965         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
16966         (Invocation::BetterFunction): Implement.
16967         (Invocation::BetterConversion): Implement.
16968         (Invocation::ConversionExists): Skeleton, no implementation yet.
16969
16970         Okay, things work fine !
16971
16972 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
16973
16974         * typemanager.cs: declare and load enum_type, delegate_type and
16975         void_type. 
16976
16977         * expression.cs (Expression::Emit): Now emit returns a value that
16978         tells whether a value is left on the stack or not.  This strategy
16979         might be reveted tomorrow with a mechanism that would address
16980         multiple assignments.
16981         (Expression::report118): Utility routine to report mismatches on
16982         the ExprClass.
16983
16984         (Unary::Report23): Report impossible type/operator combination
16985         utility function.
16986
16987         (Unary::IsIncrementableNumber): Whether the type can be
16988         incremented or decremented with add.
16989         (Unary::ResolveOperator): Also allow enumerations to be bitwise
16990         complemented. 
16991         (Unary::ResolveOperator): Implement ++, !, ~,
16992
16993         (Invocation::Emit): Deal with new Emit convetion.
16994
16995         * All Expression derivatives: Updated their Emit method to return
16996         whether they leave values on the stack or not.
16997
16998         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
16999         stack for expressions that are statements. 
17000
17001 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
17002
17003         * expression.cs (LValue): New interface.  Must be implemented by
17004         LValue objects.
17005         (LocalVariableReference, ParameterReference, FieldExpr): Implement
17006         LValue interface.
17007
17008         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
17009         interface for generating code, simplifies the code.
17010
17011 2001-09-20  Ravi Pratap  <ravi@ximian.com>
17012
17013         * expression.cs (everywhere): Comment out return statements in ::Resolve
17014         methods to avoid the warnings.
17015
17016 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
17017
17018         * driver.cs (parse): Report error 2001 if we can not open the
17019         source file.
17020
17021         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
17022         not resolve it.
17023
17024         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
17025         object. 
17026
17027         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
17028         otherwise nested blocks end up with the same index.
17029
17030         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
17031
17032         * expression.cs:  Instead of having FIXMEs in the Resolve
17033         functions, throw exceptions so it is obvious that we are facing a
17034         bug. 
17035
17036         * cs-parser.jay (invocation_expression): Pass Location information.
17037
17038         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
17039         Use a basename for those routines because .NET does not like paths
17040         on them. 
17041
17042         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
17043         already defined.
17044
17045 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
17046
17047         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
17048         are loading the correct data types (throws an exception if not).
17049         (TypeManager::InitCoreTypes): Use CoreLookupType
17050
17051         * expression.cs (Unary::ResolveOperator): return the child
17052         expression for expressions which are just +expr.
17053         (Unary::ResolveOperator): Return negative literals for -LITERAL
17054         expressions (otherwise they are Unary {Literal}).
17055         (Invocation::Badness): Take into account `Implicit constant
17056         expression conversions'.
17057
17058         * literal.cs (LongLiteral): Implement long literal class.
17059         (IntLiteral): export the `Value' of the intliteral. 
17060
17061 2001-09-19  Ravi Pratap  <ravi@ximian.com>
17062
17063         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
17064
17065         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
17066         instead of 'Operator'
17067
17068         * expression.cs (Binary::ResolveOperator): Update accordingly.
17069         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
17070         and 'Minus'
17071
17072         * cs-parser.jay (unary_expression): Update to use the new names.
17073
17074         * gen-treedump.cs (GetUnary): Same here.
17075
17076         * expression.cs (Unary::Resolve): Implement.
17077         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
17078         operators are found instead of making noise ;-)
17079         (Unary::ResolveOperator): New method to do precisely the same thing which
17080         Binary::ResolveOperator does for Binary expressions.
17081         (Unary.method, .Arguments): Add.
17082         (Unary::OperName): Implement.   
17083         (Unary::ForceConversion): Copy and Paste !
17084
17085         * class.cs (Operator::Define): Fix a small bug for the case when we have 
17086         a unary operator.
17087
17088         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
17089         for the inbuilt operators. Only overloading works for now ;-)
17090
17091 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
17092
17093         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
17094         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
17095
17096         * expression.cs (This::Emit): Implement. 
17097         (This::Resolve): Implement.
17098         (TypeOf:Resolve): Implement.
17099         (Expression::ResolveSimpleName): Add an implicit this to instance
17100         field references. 
17101         (MemberAccess::Resolve): Deal with Parameters and Fields. 
17102         Bind instance variable to Field expressions.
17103         (FieldExpr::Instance): New field used to track the expression that
17104         represents the object instance.
17105         (FieldExpr::Resolve): Track potential errors from MemberLookup not
17106         binding 
17107         (FieldExpr::Emit): Implement.
17108
17109         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
17110         the last instruction contains a return opcode to avoid generating
17111         the last `ret' instruction (this generates correct code, and it is
17112         nice to pass the peverify output).
17113
17114         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
17115         initializer for static and instance variables.
17116         (Constructor::Emit): Allow initializer to be null in the case of
17117         static constructors.  Only emit initializer for instance
17118         constructors. 
17119
17120         (TypeContainer::FindMembers): Return a null array if there are no
17121         matches.
17122
17123         Also fix the code for the MemberTypes.Method branch, as it was not
17124         scanning that for operators (or tried to access null variables before).
17125
17126         * assign.cs (Assign::Emit): Handle instance and static fields. 
17127
17128         * TODO: Updated.
17129
17130         * driver.cs: Stop compilation if there are parse errors.
17131
17132         * cs-parser.jay (constructor_declaration): Provide default base
17133         initializer for non-static constructors.
17134         (constructor_declarator): Do not provide a default base
17135         initializers if none was specified.
17136         Catch the fact that constructors should not have parameters.
17137
17138         * class.cs: Do not emit parent class initializers for static
17139         constructors, that should be flagged as an error.
17140
17141 2001-09-18  Ravi Pratap  <ravi@ximian.com>
17142
17143         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
17144         Move back code into TypeContainer::Populate.
17145
17146 2001-09-18  Ravi Pratap  <ravi@ximian.com>
17147
17148         * class.cs (TypeContainer::AddConstructor): Fix the check to
17149         compare against Name, not Basename. 
17150         (Operator::OpType): Change Plus and Minus to Add and Subtract.
17151
17152         * cs-parser.jay : Update accordingly.
17153
17154         * class.cs (TypeContainer::FindMembers): For the case where we are searching
17155         for methods, don't forget to look into the operators too.
17156         (RegisterMethodBuilder): Helper method to take care of this for
17157         methods, constructors and operators.
17158         (Operator::Define): Completely revamp.
17159         (Operator.OperatorMethod, MethodName): New fields.
17160         (TypeContainer::Populate): Move the registering of builders into
17161         RegisterMethodBuilder.
17162         (Operator::Emit): Re-write.
17163
17164         * expression.cs (Binary::Emit): Comment out code path to emit method
17165         invocation stuff for the case when we have a user defined operator. I am
17166         just not able to get it right !
17167
17168 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
17169
17170         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
17171         argument. 
17172
17173         (Expression::MemberLookup): Provide a version that allows to
17174         specify the MemberTypes and BindingFlags. 
17175
17176         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
17177         so it was not fetching variable information from outer blocks.
17178
17179         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
17180         Beforefieldinit as it was buggy.
17181
17182         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
17183         that Ravi put here.  
17184
17185         * class.cs (Constructor::Emit): Only emit if block is not null.
17186         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
17187         deal with this by semantically definining it as if the user had
17188         done it.
17189
17190         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
17191         constructors as we now "emit" them at a higher level.
17192
17193         (TypeContainer::DefineDefaultConstructor): Used to define the
17194         default constructors if none was provided.
17195
17196         (ConstructorInitializer): Add methods Resolve and Emit. 
17197
17198         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
17199
17200 2001-09-17  Ravi Pratap  <ravi@ximian.com>
17201
17202         * class.cs (TypeContainer::EmitDefaultConstructor): Register
17203         the default constructor builder with our hashtable for methodbuilders
17204         to methodcores.
17205
17206         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
17207         and argument_count is 0 in which case we have a match.
17208         (Binary::ResolveOperator): More null checking and miscellaneous coding
17209         style cleanup.
17210
17211 2001-09-17  Ravi Pratap  <ravi@ximian.com>
17212
17213         * rootcontext.cs (IsNameSpace): Compare against null.
17214
17215         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
17216
17217         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
17218         and Unary::Operator.
17219
17220         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
17221         accordingly.
17222
17223         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
17224         we have overloaded operators.
17225         (Binary::ResolveOperator): Implement the part which does the operator overload
17226         resolution.
17227
17228         * class.cs (Operator::Emit): Implement.
17229         (TypeContainer::Emit): Emit the operators we have too.
17230
17231         * expression.cs (Binary::Emit): Update to emit the appropriate code for
17232         the case when we have a user-defined operator.
17233
17234 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
17235
17236         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
17237
17238 2001-09-16  Ravi Pratap  <ravi@ximian.com>
17239
17240         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
17241         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
17242         (Constructor::Emit): Implement.
17243         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
17244         if we have no work to do. 
17245         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
17246         Emit method.
17247
17248         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
17249         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
17250
17251         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
17252         of parent.parent.
17253
17254 2001-09-15  Ravi Pratap  <ravi@ximian.com>
17255
17256         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
17257         in the source.
17258         (Tree::RecordNamespace): Method to do what the name says ;-)
17259         (Tree::Namespaces): Property to get at the namespaces hashtable.
17260
17261         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
17262         keep track.
17263
17264         * rootcontext.cs (IsNamespace): Fixed it :-)
17265
17266 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
17267
17268         * class.cs (TypeContainer::FindMembers): Add support for
17269         constructors. 
17270         (MethodCore): New class that encapsulates both the shared aspects
17271         of a Constructor and a Method.  
17272         (Method, Constructor): Factored pieces into MethodCore.
17273
17274         * driver.cs: Added --fatal which makes errors throw exceptions.
17275         Load System assembly as well as part of the standard library.
17276
17277         * report.cs: Allow throwing exceptions on errors for debugging.
17278
17279         * modifiers.cs: Do not use `parent', instead use the real type
17280         container to evaluate permission settings.
17281
17282         * class.cs: Put Ravi's patch back in.  He is right, and we will
17283         have to cope with the
17284
17285 2001-09-14  Ravi Pratap  <ravi@ximian.com>
17286
17287         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
17288         FamORAssem, not FamANDAssem.
17289
17290 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
17291
17292         * driver.cs: Added --parse option that only parses its input files
17293         and terminates.
17294
17295         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
17296         incorrect.  IsTopLevel is not used to tell whether an object is
17297         root_types or not (that can be achieved by testing this ==
17298         root_types).  But to see if this is a top-level *class* (not
17299         necessarly our "toplevel" container). 
17300
17301 2001-09-14  Ravi Pratap  <ravi@ximian.com>
17302
17303         * enum.cs (Enum::Define): Modify to call the Lookup method on the
17304         parent instead of a direct call to GetType.
17305
17306 2001-09-14  Ravi Pratap  <ravi@ximian.com>
17307
17308         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
17309         Modifiers.TypeAttr. This should just be a call to that method.
17310
17311         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
17312         object so that we can determine if we are top-level or not.
17313
17314         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
17315         TypeContainer too.
17316
17317         * enum.cs (Enum::Define): Ditto.
17318
17319         * modifiers.cs (FieldAttr): Re-write.
17320
17321         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
17322         (TypeContainer::HaveStaticConstructor): New property to provide access
17323         to precisely that info.
17324
17325         * modifiers.cs (MethodAttr): Re-write.
17326         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
17327
17328         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
17329         of top-level types as claimed.
17330
17331 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
17332
17333         * expression.cs (MemberLookup): Fruitless attempt to lookup
17334         constructors.  Maybe I need to emit default constructors?  That
17335         might be it (currently .NET emits this for me automatically).
17336         (Invocation::OverloadResolve): Cope with Arguments == null.
17337         (Invocation::EmitArguments): new function, shared by the new
17338         constructor and us.
17339         (Invocation::Emit): Handle static and instance methods.  Emit
17340         proper call instruction for virtual or non-virtual invocations.
17341         (New::Emit): Implement.
17342         (New::Resolve): Implement.
17343         (MemberAccess:Resolve): Implement.
17344         (MethodGroupExpr::InstanceExpression): used conforming to the spec
17345         to track instances.
17346         (FieldExpr::Resolve): Set type.
17347
17348         * support.cs: Handle empty arguments.
17349                 
17350         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
17351         SimpleLookup): Auxiliary routines to help parse a qualifier
17352         identifier.  
17353
17354         Update qualifier_identifier rule.
17355
17356         * codegen.cs: Removed debugging messages.
17357
17358         * class.cs: Make this a global thing, this acts just as a "key" to
17359         objects that we might have around.
17360
17361         (Populate): Only initialize method_builders_to_methods once.
17362
17363         * expression.cs (PropertyExpr): Initialize type from the
17364         PropertyType. 
17365
17366         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
17367         Resolve pattern.  Attempt to implicitly convert value to boolean.
17368         Emit code.
17369
17370         * expression.cs: Set the type for the int32/int32 argument case.
17371         (Binary::ResolveOperator): Set the return type to boolean for
17372         comparission operators
17373
17374         * typemanager.cs: Remove debugging print code.
17375
17376         (Invocation::Resolve): resolve type.
17377
17378         * class.cs: Allocate a MemberInfo of the correct size, as the code
17379         elsewhere depends on the test to reflect the correct contents.
17380
17381         (Method::) Keep track of parameters, due to System.Reflection holes
17382
17383         (TypeContainer::Populate): Keep track of MethodBuilders to Method
17384         mapping here.
17385
17386         (TypeContainer::FindMembers): Use ArrayList and then copy an array
17387         of the exact size and return that.
17388
17389         (Class::LookupMethodByBuilder): New function that maps
17390         MethodBuilders to its methods.  Required to locate the information
17391         on methods because System.Reflection bit us again.
17392
17393         * support.cs: New file, contains an interface ParameterData and
17394         two implementations: ReflectionParameters and InternalParameters
17395         used to access Parameter information.  We will need to grow this
17396         as required.
17397
17398         * expression.cs (Invocation::GetParameterData): implement a cache
17399         and a wrapper around the ParameterData creation for methods. 
17400         (Invocation::OverloadResolve): Use new code.
17401
17402 2001-09-13  Ravi Pratap  <ravi@ximian.com>
17403
17404         * class.cs (TypeContainer::EmitField): Remove and move into 
17405         (Field::Define): here and modify accordingly.
17406         (Field.FieldBuilder): New member.
17407         (TypeContainer::Populate): Update accordingly.
17408         (TypeContainer::FindMembers): Implement.
17409
17410 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
17411
17412         * statement.cs: (VariableInfo::VariableType): New field to be
17413         initialized with the full type once it is resolved. 
17414
17415 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
17416
17417         * parameter.cs (GetParameterInfo): Use a type cache to compute
17418         things only once, and to reuse this information
17419
17420         * expression.cs (LocalVariableReference::Emit): Implement.
17421         (OpcodeCast::Emit): fix.
17422
17423         (ParameterReference::Resolve): Implement.
17424         (ParameterReference::Emit): Implement.
17425
17426         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
17427         that are expressions need to stay as Expressions.
17428
17429         * typemanager.cs (CSharpName): Returns the C# name of a type if
17430         possible. 
17431
17432         * expression.cs (Expression::ConvertImplicit): New function that
17433         implements implicit type conversions.
17434
17435         (Expression::ImplicitReferenceConversion): Implements implicit
17436         reference conversions.
17437
17438         (EmptyCast): New type for transparent casts.
17439
17440         (OpcodeCast): New type for casts of types that are performed with
17441         a sequence of bytecodes.
17442
17443         (BoxedCast): New type used for casting value types into reference
17444         types.  Emits a box opcode.
17445
17446         (Binary::DoNumericPromotions): Implements numeric promotions of
17447         and computation of the Binary::Type.
17448
17449         (Binary::EmitBranchable): Optimization.
17450
17451         (Binary::Emit): Implement code emission for expressions.
17452
17453         * typemanager.cs (TypeManager): Added two new core types: sbyte
17454         and byte.
17455
17456 2001-09-12  Ravi Pratap  <ravi@ximian.com>
17457
17458         * class.cs (TypeContainer::FindMembers): Method which does exactly
17459         what Type.FindMembers does, only we don't have to use reflection. No
17460         implementation yet.
17461
17462         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
17463         typecontainer objects as we need to get at them.
17464         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
17465
17466         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
17467         typecontainer object.
17468
17469         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
17470         of just a Report object.
17471
17472 2001-09-11  Ravi Pratap  <ravi@ximian.com>
17473
17474         * class.cs (Event::Define): Go back to using the prefixes "add_" and
17475         "remove_"
17476         (TypeContainer::Populate): Now define the delegates of the type too.
17477         (TypeContainer.Delegates): Property to access the list of delegates defined
17478         in the type.
17479
17480         * delegates.cs (Delegate::Define): Implement partially.
17481
17482         * modifiers.cs (TypeAttr): Handle more flags.
17483
17484 2001-09-11  Ravi Pratap  <ravi@ximian.com>
17485
17486         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
17487         and not <=
17488         (Operator::Define): Re-write logic to get types by using the LookupType method
17489         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
17490         (Indexer::Define): Ditto.
17491         (Event::Define): Ditto.
17492         (Property::Define): Ditto.
17493
17494 2001-09-10  Ravi Pratap  <ravi@ximian.com>
17495
17496         * class.cs (TypeContainer::Populate): Now define operators too. 
17497         (TypeContainer.Operators): New property to access the list of operators
17498         in a type.
17499         (Operator.OperatorMethodBuilder): New member to hold the method builder
17500         for the operator we are defining.
17501         (Operator::Define): Implement.
17502
17503 2001-09-10  Ravi Pratap  <ravi@ximian.com>
17504
17505         * class.cs (Event::Define): Make the prefixes of the accessor methods
17506         addOn_ and removeOn_ 
17507
17508         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
17509         of the location being passed in too. Ideally, this should go later since all
17510         error reporting should be done through the Report object.
17511
17512         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
17513         (Populate): Iterate thru the indexers we have and define them too.
17514         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
17515         for the get and set accessors.
17516         (Indexer::Define): Implement.
17517
17518 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
17519
17520         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
17521         my previous implementation, did not work.
17522
17523         * typemanager.cs: Add a couple of missing types (the longs).
17524
17525         * literal.cs: Use TypeManager.bool_type instead of getting it.
17526
17527         * expression.cs (EventExpr): New kind of expressions.
17528         (Expressio::ExprClassFromMemberInfo): finish
17529
17530 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
17531
17532         * assign.cs: Emit stores to static fields differently.
17533
17534 2001-09-08  Ravi Pratap  <ravi@ximian.com>
17535
17536         * Merge in changes and adjust code to tackle conflicts. Backed out my
17537         code in Assign::Resolve ;-) 
17538
17539 2001-09-08  Ravi Pratap  <ravi@ximian.com>
17540
17541         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
17542         instead Report.Error and also pass in the location.
17543         (CSharpParser::Lexer): New readonly property to return the reference
17544         to the Tokenizer object.
17545         (declare_local_variables): Use Report.Error with location instead of plain 
17546         old error.
17547         (CheckDef): Ditto.
17548
17549         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
17550         (Operator.CheckBinaryOperator): Ditto.
17551
17552         * cs-parser.jay (operator_declarator): Update accordingly.
17553
17554         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
17555         (CheckBinaryOperator): Same here.
17556
17557         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
17558         on the name without any prefixes of namespace names etc. This is because we
17559         already might have something already fully qualified like 
17560         'System.Console.WriteLine'
17561
17562         * assign.cs (Resolve): Begin implementation. Stuck ;-)
17563
17564 2001-09-07  Ravi Pratap  <ravi@ximian.com>
17565
17566         * cs-tokenizer.cs (location): Return a string which also contains
17567         the file name.
17568
17569         * expression.cs (ElementAccess): New class for expressions of the
17570         type 'element access.'
17571         (BaseAccess): New class for expressions of the type 'base access.'
17572         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
17573         respectively.
17574
17575         * cs-parser.jay (element_access): Implement action.
17576         (base_access): Implement actions.
17577         (checked_expression, unchecked_expression): Implement.
17578
17579         * cs-parser.jay (local_variable_type): Correct and implement.
17580         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
17581
17582         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
17583
17584         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
17585         name and the specifiers.
17586
17587         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
17588
17589         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
17590         making them all public ;-)
17591
17592         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
17593         class anyways.
17594
17595 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
17596
17597         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
17598         PropertyExprs.
17599         (FieldExpr, PropertyExprs): New resolved expressions.
17600         (SimpleName::MemberStaticCheck): Perform static checks for access
17601         to non-static fields on static methods. Maybe this should be
17602         generalized for MemberAccesses. 
17603         (SimpleName::ResolveSimpleName): More work on simple name
17604         resolution. 
17605
17606         * cs-parser.jay (primary_expression/qualified_identifier): track
17607         the parameter index.
17608
17609         * codegen.cs (CodeGen::Save): Catch save exception, report error.
17610         (EmitContext::EmitBoolExpression): Chain to expression generation
17611         instead of temporary hack.
17612         (::EmitStatementExpression): Put generic expression code generation.
17613
17614         * assign.cs (Assign::Emit): Implement variable assignments to
17615         local variables, parameters and fields.
17616
17617 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
17618
17619         * statement.cs (Block::GetVariableInfo): New method, returns the
17620         VariableInfo for a variable name in a block.
17621         (Block::GetVariableType): Implement in terms of GetVariableInfo
17622
17623         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
17624         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
17625
17626 2001-09-06  Ravi Pratap  <ravi@ximian.com>
17627
17628         * cs-parser.jay (operator_declaration): Continue on my quest : update
17629         to take attributes argument.
17630         (event_declaration): Ditto.
17631         (enum_declaration): Ditto.
17632         (indexer_declaration): Ditto.
17633
17634         * class.cs (Operator::Operator): Update constructor accordingly.
17635         (Event::Event): Ditto.
17636
17637         * delegate.cs (Delegate::Delegate): Same here.
17638
17639         * enum.cs (Enum::Enum): Same here.
17640
17641 2001-09-05  Ravi Pratap  <ravi@ximian.com>
17642
17643         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
17644
17645         * ../tests/cs0658.cs : New file to demonstrate error 0658.
17646
17647         * attribute.cs (Attributes): New class to encapsulate all attributes which were
17648         being passed around as an arraylist.
17649         (Attributes::AddAttribute): Method to add attribute sections.
17650
17651         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
17652         (struct_declaration): Update accordingly.
17653         (constant_declaration): Update.
17654         (field_declaration): Update.
17655         (method_header): Update.
17656         (fixed_parameter): Update.
17657         (parameter_array): Ditto.
17658         (property_declaration): Ditto.
17659         (destructor_declaration): Ditto.
17660
17661         * class.cs (Struct::Struct): Update constructors accordingly.
17662         (Class::Class): Ditto.
17663         (Field::Field): Ditto.
17664         (Method::Method): Ditto.
17665         (Property::Property): Ditto.
17666         (TypeContainer::OptAttribute): update property's return type.
17667
17668         * interface.cs (Interface.opt_attributes): New member.
17669         (Interface::Interface): Update to take the extra Attributes argument.
17670
17671         * parameter.cs (Parameter::Parameter): Ditto.
17672
17673         * constant.cs (Constant::Constant): Ditto.
17674
17675         * interface.cs (InterfaceMemberBase): New OptAttributes field.
17676         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
17677         the attributes as a parameter.
17678         (InterfaceProperty): Update constructor call.
17679         (InterfaceEvent): Ditto.
17680         (InterfaceMethod): Ditto.
17681         (InterfaceIndexer): Ditto.
17682
17683         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
17684         pass the attributes too.
17685         (interface_event_declaration): Ditto.
17686         (interface_property_declaration): Ditto.
17687         (interface_method_declaration): Ditto.
17688         (interface_declaration): Ditto.
17689
17690 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
17691
17692         * class.cs (Method::Define): Track the "static Main" definition to
17693         create an entry point. 
17694
17695         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
17696         EntryPoint if we find it. 
17697
17698         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
17699         (EmitContext::ig): Make this variable public.
17700
17701         * driver.cs: Make the default output file be the first file name
17702         with the .exe extension.  
17703
17704         Detect empty compilations
17705
17706         Handle various kinds of output targets.  Handle --target and
17707         rename -t to --dumper.
17708
17709         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
17710         methods inherited from Expression return now an Expression.  This
17711         will is used during the tree rewriting as we resolve them during
17712         semantic analysis.
17713
17714         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
17715         the spec.  Missing entirely is the information about
17716         accessability of elements of it.
17717
17718         (Expression::ExprClassFromMemberInfo): New constructor for
17719         Expressions that creates a fully initialized Expression based on
17720         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
17721         a Type.
17722
17723         (Invocation::Resolve): Begin implementing resolution of invocations.
17724
17725         * literal.cs (StringLiteral):  Implement Emit.
17726
17727 2001-09-05  Ravi Pratap  <ravi@ximian.com>
17728
17729         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
17730         member.
17731
17732 2001-09-04  Ravi Pratap  <ravi@ximian.com>
17733
17734         * cs-parser.jay (attribute_arguments): Implement actions.
17735         (attribute): Fix bug in production. Implement action.
17736         (attribute_list): Implement.
17737         (attribute_target): Implement.
17738         (attribute_target_specifier, opt_target_specifier): Implement
17739         (CheckAttributeTarget): New method to check if the attribute target
17740         is valid.
17741         (attribute_section): Implement.
17742         (opt_attributes): Implement.
17743
17744         * attribute.cs : New file to handle attributes.
17745         (Attribute): Class to hold attribute info.
17746
17747         * cs-parser.jay (opt_attribute_target_specifier): Remove production
17748         (attribute_section): Modify production to use 2 different rules to 
17749         achieve the same thing. 1 s/r conflict down !
17750         Clean out commented, useless, non-reducing dimension_separator rules.
17751
17752         * class.cs (TypeContainer.attributes): New member to hold list
17753         of attributes for a type.
17754         (Struct::Struct): Modify to take one more argument, the attribute list.
17755         (Class::Class): Ditto.
17756         (Field::Field): Ditto.
17757         (Method::Method): Ditto.
17758         (Property::Property): Ditto.
17759
17760         * cs-parser.jay (struct_declaration): Update constructor call to
17761         pass in the attributes too.
17762         (class_declaration): Ditto.
17763         (constant_declaration): Ditto.
17764         (field_declaration): Ditto.
17765         (method_header): Ditto.
17766         (fixed_parameter): Ditto.
17767         (parameter_array): Ditto.
17768         (property_declaration): Ditto.
17769
17770         * constant.cs (Constant::Constant): Update constructor similarly.
17771         Use System.Collections.
17772
17773         * parameter.cs (Parameter::Parameter): Update as above.
17774
17775 2001-09-02  Ravi Pratap  <ravi@ximian.com>
17776
17777         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
17778         (TypeContainer.delegates): New member to hold list of delegates.
17779
17780         * cs-parser.jay (delegate_declaration): Implement the action correctly 
17781         this time as I seem to be on crack ;-)
17782
17783 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
17784
17785         * rootcontext.cs (RootContext::IsNamespace): new function, used to
17786         tell whether an identifier represents a namespace.
17787
17788         * expression.cs (NamespaceExpr): A namespace expression, used only
17789         temporarly during expression resolution.
17790         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
17791         utility functions to resolve names on expressions.
17792
17793 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
17794
17795         * codegen.cs: Add hook for StatementExpressions. 
17796
17797         * class.cs: Fix inverted test for static flag in methods.
17798
17799 2001-09-02  Ravi Pratap  <ravi@ximian.com>
17800
17801         * class.cs (Operator::CheckUnaryOperator): Correct error number used
17802         to make it coincide with MS' number.
17803         (Operator::CheckBinaryOperator): Ditto.
17804
17805         * ../errors/errors.txt : Remove error numbers added earlier.
17806
17807         * ../errors/cs1019.cs : Test case for error # 1019
17808
17809         * ../errros/cs1020.cs : Test case for error # 1020
17810
17811         * cs-parser.jay : Clean out commented cruft.
17812         (dimension_separators, dimension_separator): Comment out. Ostensibly not
17813         used anywhere - non-reducing rule.
17814         (namespace_declarations): Non-reducing rule - comment out.
17815
17816         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
17817         with TypeContainer::AddEnum.
17818
17819         * delegate.cs : New file for delegate handling classes.
17820         (Delegate): Class for declaring delegates.
17821
17822         * makefile : Update.
17823
17824         * cs-parser.jay (delegate_declaration): Implement.
17825
17826 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
17827
17828         * class.cs (Event::Define): Implement.
17829         (Event.EventBuilder): New member.
17830
17831         * class.cs (TypeContainer::Populate): Update to define all enums and events
17832         we have.
17833         (Events): New property for the events arraylist we hold. Shouldn't we move to using
17834         readonly fields for all these cases ?
17835
17836 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
17837
17838         * class.cs (Property): Revamp to use the convention of making fields readonly.
17839         Accordingly modify code elsewhere.
17840
17841         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
17842         the Define method of the Property class.
17843
17844         * class.cs : Clean up applied patch and update references to variables etc. Fix 
17845         trivial bug.
17846         (TypeContainer::Populate): Update to define all the properties we have. Also
17847         define all enumerations.
17848
17849         * enum.cs (Define): Implement.
17850
17851 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
17852
17853         * cs-parser.jay (overloadable_operator): The semantic value is an
17854         enum of the Operator class.
17855         (operator_declarator): Implement actions.
17856         (operator_declaration): Implement.
17857
17858         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
17859         validity of definitions.
17860         (Operator::CheckBinaryOperator): Static method to check for binary operators
17861         (TypeContainer::AddOperator): New method to add an operator to a type.
17862
17863         * cs-parser.jay (indexer_declaration): Added line to actually call the
17864         AddIndexer method so it gets added ;-)
17865
17866         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
17867         already taken care of by the MS compiler ?  
17868
17869 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
17870
17871         * class.cs (Operator): New class for operator declarations.
17872         (Operator::OpType): Enum for the various operators.
17873
17874 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
17875
17876         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
17877         ostensibly handle this in semantic analysis.
17878
17879         * cs-parser.jay (general_catch_clause): Comment out
17880         (specific_catch_clauses, specific_catch_clause): Ditto.
17881         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
17882         (catch_args, opt_catch_args): New productions.
17883         (catch_clause): Rewrite to use the new productions above
17884         (catch_clauses): Modify accordingly.
17885         (opt_catch_clauses): New production to use in try_statement
17886         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
17887         and re-write the code in the actions to extract the specific and
17888         general catch clauses by being a little smart ;-)
17889
17890         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
17891         Hooray, try and catch statements parse fine !
17892
17893 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
17894
17895         * statement.cs (Block::GetVariableType): Fix logic to extract the type
17896         string from the hashtable of variables.
17897
17898         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
17899         I end up making that mistake ;-)
17900         (catch_clauses): Fixed gross error which made Key and Value of the 
17901         DictionaryEntry the same : $1 !!
17902
17903 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
17904
17905         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
17906
17907         * cs-parser.jay (event_declaration): Correct to remove the semicolon
17908         when the add and remove accessors are specified. 
17909
17910 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
17911
17912         * cs-parser.jay (IndexerDeclaration): New helper class to hold
17913         information about indexer_declarator.
17914         (indexer_declarator): Implement actions.
17915         (parsing_indexer): New local boolean used to keep track of whether
17916         we are parsing indexers or properties. This is necessary because 
17917         implicit_parameters come into picture even for the get accessor in the 
17918         case of an indexer.
17919         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
17920
17921         * class.cs (Indexer): New class for indexer declarations.
17922         (TypeContainer::AddIndexer): New method to add an indexer to a type.
17923         (TypeContainer::indexers): New member to hold list of indexers for the
17924         type.
17925
17926 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
17927
17928         * cs-parser.jay (add_accessor_declaration): Implement action.
17929         (remove_accessor_declaration): Implement action.
17930         (event_accessors_declaration): Implement
17931         (variable_declarators): swap statements for first rule - trivial.
17932
17933         * class.cs (Event): New class to hold information about event
17934         declarations.
17935         (TypeContainer::AddEvent): New method to add an event to a type
17936         (TypeContainer::events): New member to hold list of events.
17937
17938         * cs-parser.jay (event_declaration): Implement actions.
17939
17940 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
17941
17942         * cs-parser.jay (dim_separators): Implement. Make it a string
17943         concatenating all the commas together, just as they appear.
17944         (opt_dim_separators): Modify accordingly
17945         (rank_specifiers): Update accordingly. Basically do the same
17946         thing - instead, collect the brackets here.
17947         (opt_rank_sepcifiers): Modify accordingly.
17948         (array_type): Modify to actually return the complete type string
17949         instead of ignoring the rank_specifiers.
17950         (expression_list): Implement to collect the expressions
17951         (variable_initializer): Implement. We make it a list of expressions
17952         essentially so that we can handle the array_initializer case neatly too.
17953         (variable_initializer_list): Implement.
17954         (array_initializer): Make it a list of variable_initializers
17955         (opt_array_initializer): Modify accordingly.
17956
17957         * expression.cs (New::NType): Add enumeration to help us
17958         keep track of whether we have an object/delegate creation
17959         or an array creation.
17960         (New:NewType, New::Rank, New::Indices, New::Initializers): New
17961         members to hold data about array creation.
17962         (New:New): Modify to update NewType
17963         (New:New): New Overloaded contructor for the array creation
17964         case.
17965
17966         * cs-parser.jay (array_creation_expression): Implement to call
17967         the overloaded New constructor.
17968
17969 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
17970
17971         * class.cs (TypeContainer::Constructors): Return member
17972         constructors instead of returning null.
17973
17974 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
17975
17976         * typemanager.cs (InitCoreTypes): Initialize the various core
17977         types after we have populated the type manager with the user
17978         defined types (this distinction will be important later while
17979         compiling corlib.dll)
17980
17981         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
17982         on Expression Classification.  Now all expressions have a method
17983         `Resolve' and a method `Emit'.
17984
17985         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
17986         generation from working.     Also add some temporary debugging
17987         code. 
17988
17989 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
17990
17991         * codegen.cs: Lots of code generation pieces.  This is only the
17992         beginning, will continue tomorrow with more touches of polish.  We
17993         handle the fundamentals of if, while, do, for, return.  Others are
17994         trickier and I need to start working on invocations soon.
17995
17996         * gen-treedump.cs: Bug fix, use s.Increment here instead of
17997         s.InitStatement. 
17998
17999         * codegen.cs (EmitContext): New struct, used during code
18000         emission to keep a context.   Most of the code generation will be
18001         here. 
18002
18003         * cs-parser.jay: Add embedded blocks to the list of statements of
18004         this block.  So code generation proceeds in a top down fashion.
18005
18006 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
18007
18008         * statement.cs: Add support for multiple child blocks.
18009
18010 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
18011
18012         * codegen.cs (EmitCode): New function, will emit the code for a
18013         Block of code given a TypeContainer and its ILGenerator. 
18014
18015         * statement.cs (Block): Standard public readonly optimization.
18016         (Block::Block constructors): Link children. 
18017         (Block::Child): Child Linker.
18018         (Block::EmitVariables): Emits IL variable declarations.
18019
18020         * class.cs: Drop support for MethodGroups here, delay until
18021         Semantic Analysis.
18022         (Method::): Applied the same simplification that I did before, and
18023         move from Properties to public readonly fields.
18024         (Method::ParameterTypes): Returns the parameter types for the
18025         function, and implements a cache that will be useful later when I
18026         do error checking and the semantic analysis on the methods is
18027         performed.
18028         (Constructor::GetCallingConvention): Renamed from CallingConvetion
18029         and made a method, optional argument tells whether this is a class
18030         or a structure to apply the `has-this' bit.
18031         (Method::GetCallingConvention): Implement, returns the calling
18032         convention. 
18033         (Method::Define): Defines the type, a second pass is performed
18034         later to populate the methods.
18035
18036         (Constructor::ParameterTypes): implement a cache similar to the
18037         one on Method::ParameterTypes, useful later when we do semantic
18038         analysis. 
18039
18040         (TypeContainer::EmitMethod):  New method.  Emits methods.
18041
18042         * expression.cs: Removed MethodGroup class from here.
18043
18044         * parameter.cs (Parameters::GetCallingConvention): new method.
18045
18046 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
18047
18048         * class.cs (TypeContainer::Populate): Drop RootContext from the
18049         argument. 
18050
18051         (Constructor::CallingConvention): Returns the calling convention.
18052         (Constructor::ParameterTypes): Returns the constructor parameter
18053         types. 
18054
18055         (TypeContainer::AddConstructor): Keep track of default constructor
18056         and the default static constructor.
18057
18058         (Constructor::) Another class that starts using `public readonly'
18059         instead of properties. 
18060
18061         (Constructor::IsDefault): Whether this is a default constructor. 
18062
18063         (Field::) use readonly public fields instead of properties also.
18064
18065         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
18066         track of static constructors;  If none is used, turn on
18067         BeforeFieldInit in the TypeAttributes. 
18068
18069         * cs-parser.jay (opt_argument_list): now the return can be null
18070         for the cases where there are no arguments. 
18071
18072         (constructor_declarator): If there is no implicit `base' or
18073         `this', then invoke the default parent constructor. 
18074
18075         * modifiers.cs (MethodAttr): New static function maps a set of
18076         modifiers flags into a MethodAttributes enum
18077         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
18078         MethodAttr, TypeAttr to represent the various mappings where the
18079         modifiers are used.
18080         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
18081
18082 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
18083
18084         * parameter.cs (GetParameterInfo): Fix bug where there would be no
18085         method arguments.
18086
18087         * interface.cs (PopulateIndexer): Implemented the code generator
18088         for interface indexers.
18089
18090 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
18091
18092         * interface.cs (InterfaceMemberBase): Now we track the new status
18093         here.  
18094
18095         (PopulateProperty): Implement property population.  Woohoo!  Got
18096         Methods and Properties going today. 
18097
18098         Removed all the properties for interfaces, and replaced them with
18099         `public readonly' fields. 
18100
18101 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
18102
18103         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
18104         initialize their hashtables/arraylists only when they are needed
18105         instead of doing this always.
18106
18107         * parameter.cs: Handle refs and out parameters.
18108
18109         * cs-parser.jay: Use an ArrayList to construct the arguments
18110         instead of the ParameterCollection, and then cast that to a
18111         Parameter[] array.
18112
18113         * parameter.cs: Drop the use of ParameterCollection and use
18114         instead arrays of Parameters.
18115
18116         (GetParameterInfo): Use the Type, not the Name when resolving
18117         types. 
18118
18119 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
18120
18121         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
18122         and instead use public readonly fields.
18123
18124         * class.cs: Put back walking code for type containers.
18125
18126 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
18127
18128         * class.cs (MakeConstant): Code to define constants.
18129
18130         * rootcontext.cs (LookupType): New function.  Used to locate types 
18131
18132
18133 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
18134
18135         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
18136         this System.Reflection code is.  Kudos to Microsoft
18137
18138         * typemanager.cs: Implement a type cache and avoid loading all
18139         types at boot time.  Wrap in LookupType the internals.  This made
18140         the compiler so much faster.  Wow.  I rule!
18141
18142         * driver.cs: Make sure we always load mscorlib first (for
18143         debugging purposes, nothing really important).
18144
18145         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
18146         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
18147
18148         * rootcontext.cs: Lookup types on their namespace;  Lookup types
18149         on namespaces that have been imported using the `using' keyword.
18150
18151         * class.cs (TypeContainer::TypeAttr): Virtualize.
18152         (Class::TypeAttr): Return attributes suitable for this bad boy.
18153         (Struct::TypeAttr): ditto.
18154         Handle nested classes.
18155         (TypeContainer::) Remove all the type visiting code, it is now
18156         replaced with the rootcontext.cs code
18157
18158         * rootcontext.cs (GetClassBases): Added support for structs. 
18159
18160 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
18161
18162         * interface.cs, statement.cs, class.cs, parameter.cs,
18163         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
18164         Drop use of TypeRefs, and use strings instead.
18165
18166 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
18167
18168         * rootcontext.cs: 
18169
18170         * class.cs (Struct::Struct): set the SEALED flags after
18171         checking the modifiers.
18172         (TypeContainer::TypeAttr): new property, returns the
18173         TypeAttributes for a class.  
18174
18175         * cs-parser.jay (type_list): Oops, list production was creating a
18176         new list of base types.
18177
18178         * rootcontext.cs (StdLib): New property.
18179         (GetInterfaceTypeByName): returns an interface by type name, and
18180         encapsulates error handling here.
18181         (GetInterfaces): simplified.
18182         (ResolveTree): Encapsulated all the tree resolution here.
18183         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
18184         types. 
18185
18186         * driver.cs: Add support for --nostdlib, to avoid loading the
18187         default assemblies.
18188         (Main): Do not put tree resolution here. 
18189
18190         * rootcontext.cs: Beginning of the class resolution.
18191
18192 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
18193
18194         * rootcontext.cs: Provide better error reporting. 
18195
18196         * cs-parser.jay (interface_base): set our $$ to be interfaces.
18197
18198         * rootcontext.cs (CreateInterface): Handle the case where there
18199         are no parent interfaces.
18200
18201         (CloseTypes): Routine to flush types at the end.
18202         (CreateInterface): Track types.
18203         (GetInterfaces): Returns an array of Types from the list of
18204         defined interfaces.
18205
18206         * typemanager.c (AddUserType): Mechanism to track user types (puts
18207         the type on the global type hash, and allows us to close it at the
18208         end). 
18209
18210 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
18211
18212         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
18213         RecordInterface instead.
18214
18215         * cs-parser.jay: Updated to reflect changes above.
18216
18217         * decl.cs (Definition): Keep track of the TypeBuilder type that
18218         represents this type here.  Not sure we will use it in the long
18219         run, but wont hurt for now.
18220
18221         * driver.cs: Smaller changes to accomodate the new code.
18222
18223         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
18224         when done. 
18225
18226         * rootcontext.cs (CreateInterface):  New method, used to create
18227         the System.TypeBuilder type for interfaces.
18228         (ResolveInterfaces): new entry point to resolve the interface
18229         hierarchy. 
18230         (CodeGen): Property, used to keep track of the code generator.
18231
18232 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
18233
18234         * cs-parser.jay: Add a second production for delegate_declaration
18235         with `VOID'.
18236
18237         (enum_body): Put an opt_comma here instead of putting it on
18238         enum_body or enum_member_declarations so we can handle trailing
18239         commas on enumeration members.  Gets rid of a shift/reduce.
18240
18241         (type_list): Need a COMMA in the middle.
18242
18243         (indexer_declaration): Tell tokenizer to recognize get/set
18244
18245         * Remove old targets.
18246
18247         * Re-add the parser target.
18248
18249 2001-07-13  Simon Cozens <simon@simon-cozens.org>
18250
18251         * cs-parser.jay: Add precendence rules for a number of operators
18252         ot reduce the number of shift/reduce conflicts in the grammar.
18253
18254 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
18255
18256         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
18257         and put it here.
18258
18259         Get rid of old crufty code.
18260
18261         * rootcontext.cs: Use this to keep track of the parsed
18262         representation and the defined types available to the program. 
18263
18264         * gen-treedump.cs: adjust for new convention.
18265
18266         * type.cs: Split out the type manager, and the assembly builder
18267         from here. 
18268
18269         * typemanager.cs: the type manager will live here now.
18270
18271         * cil-codegen.cs: And the code generator here. 
18272
18273 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
18274
18275         * makefile: Fixed up for easy making.
18276
18277 2001-07-13  Simon Cozens <simon@simon-cozens.org>
18278
18279         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
18280         the 
18281
18282         (unary_expression): Expand pre_increment_expression and
18283         post_decrement_expression to reduce a shift/reduce.
18284
18285 2001-07-11  Simon Cozens
18286
18287         * cs-tokenizer.cs: Hex numbers should begin with a 0.
18288
18289         Improve allow_keyword_as_indent name.
18290
18291 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
18292
18293         * Adjustments for Beta2. 
18294
18295 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
18296
18297         * decl.cs: Added `Define' abstract method.
18298         (InTransit): new property, used to catch recursive definitions. 
18299
18300         * interface.cs: Implement `Define'. 
18301
18302         * modifiers.cs: Map Modifiers.constants to
18303         System.Reflection.TypeAttribute flags.
18304
18305         * class.cs: Keep track of types and user-defined types.
18306         (BuilderInit): New method for creating an assembly
18307         (ResolveType): New function to launch the resolution process, only
18308         used by interfaces for now.
18309
18310         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
18311         that are inserted into the name space. 
18312
18313 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
18314
18315         * ARGH.  I have screwed up my tree so many times due to the use of
18316         rsync rather than using CVS.  Going to fix this at once. 
18317
18318         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
18319         load types.
18320
18321 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
18322
18323         * Experiment successful: Use System.Type rather that our own
18324         version of Type.  
18325
18326 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
18327
18328         * cs-parser.jay: Removed nsAliases from here.
18329
18330         Use new namespaces, handle `using XXX;' 
18331
18332         * namespace.cs: Reimplemented namespace handling, use a recursive
18333         definition of the class.  Now we can keep track of using clauses
18334         and catch invalid using clauses.
18335
18336 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
18337
18338         * gen-treedump.cs: Adapted for all the renaming.
18339
18340         * expression.cs (Expression): this class now has a Type property
18341         which returns an expression Type.
18342
18343         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
18344         `Type', as this has a different meaning now in the base
18345
18346 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
18347
18348         * interface.cs, class.cs: Removed from all the sources the
18349         references to signature computation, as we can not do method
18350         signature computation during the parsing time, as we are not
18351         trying to solve at that point distinguishing:
18352
18353         class X {
18354                 void a (Blah x) {}
18355                 void a (NS.Blah x) {}
18356         }
18357
18358         Which depending on the context might be valid or not, as we do not
18359         know if Blah is the same thing as NS.Blah at that point.
18360
18361         * Redid everything so the code uses TypeRefs now instead of
18362         Types.  TypeRefs are just temporary type placeholders, that need
18363         to be resolved.  They initially have a pointer to a string and the
18364         current scope in which they are used.  This is used later by the
18365         compiler to resolve the reference to an actual Type. 
18366
18367         * DeclSpace is no longer a CIR.Type, and neither are
18368         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
18369         are all DeclSpaces, but no Types. 
18370
18371         * type.cs (TypeRefManager): This implements the TypeRef manager,
18372         which keeps track of all the types that need to be resolved after
18373         the parsing has finished. 
18374
18375 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
18376
18377         * ARGH.  We are going to have to store `foreach' as a class rather
18378         than resolving it, as we need to verify error 1579 after name
18379         resolution.   *OR* we could keep a flag that says `This request to
18380         IEnumerator comes from a foreach statement' which we can then use
18381         to generate the error.
18382
18383 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
18384
18385         * class.cs (TypeContainer.AddMethod): we now add methods to the
18386         MethodGroup instead of the method hashtable.  
18387
18388         * expression.cs: Add MethodGroup abstraction, which gets us one
18389         step closer to the specification in the way we handle method
18390         declarations.  
18391
18392         * cs-parser.jay (primary_expression): qualified_identifier now
18393         tried to match up an identifier to a local variable reference or
18394         to a parameter reference.
18395
18396         current_local_parameters is now a parser global variable that
18397         points to the current parameters for the block, used during name
18398         lookup.
18399
18400         (property_declaration): Now creates an implicit `value' argument to
18401         the set accessor.
18402
18403 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
18404
18405         * parameter.cs: Do not use `param' arguments as part of the
18406         signature, per the spec.
18407
18408 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
18409
18410         * decl.cs: Base class for classes, structs and interfaces.  This
18411         is the "Declaration Space" 
18412
18413         * cs-parser.jay: Use CheckDef for checking declaration errors
18414         instead of having one on each function.
18415
18416         * class.cs: Factor out some code for handling error handling in
18417         accordance to the "Declarations" section in the "Basic Concepts"
18418         chapter in the ECMA C# spec.
18419
18420         * interface.cs: Make all interface member classes derive from
18421         InterfaceMemberBase.
18422
18423 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
18424
18425         * Many things: all interfaces are parsed and generated in
18426         gen-treedump.  Support for member variables, constructors,
18427         destructors, properties, constants is there.
18428
18429         Beginning of the IL backend, but very little done, just there for
18430         testing purposes. 
18431
18432 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
18433
18434         * cs-parser.jay: Fix labeled statement.
18435
18436         * cs-tokenizer.cs (escape): Escape " and ' always.
18437         ref_line, ref_name: keep track of the line/filename as instructed
18438         by #line by the compiler.
18439         Parse #line.
18440
18441 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
18442
18443         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
18444         to match the values in System.CodeDOM.
18445
18446         Divid renamed to Divide.
18447
18448         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
18449         statements. 
18450         (Statements.set): remove.
18451
18452         * System.CodeDOM/CodeCatchClause.cs: always have a valid
18453         statements. 
18454
18455         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
18456         falseStatements always have valid values. 
18457
18458         * cs-parser.jay: Use System.CodeDOM now.
18459