Remove some code duplication
[mono.git] / mcs / gmcs / ChangeLog
1 2007-08-03  Raja R Harinath  <harinath@gmail.com>
2
3         * cs-parser.jay (class_declaration): Update to changes in class.cs.
4         Move calling of 'AddBasesForPart' to ...
5         (class_bases): ... here.
6         (struct_declaration, interface_declaration): Update to changes.
7
8 2007-08-02  Raja R Harinath  <harinath@gmail.com>
9
10         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
11         * cs-parser.jay: Some whitespace cleanups.
12         (method_header): Refer to the correct symbol for parameters.
13
14 2007-08-01  Marek Safar  <marek.safar@gmail.com>
15
16         A fix for bug #82181
17         * cs-parser.jay: Ignore partial keyword inside block expression.
18         
19 2007-08-01  Marek Safar  <marek.safar@gmail.com>
20
21         ** C# 3.0 Type Inference (major bits are working)
22         
23         * generic.cs: Introduced new abstract class as an entry point to type
24         inference. Old type inference moved to TypeInferenceV2. Implemented C# 3.0
25         type inference as descibed in the standard in TypeInferenceV2 class.
26         
27         * linq.cs (ALinqExpression): Disabled caching because it's wrong.
28         
29 2007-07-25  Jb Evain  <jbevain@novell.com>
30
31         * Makefile: don't install on net_2_1.
32
33 2007-07-18  Marek Safar  <marek.safar@gmail.com>
34
35         * cs-parser.jay: Use ImplicitLambdaParameter everywhere.
36
37 2007-07-17  Marek Safar  <marek.safar@gmail.com>
38
39         * cs-parser.jay: Correct placeholder for implicit linq parameter.
40         
41         * linq: Add ImplicitArgument.
42
43 2007-07-03  Marek Safar  <marek.safar@gmail.com>
44
45         * cs-parser.jay: Switch to ImplicitLambdaParameter.
46
47 2007-07-03  Marek Safar  <marek.safar@gmail.com>
48
49         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
50         members too.
51         
52         * linq.cs (QueryExpression.DoResolve): Resolve implicitly typed query
53         variable.
54         
55 2007-06-20  Marek Safar  <marek.safar@gmail.com>
56
57         * cs-parser.jay: Reworked var keyword handling. We cannot handle var as
58         static keyword because var becomes keyword only if no type with the var
59         name exists in the scope of variable which uses var declaration.
60         
61 2007-06-18  Marek Safar  <marek.safar@gmail.com>
62
63         * cs-parser.jay: Add implicitly typed local variable checks.
64
65 2007-06-15  Marek Safar  <marek.safar@gmail.com>
66
67         * cs-parser.jay: Correctly split generic arguments and generic
68          parameters. Correctly implemented typeof of generic unbound types.
69
70 2007-06-14  Marek Safar  <marek.safar@gmail.com>
71
72         * cs-parser.jay: Assembly and module attributes must precede all other
73         elements except using clauses and extern alias declarations.
74
75 2007-06-08  Marek Safar  <marek.safar@gmail.com>
76
77         * cs-parser.jay: Uses newly defined GroupBy class.
78         
79         * linq.cs (GroupBy): Implemented.
80         (AQueryClause.BuildQueryClause): Refactored to allow customize query
81         method arguments.
82
83 2007-06-08  Marek Safar  <marek.safar@gmail.com>
84
85         * generics.cs (InferTypeArguments): Uses AnonymousMethodExpression
86         InferTypeArguments.
87
88 2007-06-06  Marek Safar  <marek.safar@gmail.com>
89
90         * generics.cs (TypeArguments): New contructor fow known number of
91         arguments.
92
93 2007-06-04  Raja R Harinath  <rharinath@novell.com>
94
95         * linq.cs (Select.DoResolve): Pass the created parameters to the
96         ToplevelBlock too.
97
98 2007-05-29  Raja R Harinath  <rharinath@novell.com>
99
100         * cs-parser.jay: Update to changes in ToplevelBlock.
101         (top_current_block): Remove.
102
103 2007-05-27  Raja R Harinath  <harinath@gmail.com>
104
105         * cs-parser.jay: Update to new ExplicitBlock invariant.
106
107         * cs-parser.jay: Update to changes introduced in Block and
108         ExplicitBlock.
109
110 2007-05-25  Raja R Harinath  <rharinath@novell.com>
111
112         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
113         modifying current_block directly.
114
115 2007-05-22  Scott Peterson  <lunchtimemama@gmail.com>
116         
117         * cs-parser.jay: Implemented automatic properties (C# 3.0)
118
119 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
120         
121         * cs-parser.jay: Improved grammar for object and collection
122           initialization.
123
124 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
125
126         This code is contributed under the MIT X11 license
127         
128         * cs-parser.jay: Added support for C# 3.0 language features:
129           Variable type inference (the "var" keyword)
130           Anonymous types
131           Array type inference
132           Object initialization
133           Collection initialization
134
135 2007-05-06  Marek Safar  <marek.safar@gmail.com>
136
137         A fix for bug #81500
138         * cs-parser.jay: Add special handling for coalescing operator.
139
140 2007-05-02  Raja R Harinath  <rharinath@novell.com>
141
142         Fix regression in cs0631-3.cs
143         * cs-parser.jay (operator_declarator): Add opt_attributes to error
144         fallback.  Make error fallback catch more cases.
145
146 2007-05-01  Miguel de Icaza  <miguel@novell.com>
147
148         * cs-parser.jay: Allow parameters in operator declarations to have
149         attributes. 
150
151 2007-04-27  Miguel de Icaza  <miguel@novell.com>
152
153         * generic.cs (TypeManager.LambdaInfer): now this routine will
154         make only one inference from the list of lambda expression that
155         have not participated in inferring a type.
156
157         (TypeManager.InferTypeArguments): The logic that drives the type
158         inference in lambda expressions is now driven here. 
159
160 2007-04-23  Miguel de Icaza  <miguel@novell.com>
161
162         * generic.cs: Large update to LambdaInfer, this is merely an
163         update to start the lambda type inference.   It is by no means
164         complete.  It is currently merely able to build a sample program
165         (with no iteration for the type parameters).
166
167 2007-04-12  Duncan Mak  <duncan@a-chinaman.com>
168
169         * cs-parser.jay (interface_method_declaration_body): Fixed typo.
170
171 2007-04-08  Marek Safar  <marek.safar@gmail.com>
172
173         * cs-parser.jay, linq.cs: First select implementation (hacky).
174
175         * generic.cs (InferTypeArguments): Simplified.
176
177 2007-03-31  Marek Safar  <marek.safar@gmail.com>
178
179         * generic.cs (InferTypeArguments): Restored validation check.
180         (InferTypeArguments): Move all logic to Compatible method for re-usability.
181
182 2007-03-25  Marek Safar  <marek.safar@gmail.com>
183
184         * generic.cs (InferTypeArguments): Infer arguments before they are used
185         for compatibility check.
186
187 2007-03-15  Marek Safar  <marek.safar@gmail.com>
188
189         * generic.cs (InflatedConstraints): Fixed the check order.
190         (TypeArguments.Resolve): Small optimization for generic parameters.
191         (InferTypeArguments): Add infering support for anonymous methods.
192
193 2007-03-15  Martin Baulig  <martin@ximian.com>
194
195         Fix #79984.
196
197         * generic.cs
198         (TypeParameter.HasConstructorConstraint): Removed.
199         (ConstraintChecker.HasDefaultConstructor): Removed the
200         `TypeBuilder' argument here; correctly check for the ctor
201         constraint on type parameters.
202
203 2007-03-15  Martin Baulig  <martin@ximian.com>
204
205         Fix #79302.
206
207         * generic.cs
208         (TypeParameter): Create a `MemberCache' here as well.  Note that
209         we need to create this on-demand when it's actually used.
210
211 2007-03-10  Marek Safar  <marek.safar@gmail.com>
212
213         * generic.cs (TypeArguments.Resolve): Avoid redundant checks.
214
215 2007-03-09  Raja R Harinath  <rharinath@novell.com>
216
217         * cs-parser.jay (WHERE): Move before QUERY_FIRST_TOKEN.  'where'
218         is a valid keyword outside a linq expression too.
219
220 2007-03-03  Marek Safar  <marek.safar@gmail.com>
221
222         * cs-parser.jay: Implemented basic linq grammar.
223
224         * linq.cs: New file for hosting query specific classes.
225
226 2007-02-26  Marek Safar  <marek.safar@gmail.com>
227
228         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
229
230 2007-02-20  Marek Safar  <marek.safar@gmail.com>
231
232         A fix for bug #80650
233         * cs-parser.jay: Anonymous container starts at constructor declaration
234         and not at block beginning because it has to be usable in constructor
235         initializer.
236
237 2007-02-18  Marek Safar  <marek.safar@gmail.com>
238
239         A fix for bug #80493 by Atsushi Enomoto
240         * cs-parser.jay: Ignore invalid attribute target.
241
242 2007-02-15  Miguel de Icaza  <miguel@novell.com>
243
244         * Remove the call to SetExpression for lambda expressions, we do
245         not actually need it.
246
247         Remove expression tracking code as its not needed.
248
249 2007-02-11  Miguel de Icaza  <miguel@novell.com>
250
251         * cs-parser.jay (lambda_expression_body): when the body is an
252         expression add a statement of the form:
253
254                 contextual-return expression.
255
256         Where `contextual-return' is similar to `return', the difference
257         being that if the delegate that the lambda will be converted to
258         has a void return type, it will check that the result is a
259         ExpressionStatement and the result is a plain ret (no return
260         values on the stack).  If the return type of the delegate is of a
261         given type, this turns into a return with a value and does the
262         regular checking to check that the computed value can be
263         implicitly converted to the delegate return.
264
265 2007-01-30  Miguel de Icaza  <miguel@novell.com>
266
267         * cs-parser.jay (anonymous_method_expression): move the
268         before/after productions to the start_anonymous and end_anonymous
269         methods so the code can be reused for lambda functions.
270
271         (lambda_expression_body): wrap expressions implicitly into a
272         block.
273
274         (block): factor out the setup/teardown of parsing a block so we
275         can reuse that in lambda_expression_body
276
277         (lambda_expression): use new anonymous method helper methods.
278
279 2007-01-29  Miguel de Icaza  <miguel@novell.com>
280
281         * cs-parser.jay: oob_stack make it static (am guessing that is why
282         we no longer initialize it anymore) and reuse it across
283         instances.
284
285 2007-01-28  Miguel de Icaza  <miguel@novell.com>
286
287         * cs-parser.jay (open_parens): Introduce new non-terminal that
288         abstracts OPEN_PARENS and OPEN_PARENS_LAMBDA as the later can now
289         be returned in places where types are followed by identifiers
290         (this is expected in declaration, fixed, using, foreach and catch
291         clauses). 
292
293         Use open_parens in those places, keep OPEN_PARENS in the
294         expressions.  
295
296         cs-parser.jay: New grammar bits for parsing lambda expressions. 
297
298 2007-01-28  Raja R Harinath  <rharinath@novell.com>
299
300         Fix #80534, gtest-309.cs
301         * generic.cs (UnifyType): Rename from InferType.  Make unification
302         of generic insts simpler and don't insist on inferring all generic
303         parameters in a single generic inst unification.
304         (UnifyTypes): New.
305         (InferGenericInstance): Remove.
306         Analysis and initial patch by David Mitchell <dmitchell@logos.com>.
307
308 2007-01-20  Marek Safar  <marek.safar@gmail.com>
309
310         * cs-parser.jay: Better parameter error handling.
311
312 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
313             Raja R Harinath  <rharinath@novell.com>
314
315         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
316         Note the order in which accessors are declared in the source.
317
318 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
319
320         * generic.cs (TypeParameter.FindMembers): Use the generic
321         constraints, not the constraints to check for methods (first fix
322         of 80518).
323
324 2006-12-30  Marek Safar  <marek.safar@gmail.com>
325
326         * cs-parser.jay: Better syntax errors handling.
327
328 2006-11-21  Marek Safar  <marek.safar@gmail.com>
329
330         * cs-parser.jay: Tiny change to work with mcs tokenizer.
331
332         * cs-tokenizer.cs: Remove after unification with mcs.
333
334 2006-10-28  Marek Safar  <marek.safar@gmail.com>
335
336         A fix for bug #78998
337         * generic.cs (ConstructedType.AsAccessible): Check accessibility of type
338         arguments as well.
339
340 2006-10-26  Marek Safar  <marek.safar@gmail.com>
341
342         A fix for bug #76591
343         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous methods.
344
345 2006-10-25  Brian Crowell  <brian@fluggo.com>
346
347         Fix #79703
348         * generic.cs (CheckConstraints): Allow generic parameters with
349         inheritance constraints to satisfy reference type constraints.
350
351 2006-10-09  Martin Baulig  <martin@ximian.com>
352
353         * generic.cs
354         (NullCoalescingOperator.DoResolve): Fix #78964; added gtest-294.cs.
355
356 2006-09-25  Martin Baulig  <martin@ximian.com>
357
358         * class.cs: Remove after unification with mcs source.
359
360 2006-09-24  Raja R Harinath  <harinath@gmail.com>
361
362         * convert.cs: Remove after unification with mcs source.
363
364 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
365
366         * class.cs (MemberBase.VerifyClsCompliance): When method has type
367         parameters verify them as well.
368
369         * generic.cs (Constraints.VerifyClsCompliance): Verify CLS-Compliance of
370         the type parameter constraints.
371         (Generics.VerifyClsCompliance): Ditto.
372
373 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
374
375         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
376         for anonymous block with out argument.
377
378 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
379
380         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
381         not used private events only.
382
383 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
384
385         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
386
387         * cs-parser.jay: Parse correctly cast of default (T).
388
389         * generic.cs (DefaultValueExpression.DoResolve): Check for void type.
390         Store original type via EmptyConstantCast.
391
392 2006-09-22  Martin Baulig  <martin@ximian.com>
393
394         * delegate.cs: Removed; this file is now shared with mcs.
395
396         * attribute.cs: Removed; this file is now shared with mcs.
397
398 2006-09-22  Martin Baulig  <martin@ximian.com>
399
400         * ecore.cs: Removed; this file is now shared with mcs.
401
402 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
403
404         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
405
406         * ecore.cs (NullCast): Derives from NullConstant.
407
408         * generic.cs (DefaultValueExpression): Fixed to cope with the constant
409         results.
410
411 2006-09-21  Martin Baulig  <martin@ximian.com>
412
413         * decl.cs: Removed; this file is now shared with mcs.
414
415 2006-09-21  Raja R Harinath  <rharinath@novell.com>
416
417         * rootcontext.cs: Remove after unification with mcs source.
418
419         * report.cs: Remove after unification with mcs source.
420         * generic.cs (AddTypeParameter, LookupTypeParameter): Move to
421         mcs/typemanager.cs.
422         (InitGenerics, CleanUpGenerics): Remove.
423
424         * support.cs: Remove after unification with mcs source.
425
426 2006-09-20  Raja R Harinath  <rharinath@novell.com>
427
428         * codegen.cs: Remove after unification with mcs source.
429
430 2006-09-19  Martin Baulig  <martin@ximian.com>
431
432         * expression.cs: Removed; this file is now shared with mcs.
433
434 2006-09-19  Martin Baulig  <martin@ximian.com>
435
436         * generic.cs
437         (TypeManager.IsEqual): Moved into ../mcs/typemanager.cs.
438         (TypeManager.DropGenericTypeArguments): Likewise.
439         (TypeManager.DropGenericMethodArguments): Likewise.
440         (TypeManager.GetTypeArguments): Likewise.
441         (TypeManager.HasGenericArguments): Likewise.
442
443 2006-09-19  Martin Baulig  <martin@ximian.com>
444
445         * ecore.cs (PropertyExpr.InstanceResolve): Fix the CS1540 check.
446
447 2006-09-19  Martin Baulig  <martin@ximian.com>
448
449         * typemanager.cs: Removed; this file is now shared with mcs.
450
451 2006-09-16  Raja R Harinath  <rharinath@novell.com>
452
453         * Makefile (LOCAL_MCS_FLAGS): Use instead of PROFILE_MCS_FLAGS.
454         * AssemblyInfo.cs, driver.cs: Remove after unification with mcs source.
455
456 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
457
458         A fix for #79401
459         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
460         only if parent type is class.
461         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
462         update.
463
464 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
465
466         * cs-parser.jay,
467         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
468         keywords are used.
469         * typemanager.cs(CSharpName): Converts NullType to null.
470
471 2006-09-15  Martin Baulig  <martin@ximian.com>
472
473         * pending.cs: Removed; this file is now shared with mcs.
474
475 2006-09-15  Martin Baulig  <martin@ximian.com>
476
477         * statement.cs: Removed; this file is now shared with mcs.
478
479 2006-09-15  Martin Baulig  <martin@ximian.com>
480
481         * rootcontext.cs (RootContext.BrokenCircularDeps): Removed.
482
483         * driver.cs: Removed the `--broken-cycles' argument.
484
485 2006-09-15  Martin Baulig  <martin@ximian.com>
486
487         * namespace.cs: Removed; this file is now shared with mcs.
488
489 2006-09-15  Martin Baulig  <martin@ximian.com>
490
491         * decl.cs (MemberName): Minor code cleanups.
492
493 2006-09-15  Martin Baulig  <martin@ximian.com>
494
495         * parameter.cs: Removed; this file is now shared with mcs.
496
497 2006-09-15  Martin Baulig  <martin@ximian.com>
498
499         * enum.cs: Removed; this file is now shared with mcs.
500
501 2006-09-15  Martin Baulig  <martin@ximian.com>
502
503         * Makefile: Define `GMCS_SOURCE'.
504
505         * flowanalysis.cs: Removed; this file is now shared with mcs.
506
507 2006-09-15  Martin Baulig  <martin@ximian.com>
508
509         Removed modifiers.cs, literal.cs, location.cs, roottypes.cs,
510         assign.cs, const.cs, cfold.cs, constant.cs, symbolwriter.cs and
511         doc.cs - they are now shared with mcs.
512
513         * gmcs.exe.sources: Include these files from ../mcs/.
514
515 2006-09-15  Martin Baulig  <martin@ximian.com>
516
517         * old-code.cs, gen-il.cs, gen-treedump.cs: Removed old stuff.
518         * g1.cs, sample-hello.cs, sample-stack.il: Likewise.
519
520 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
521
522         * assign.cs, ecore.cs, expression.cs: Share error message text.
523         * class.cs (FieldMember.Define): Check for variable of static type.
524         * decl.cs (check_type_parameter): Report correct type name.
525         * driver.cs (LoadAssembly): Uses error output for errors.
526         * generic.cs (Constraints.Resolve): Add check for constraint accessibility
527         (TypeArguments.Resolve): Static class cannot be used as an argument.
528         * statement.cs (ResolveMeta): Constants cannot be generic types.
529
530 2006-09-12  Martin Baulig  <martin@ximian.com>
531
532         * generic.cs (TypeManager.IsIList): Moved into convert.cs.
533
534         * convert.cs (Convert.Array_To_IList): Moved here and correctly
535         implement it; fixes #79345.
536
537 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
538
539         * decl.cs (DeclSpace.SetParameterInfo): Check for nonexistent type
540         parameter.
541         * expression.cs (TypeOf.GetAttributableValue): Check for open generic
542         types.
543         * generic.cs: Improved error messages.
544         * typemanager.cs (RemoveGenericArity): Made public.
545
546 2006-09-08  Martin Baulig  <martin@ximian.com>
547
548         * typemanager.cs (TypeManager.interlocked_type): New public field.
549         (TypeManager.int_interlocked_compare-exchange): New public field.
550         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
551         enumerator types here and call InitGenericCoreTypes().
552         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
553         after calling InitEnumUnderlyingTypes().
554
555         * rootcontext.cs
556         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
557         `classes_second_stage'. 
558
559 2006-09-07  Marek Safar  <marek.safar@seznam.cz>
560  
561         * class.cs, generic.cs (GenericMethod.Define): Check for type parameter
562         collisions.
563         * statement.cs (Block.Variables): Made public.
564
565 2006-09-07  Martin Baulig  <martin@ximian.com>
566
567         * driver.cs
568         (MainDriver): Revert r62663 from Marek; see #70506 for details.
569
570 2006-09-01  Martin Baulig  <martin@ximian.com>
571
572         * generic.cs
573         (TypeManager.IsIList): Also handle base classes and interfaces. 
574
575 2006-09-01  Raja R Harinath  <rharinath@novell.com>
576
577         Fix #79238
578         * expression.cs (Invocation.MoreSpecific): Check for reference
579         types earlier.
580
581 2006-08-29  Miguel de Icaza  <miguel@novell.com>
582
583         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
584
585 2006-08-17  Miguel de Icaza  <miguel@novell.com>
586
587         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
588         #52019 and #79064, the use of the \uXXXX sequence in source code
589         to represent unicode characters.
590
591 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
592  
593         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
594         support.
595         * class.cs, ecore.cs, statement.cs: Merged to one error message.
596
597 2006-08-14  Raja R Harinath  <rharinath@novell.com>
598
599         Fix #79067
600         * cs-tokenizer.cs (parse_less_than): Allow '*' to appear in a type
601         parameter too.  This only avoids a parse error -- the semantic
602         error is caught elsewhere.
603
604 2006-08-13  Miguel de Icaza  <miguel@novell.com>
605
606         * assign.cs: Catch attempts to assign to a method groups in += and
607         report as 1656
608
609 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
610
611         A fix for #79056
612         * cs-parser.jay: Don't destroy current array type by typeof of array's.
613
614 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
615
616         * cs-parser.jay: Check whether a constraint clause has already been
617         specified for type parameter.
618         * generic.cs (Constraints): Exposed location.
619
620 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
621
622         * class.cs (Method.Define): Issue a warning when generic method looks like
623         an entry point.
624         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
625         as well.
626         * report.cs: New warning number.
627
628 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
629  
630         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
631         looking for ctor.
632         * decl.cs (MemberCache.FindMembers): When container is interface we need to
633         search all base interfaces as a member can be ambiguous.
634         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
635         Constructor member type filter. 
636         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
637         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
638         reporting for returned memberinfos.
639         * report.cs: Updated.
640         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
641         version to work on all runtimes.
642         (TypeManager.RealMemberLookup): Removed members filtering.
643
644 2006-08-08  Raja R Harinath  <rharinath@novell.com>
645
646         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
647         (PropertyExpr.EmitAssign): Likewise.
648         * expression.cs (Indirection.EmitAssign): Likewise.
649         (LocalVariableReference.EmitAssign): Likewise.
650         (ParameterReference.EmitAssign): Likewise.
651         (Invocation.EmitArguments): Likewise.
652         (ArrayAccess.EmitAssign): Likewise.
653         (IndexerAccess.EmitAssign): Likewise.
654         (This.EmitAssign): Likewise.
655         (ConditionalLogicalOperator.Emit): Likewise.
656
657         Fix #79026
658         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
659         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
660         leave it in after returning it.
661         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
662
663 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
664
665         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
666         message.
667
668 2006-08-05  Marek Safar  <marek.safar@seznam.cz>
669
670         * class.cs (TypeContainer.AddPartial): Add check for partial declarations
671         with different type names.
672         (TypeContainer.UpdateTypeParameterConstraints): Updated an error message.
673
674 2006-08-03  Raja R Harinath  <rharinath@novell.com>
675
676         Fix cs0146-3.cs and cs0146-4.cs.
677         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
678         enclosing types don't depend on the current type.
679
680 2006-08-02  Raja R Harinath  <rharinath@novell.com>
681
682         Fix #77963
683         * class.cs (TypeContainer.DoDefineMembers): Use
684         FindBaseMemberWithSameName on Parent, since we're interested in
685         whether we hide inherited members or not.
686         (FindBaseMemberWithSameName): Make slightly more robust.
687
688         Fix #77396
689         * codegen.cs (IResolveContext.GenericDeclContainer): New.
690         (EmitContext): Implement new interface requirement.
691         * namespace.cs (UsingEntry, LocalAliasEntry): Likewise.
692         * decl.cs (MemberCore): Likewise.
693         (DeclSpace.GenericDeclContainer): Rename from DeclContainer.
694         * ecore.cs (SimpleName.ResolveAsTypeTerminal): Use
695         ec.GenericDeclContainer to check for generic parameters.
696         (SimpleName.DoSimpleNameResolve): Likewise.
697         * generic.cs (TypeParameter.DeclContainer): Remove override.
698
699         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
700         declspaces for doppelgangers too.
701         (UsingEntry): Implement IResolveContext.
702         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
703         'this' as the resolve context.
704         (LocalAliasEntry): Likewise.
705
706         Implement parts of #77403
707         * roottypes.cs (RootDeclSpace): New.  Used to represent the
708         toplevel declaration space.  Each namespace declaration introduces
709         a "partial" root declaretion space.
710         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
711         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
712         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
713         from 'current_namespace.SlaveDeclSpace'.
714         (namespace_declaration): Likewise.
715         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
716         check.  It can't happen now.
717         * decl.cs (DeclSpace.LookupType): Likewise.
718         * driver.cs (MainDriver): Sanity check.
719
720 2006-08-01  Raja R Harinath  <rharinath@novell.com>
721
722         * decl.cs (DeclSpace.FindNestedType): Remove.
723         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
724         LookupTypeContainer to get the container of the nested type.
725         * class.cs (TypeContainer.FindNestedType): Make non-override.
726
727 2006-07-31  Raja R Harinath  <rharinath@novell.com>
728
729         * decl.cs (DeclSpace.PartialContainer): Move field from ...
730         * class.cs (TypeContainer.PartialContainer): ... here.
731         (TypeContainer.AddBasesForPart): New helper.
732         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
733         instead.
734         * cs-parser.jay (current_class): Convert to DeclSpace.
735         (struct_declaration, interface_declaration, class_declaration):
736         Use AddBasesForPart instead of .Bases directly.
737         * const.cs, iterators.cs: Update to changes.
738
739 2006-07-28  Raja R Harinath  <rharinath@novell.com>
740
741         * class.cs (TypeContainer.AddMemberType): Rename from
742         AddToTypeContainer.
743         (TypeContainer.AddMember): Rename from AddToMemberContainer.
744         (AddTypeContainer): New.  Combine AddClassOrStruct and
745         AddInterface.
746         (AddPartial): Update.  Add 'is_partial' argument.
747         * roottypes.cs: Update to changes.
748         * cs-parser.jay (push_current_class): New helper for handling
749         current_container and current_class.
750         (struct_declaration, interface_declaration, class_declaration):
751         Use it.
752
753 2006-07-26  Raja R Harinath  <rharinath@novell.com>
754
755         * roottypes.cs: Rename from tree.cs.
756
757         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
758         * tree.cs (Tree, ITreeDump): Remove types.
759         * rootcontext.cs (tree, Tree): Remove fields.
760         (root, ToplevelTypes): New.
761         * *.cs: Update to rename.
762
763         * tree.cs (Tree.RecordDecl): Remove.
764         (RootTypes.AddToTypeContainer): Record the toplevel type in its
765         namespace here.
766         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
767
768 2006-07-23  Raja R Harinath  <harinath@gmail.com>
769
770         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
771         DoFlowAnalysis and OmitStructFlowAnalysis here.
772         (ec.With): Rename from WithUnsafe and generalize.
773         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
774         (ec.WithFlowAnalyis): New.
775         * ecore.cs, expression.cs, statement.cs: Update.
776
777 2006-07-22  Raja R Harinath  <harinath@gmail.com>
778
779         * statement.cs (Block.ResolveMeta): Simplify slightly.
780
781         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
782         multiple boolean fields.  Convert InUnsafe, constant_check_state,
783         check_state to flags.
784         (CheckState, ConstantCheckState): Update.
785         (InUnsafe): New read-only property.
786         (FlagsHandle): Rename from CheckStateHandle and convert to handle
787         arbitrary flags.
788         (WithUnsafe): New helper similar to WithCheckState.
789         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
790         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
791
792 2006-07-21  Raja R Harinath  <rharinath@novell.com>
793
794         Make comparisons use the same IL irrespective of whether they're
795         in a 'checked' or 'unchecked' context: one of the issues in #78899
796         * codegen.cs (EmitContext.CheckState): Make read-only property.
797         (EmitContext.ConstantCheckState): Likewise.
798         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
799         helper that implement a save/restore stack for CheckState
800         values.  This is the only way to change check-state.
801         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
802         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
803         (CheckedExpr.EmitBranchable): New forwarding method.
804         (UnCheckedExpr): Likewise.
805         * statement.cs (Block.ResolveMeta): Use WithCheckState.
806         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
807         (Checked.Resolve, checked.DoEmit): Likewise.
808
809 2006-07-21  Martin Baulig  <martin@ximian.com>
810
811         * generic.cs (TypeManager.InferType): When inferring an array
812         type, also allow IList<T> and ICollection<T>.  Fixes #78900.
813
814 2006-07-21  Martin Baulig  <martin@ximian.com>
815
816         * generic.cs (TypeManager.IsIEnumerable): Renamed into IsIList()
817         and allow IList`1 and all its base interfaces.
818
819         * convert.cs (Convert.ImplicitReferenceConversion): Allow
820         converting from an array-type of T to IList<T>.
821
822 2006-07-21  Martin Baulig  <martin@ximian.com>
823
824         * ecore.cs (SimpleName.DoSimpleNameResolve): Added CS0307 check.
825
826 2006-07-20  Miguel de Icaza  <miguel@novell.com>
827
828         * anonymous.cs: Cache the resolved anonymous delegate, and return
829         this so that the ResolveTopBlock is only triggered once, not
830         twice.
831
832         Currently we trigger ResolvetopBlock twice due to a first pass of
833         argument check compatibility, and a second pass that does the
834         actual resolution.   
835
836 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
837
838         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
839         modifiers.
840         * rootcontext.cs (Reset): Add helper_classes.
841
842 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
843
844         A fix for #78860
845         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
846         correctly.
847
848 2006-07-13  Miguel de Icaza  <miguel@novell.com>
849
850         * statement.cs (Lock): Handle expressions of type
851         TypeManager.null_type specially.  Fixes #78770
852
853 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
854
855         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
856         to an event.
857
858 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
859
860         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
861         for accessors as well.
862         * ecore.cs (EventExpr): Add AccessorTable.
863
864 2006-07-03  Martin Baulig  <martin@ximian.com>
865
866         * ecore.cs (UnboxCast.Emit): Also use `Unbox_Any' for generic
867         instances of value types.
868
869         * convert.cs (Convert.ExplicitConversion): Correctly handle
870         object->nullable conversions.   
871
872 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
873
874         A fix for #78738
875         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
876         for CS0122 where appropriate.
877         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
878         level attributes.
879         (Filter): Assembly can be null in the case of top level attributes.
880
881 2006-06-28  Raja R Harinath  <rharinath@novell.com>
882
883         Fix #78716
884         * generic.cs (TypeManager.InferParamsTypeArguments): If there are
885         no arguments, return 'false': nothing can be inferred.
886
887 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
888
889         A fix for #78690
890
891         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
892         is done at global level.
893
894 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
895
896         A fix for #77002, Implemented TypeForwarder support.
897
898         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
899         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Add TypeForwarder
900         attribute handling.
901         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
902         * typemanager.cs (): Add type_forwarder_attr_type.
903
904 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
905
906         * report.cs: Add CS0469 warning.
907
908 2006-06-22  Martin Baulig  <martin@ximian.com>
909
910         * class.cs
911         (TypeContainer.GetNormalBases): Also use ResolveAsBaseTerminal()
912         for interfaces; fixes #78686, which is a modification of #78380
913         with interfaces instead of classes.
914
915 2006-06-21  Martin Baulig  <martin@ximian.com>
916
917         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
918         the `try'-block, so we also report CS0016 etc. there.
919
920 2006-06-21  Martin Baulig  <martin@ximian.com>
921
922         * ecore.cs (FieldExpr.EmitAssign, FieldExpr.AddressOf): Correctly
923         handle SetAssigned() and SetMemberIsUsed() for generic types;
924         fixes #77545.
925
926 2006-06-21  Martin Baulig  <martin@ximian.com>
927
928         * delegate.cs
929         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
930
931 2006-06-21  Martin Baulig  <martin@ximian.com>
932
933         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
934         also report CS1686 for parameters.
935
936 2006-06-21  Martin Baulig  <martin@ximian.com>
937
938         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
939         instead of an error if the value is not implicitly convertible to
940         the switch types; fixes #77964.
941
942 2006-06-21  Raja R Harinath  <rharinath@novell.com>
943
944         Fix #78673
945         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
946         FieldBuilder is null.
947
948         Fix #78662
949         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
950         'left' and 'right' before error-checking.
951
952 2006-06-19  Martin Baulig  <martin@ximian.com>
953
954         * convert.cs
955         (Convert.ImplicitConversionStandard): Cleanup and correctly
956         implement nullable conversions.
957         (Convert.ImplicitStandardConversionExists): Likewise.
958         (Convert.ExplicitConversion): Likewise.
959
960 2006-06-19  Martin Baulig  <martin@ximian.com>
961
962         * generic.cs
963         (Nullable.Wrap.Create, Nullable.Unwrap.Create): New public static
964         methods; make the ctors protected.
965
966 2006-06-19  Martin Baulig  <martin@ximian.com>
967
968         Fixed #78380; added gtest-273.cs.
969
970         * ecore.cs
971         (Expression.ResolveAsBaseTerminal): Move the constraint checking
972         into ResolveAsTypeTerminal().
973
974         * generic.cs
975         (ConstraintChecker.HasDefaultConstructor): Use the non-cache based
976         TypeManager.FindMembers() to check for the default ctor.
977
978 2006-06-18  Marek Safar  <marek.safar@seznam.cz>
979
980         * generic.cs: Fixed NullableInfo accessibility.
981
982 2006-06-16  Martin Baulig  <martin@ximian.com>
983
984         * generic.cs
985         (Constraints.InflatedConstraints.inflate): Correctly inflate
986         generic types; fixes #78400.
987
988 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
989
990         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
991         Fixed bug #78601.
992         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
993         (FieldExpr.DoResolve): likewise.
994         (PropertyExpr.InstanceResolve): likewise.
995         (EventExpr.InstanceResolve): likewise. 
996
997 2006-06-15  Martin Baulig  <martin@ximian.com>
998
999         * statement.cs
1000         (SwitchLabel.ResolveAndReduce): Added `bool allow_nullable'
1001         argument; always allow a `null' label if true.
1002         (Switch.SwitchGoverningType): Take an `Expression expr' argument.
1003         (Switch.TableSwitchEmit, Switch.SimpleSwitchEmit): Check whether
1004         we have a `null' label and mark the new `null_target' label;
1005         default to the `default' label.
1006         (Switch.Resolve): Add support for nullable types.  Fixes #78630.
1007
1008 2006-06-15  Martin Baulig  <martin@ximian.com>
1009
1010         * class.cs (Operator.Define): Allow an implicit/explicit operator
1011         to convert to/from a nullable value of the enclosing type.
1012
1013         * generic.cs (TypeManager.IsNullableTypeOf): New public method.
1014         (Nullable.Unwrap, Nullable.Wrap): Make these classes public.
1015
1016         * convert.cs
1017         (Convert.ImplicitStandardConversionExists): Add support for lifted
1018         implicit/explicit conversions.
1019         (Convert.ImplicitConversionStandard): Likewise.
1020
1021 2006-06-13  Martin Baulig  <martin@ximian.com>
1022
1023         * ecore.cs (SimpleName.DoSimpleNameResolve): Check whether we have
1024         type arguments and create a ConstructedType if necessary.  Fixes #78400.
1025
1026 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
1027
1028         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
1029         attribute applicable tests for attribute argument.
1030
1031 2006-06-02  Raja R Harinath  <rharinath@novell.com>
1032
1033         Fix #78079
1034         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
1035         (Binary.OverloadResolve_PredefinedIntegral): New.
1036         (Binary.OverloadResolve_PredefinedFloating): New.
1037         (Binary.OverloadResolve_PredefinedString): New.
1038         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
1039         Follow the standard more closely, and treat numeric promotions in
1040         terms of overload resolution.
1041         (Binary.CheckShiftArguments): Simplify.
1042
1043 2006-06-01  Raja R Harinath  <rharinath@novell.com>
1044
1045         * flowanalysis.cs (MyBitVector): Simplify representation.
1046         (MyBitVector.Clone): Avoid allocating BitArray.
1047         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
1048         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
1049         (*): Update.  Change all references to MyBitVector.And and
1050         MyBitVector.Or to &= and |=.
1051
1052 2006-05-31  Raja R Harinath  <rharinath@novell.com>
1053
1054         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
1055         Use bne.un instead of ceq+brfalse.
1056
1057         Fix cs0208-[23].cs
1058         * typemanager.cs (IsUnmanagedType): Disallow generic types and
1059         generic parameters.
1060
1061 2006-05-29  Raja R Harinath  <rharinath@novell.com>
1062
1063         Fix cs0231-[34].cs.
1064         * cs-parser.jay (formal_parameter_list): Extend the pattern below
1065         to param arguments too.
1066
1067 2006-05-26  Miguel de Icaza  <miguel@novell.com>
1068
1069         * cs-parser.jay: Catch another parsing form for arglist being
1070         followed by other arguments.  Fixes #78313.
1071
1072 2006-05-25  Raja R Harinath  <rharinath@novell.com>
1073
1074         Fix #78324
1075         * expression.cs (Binary.DoResolve): Use Nullable.LiftedBinaryOperator
1076         also when one of the operands is a null literal.
1077         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality): Rewrite
1078         to improve clarity, and generate slightly better code.
1079
1080 2006-05-24  Raja R Harinath  <rharinath@novell.com>
1081
1082         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
1083         checking of out parameters to ...
1084         (FlowBranchingToplevel.Merge): ... here.
1085         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
1086         set, propagate the origin upward, and only complain if there was
1087         no other error.
1088         (FlowBranchingException.AddContinueOrigin): Likewise.
1089         (FlowBranchingException.AddReturnOrigin): Likewise.
1090         (FlowBranchingException.AddGotoOrigin): Likewise.       
1091
1092 2006-05-23  Raja R Harinath  <rharinath@novell.com>
1093
1094         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
1095         unreachable, skip it.
1096         (FlowBranchingException.Merge): Always propagate jumps, even if
1097         the finally block renders subsequent code unreachable.
1098
1099 2006-05-18  Raja R Harinath  <rharinath@novell.com>
1100
1101         Fix #77601
1102         * statement.cs (Goto.Resolve): Move responsibility for resolving
1103         'goto' to FlowBranching.AddGotoOrigin.
1104         (Goto.SetResolvedTarget): New.  Callback to set the
1105         LabeledStatement that's the target of the goto.
1106         (Goto.DoEmit): Use Leave instead of Br when crossing an
1107         unwind-protect boundary.
1108         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
1109         LookupLabel and adjust to new semantics.
1110         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
1111         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
1112         Goto.SetResolvedTarget to update target.
1113         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
1114         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
1115         AddBreakOrigin & co.  Delay propagation until ...
1116         (FlowBranchingException.Merge): ... this.
1117
1118         * statement.cs (Block.Resolve): Always depend on flow-branching to
1119         determine unreachability.  Kill workaround that originally emitted
1120         only one statement after an "unreachable" label (see infloop in
1121         test-515.cs).
1122
1123         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
1124         This is still "wrong", but anything better would probably need a
1125         multi-pass algorithm.
1126         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
1127         usage vector.  Force current usage vector to be reachable, to
1128         optimistically signify backward jumps.
1129         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
1130         detected.
1131         (FlowBranchingLabeled.Merge): New.  If no backward jump was
1132         detected, return the original salted-away usage vector instead,
1133         updated with appropriate changes.  Print unreachable warning if
1134         necessary.
1135         * statement.cs (Block.Resolve): Don't print unreachable warning on
1136         a labeled statement.
1137
1138 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
1139
1140         * driver.cs: Pass filename without path to AssemblyBuilder's
1141         AddResourceFile. Fixes bug #78407.
1142
1143 2006-05-17  Raja R Harinath  <rharinath@novell.com>
1144
1145         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
1146         * flowanalysis.cs (FlowBranchingLabeled): ... here.
1147         (FlowBranching.MergeChild): Overwrite
1148         reachability information from Labeled branchings too.
1149
1150 2006-05-16  Raja R Harinath  <rharinath@novell.com>
1151
1152         * statement.cs (Goto.Resolve): Merge jump origins here ...
1153         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
1154
1155         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
1156         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
1157         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
1158         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
1159         here, ...
1160         * statement.cs (Goto.Resolve): ... not here.
1161         (Goto.Emit): Remove CS1632 check.
1162
1163 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
1164
1165         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
1166         error message.
1167
1168 2006-05-11  Raja R Harinath  <rharinath@novell.com>
1169
1170         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
1171         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
1172         (FlowBranchingException.Label): Likewise.
1173
1174         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
1175         given value.
1176         (MyBitVector.Or): Use it to avoid losing information (Count).
1177         (FlowBranching.MergeOrigins): Likewise.
1178
1179         * flowanalysis.cs (UsageVector.IsDirty): Remove.
1180         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
1181         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
1182         (UsageVector.ToString): Simplify.
1183         (UsageVector.MergeSiblings): Move here from ...
1184         (FlowBranching.Merge): ... here.
1185         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
1186         not a MyBitVector.
1187
1188 2006-05-10  Raja R Harinath  <rharinath@novell.com>
1189
1190         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
1191         null bitvector is treated as all-true.
1192
1193         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
1194         (MyBitVector): Rationalize invariants.  'vector != null' implies
1195         that we have our own copy of the bitvector.  Otherwise,
1196         'InheritsFrom == null' implies all inherited bits are true.
1197
1198 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
1199
1200         * statement.cs (LocalInfo): Add IsConstant.
1201         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
1202         local variable for constants.
1203
1204 2006-05-09  Raja R Harinath  <rharinath@novell.com>
1205
1206         * flowanalysis.cs (MyBitVector.Empty): New.
1207         (MyBitVector): Don't allow InheritedFrom to be null.
1208         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
1209         (UsageVector, FlowBranching): Update to changes.
1210
1211         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
1212         recursion.  The 'Parent == null' condition isn't sufficient for
1213         anonymous methods.
1214         (FlowBranching.AddBreakOrigin): Likewise.
1215         (FlowBranching.AddContinueOrigin): Likewise.
1216         (FlowBranching.AddReturnOrigin): Likewise.
1217         (FlowBranching.StealFinallyClauses): Likewise.
1218         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
1219         (FlowBranching.CheckOutParameters): Likewise.
1220         (FlowBranchingToplevel): Terminate all the above recursions here.
1221         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
1222         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
1223
1224         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
1225         toplevel block.
1226         (FlowBranchingToplevel): New.  Empty for now.
1227         (FlowBranching.MergeTopBlock): Update.
1228         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
1229         branching for the anonymous delegate.
1230         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
1231
1232         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
1233         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
1234         information at the start of the merge.  Reorganize.
1235
1236 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
1237
1238         * class.cs (MethodData.Define): Method cannot implement interface accessor.
1239
1240 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
1241
1242         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
1243         to newly introduced ctor.
1244
1245         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
1246         message to one place.
1247         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
1248         global namespace.
1249
1250 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
1251
1252         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
1253
1254         * ecore.cs (Expression.ResolveAsConstant): Updated.
1255
1256         * statement.cs (ResolveMeta): Updated.
1257
1258 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
1259
1260         * cs-parser.jay: __arglist cannot be used in initializer.
1261
1262 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
1263
1264         A fix for #77879
1265         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
1266         private types.
1267
1268 2006-05-05  Raja R Harinath  <rharinath@novell.com>
1269
1270         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
1271         (LabeledStatement): Add 'name' parameter.
1272         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
1273         (Block.AddLabel): Update to changes.
1274         * cs-parser.jay (labeled_statement): Likewise.
1275
1276         * flowanalysis.cs (BranchingType.Labeled): New.
1277         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
1278         (FlowBranchingLabeled): New.  Does nothing for now, but will
1279         eventually handle 'goto' flows.
1280         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
1281         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
1282         that's terminated ...
1283         (Block.Resolve): ... here.
1284
1285         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
1286         (UsageVector.MergeFinallyOrigins): Likewise.
1287         (FlowBranching.InTryOrCatch): Likewise.
1288         (FlowBranching.AddFinallyVector): Likewise.
1289         (FlowBranchingException): Update to changes.
1290
1291         Fix #78290
1292         * statement.cs (Return.Resolve): Move error checking to ...
1293         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
1294         (FlowBranchingException): Handle return origins like break and
1295         continue origins.
1296         (FlowBranching.UsageVector.CheckOutParameters): Remove.
1297
1298 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
1299
1300         A fix for #76122
1301         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
1302         filter.
1303
1304 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
1305
1306         A fix for #77543
1307         * class.cs (MethodData.Define): Do public accessor check only when method
1308         implements an interface.
1309
1310 2006-05-04  Raja R Harinath  <rharinath@novell.com>
1311
1312         Remove special handling of 'break'
1313         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
1314         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
1315         (UsageVector.Break): Remove.
1316         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
1317         reachability.
1318         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
1319
1320         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
1321         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
1322
1323 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
1324
1325         A fix for #75726
1326         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
1327         be the interface member.
1328
1329 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
1330
1331         A fix for #60069
1332         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
1333         for emitting small (int) values.
1334
1335 2006-05-03  Raja R Harinath  <rharinath@novell.com>
1336
1337         Fix #59427
1338         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
1339         control-flow passes through the 'finally' after merging-in all the
1340         control-flows from 'try' and the 'catch' clauses.
1341
1342         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
1343         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
1344         always true at the only non-recursive entry point.
1345         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
1346         FlowBranchingBreakable.
1347         (FlowBranchingLoop): Remove.
1348         * statement.cs (Return.DoResolve): Update to changes.
1349
1350         Fix #76471, #76665
1351         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
1352         (FlowBranching.CreateBranching): Handle it: create a
1353         FlowBranchingContinuable.
1354         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
1355         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
1356         except that it handles the 'continue' command.
1357         (FlowBranching.UsageVector.MergeOrigins): Rename from
1358         MergeBreakOrigins.
1359         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
1360         except that it overrides AddContinueOrigin.
1361         (FlowBranchingException): Override AddContinueOrigin, similar to
1362         AddBreakOrigin.
1363         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
1364         Create a new branching around the embedded statement.
1365         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
1366         control flow after the embedded statement.
1367         (Continue.Resolve): Move all error checking to AddContinueOrigin.
1368
1369         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
1370         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
1371         FlowBranchingBreakable.
1372         (FlowBranchingSwitch): Remove.
1373
1374         Fix test-503.cs
1375         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
1376         error reporting to ...
1377         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
1378         Rename from 'AddBreakVector'.  Add new location argument.  Return
1379         a bool indicating whether the 'break' crosses an unwind-protect.
1380         (FlowBranchingException.AddBreakOrigin): Add.
1381         (FlowBranchingException.Merge): Propagate 'break's to surrounding
1382         flowbranching after updating with the effects of the 'finally'
1383         clause.
1384         (FlowBranchingBreakable): New common base class for
1385         FlowBranchingLoop and FlowBranchingSwitch.
1386
1387         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
1388         embedded statement.
1389         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
1390
1391 2006-05-02  Raja R Harinath  <rharinath@novell.com>
1392
1393         * statement.cs (Do.Resolve): If the loop is infinite, set the
1394         barrier.
1395         (While.Resolve, For.Resolve): Set a barrier after the embedded
1396         statement.  There's no direct control flow that goes from the end
1397         of the embedded statement to the end of the loop.
1398         * flowanalysis.cs (FlowBranching.Infinite): Remove.
1399         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
1400         above ensure that the reachability is correctly computed.
1401
1402         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
1403         (UsageVector.MergeBreakOrigins): If the current path is
1404         unreachable, treat it as if all parameters/locals are initialized.
1405         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
1406         infinite loops before merging-in break origins.
1407
1408         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
1409         (Reachability.Reachable): Split part into ...
1410         (Reachability.Unreachable): ... this.  Simplify.
1411         (Reachability.IsUnreachable): Use 'Unreachable' instead.
1412
1413         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
1414         (Reachability.SetThrowsSometimes): Likewise.
1415         (FlowBranchingBlock.MergeTopBlock): Don't compare against
1416         TriState.Always, use corresponding property.
1417         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
1418         (Block.Resolve): Likewise.  Remove some redundant checks.
1419
1420 2006-05-02  Raja R Harinath  <harinath@gmail.com>
1421
1422         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
1423         (Reachability.Meet): Don't bother checking AlwaysThrows --
1424         barrier is always set.
1425         (FlowBranchingBlock.Merge): Likewise.
1426
1427 2006-05-01  Rafael Teixeira <rafaelteixeirabr@hotmail.com>
1428
1429         * attribute.cs: fixed_buffer_cache is declared only if NET_2_0 is
1430         defined, so it's references should also compile only for NET_2_0
1431         (as occurs in mcs version)
1432
1433 2006-05-01  Raja R Harinath  <harinath@gmail.com>
1434
1435         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
1436         checks for unreachable.
1437
1438 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
1439
1440         A fix for #77980
1441         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
1442
1443         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
1444         whether field is really assigned.
1445
1446 2006-04-30  Raja R Harinath  <harinath@gmail.com>
1447
1448         * flowanalysis.cs (Reachability): Make 4-argument constructor
1449         private.
1450         (Reachability.Meet): Rename from 'And'.  Remove static variant.
1451         (Reachability.Always): Rename from the highly misleading
1452         'Reachability.Never'.
1453         (FlowBranching.Merge): Update to changes.  Mark an impossible
1454         situation with a 'throw'.
1455         (*): Update to changes.
1456
1457 2006-04-29  Raja R Harinath  <harinath@gmail.com>
1458
1459         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
1460         Remove 'Undefined'.
1461         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
1462         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
1463         (*): Update to changes.
1464         * statement.cs: Update to changes.
1465
1466 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
1467
1468         A fix for #78049
1469         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
1470
1471 2006-04-28  Raja R Harinath  <harinath@gmail.com>
1472
1473         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
1474         dummy UsageVector.
1475
1476         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
1477         argument to two arguments: an usage-vector and a bool.  Move call
1478         to FlowBranching.Merge () ...
1479         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
1480
1481         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
1482         handling of loop and switch reachability to ...
1483         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
1484
1485 2006-04-27  Raja R Harinath  <harinath@gmail.com>
1486
1487         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
1488         handling to FlowBranchingLoop.InLoop.
1489         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
1490
1491 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
1492
1493         A fix for #78115
1494         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
1495         anonymous method is allowed from AnonymousContainer here.
1496
1497         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
1498
1499 2006-04-24  Raja R Harinath  <rharinath@novell.com>
1500
1501         Fix #78156
1502         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
1503
1504 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
1505
1506         A fix for #49011.
1507         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
1508         (DoubleConstant.Reduce): Ditto.
1509
1510 2006-04-23  Raja R Harinath  <rharinath@novell.com>
1511
1512         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
1513         Remove 'lvalue_right_side' argument.  Move parts to ...
1514         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
1515         (LocalVariable.DoResolveLValue): ... these.
1516
1517 2006-04-21  Raja R Harinath  <rharinath@novell.com>
1518
1519         Fix cs1655.cs
1520         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
1521         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
1522         (LocalVariableReference.DoResolveBase): Use it to implement new
1523         CS1655 check.
1524         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
1525         (Argument.Resolve): Simplify.  Move CS1510 check ...
1526         * ecore.cs (Expression.ResolveLValue): ... here.
1527         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
1528         (PropertyExpr.DoResolveLValue): Likewise.
1529         (FieldExpr.Report_AssignToReadonly): Likewise.
1530         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
1531         LValueMemberAccess or LValueMemberOutAccess on instance depending
1532         on it.
1533         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
1534         DoResolve as appropriate.
1535
1536 2006-04-20  Raja R Harinath  <rharinath@novell.com>
1537
1538         Fix #75800
1539         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
1540         implicit conversions on 'out' and 'ref' arguments.
1541
1542         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
1543         improve clarity.  Remove dead code.
1544
1545         Fix #66031
1546         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
1547         (Catch.Resolve): Resolve VarBlock if it exists.
1548
1549 2006-04-19  Miguel de Icaza  <miguel@novell.com>
1550
1551         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
1552         twice, this was some residual code, the enumerator was emitted
1553         properly in the two branche of if later.
1554
1555         Fixes #78031
1556         
1557         Thanks to Martin for finding the source of the problem
1558         
1559 2006-04-19  Raja R Harinath  <rharinath@novell.com>
1560
1561         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
1562         cast is never an lvalue.
1563         (Cast.DoResolve, Cast.ResolveRest): Combine.
1564         (Argument.Emit): Simplify slightly.  Move 'Expr is
1565         IMemoryLocation' check ...
1566         (Argument.Resolve): ... here.
1567         (Argument.Error_LValueRequired): Remove.  Inline into only user.
1568
1569         Simplifications.  Fix cs0191-2.cs
1570         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
1571         CS1649 and CS1651 to ...
1572         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
1573         the actual selection of the error code and message to a lookup
1574         table.  Add a dummy return value to simplify callsites.
1575         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
1576         readonly fields of other instances of the same type.  Move CS0197
1577         warning from ...
1578         * expression.cs (Argument.Resolve): ... here.  Simplify code.
1579         Ensure that ec.InRefOutArgumentResolving is only set during LValue
1580         resolution of an out or ref argument.  The code simplification
1581         above uses this invariant.
1582
1583 2006-04-18  Raja R Harinath  <rharinath@novell.com>
1584
1585         Possibly fix #77752.  Fix cs1690-[4-7].cs.
1586         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
1587         CheckMarshallByRefAccess.  Drop parameter.
1588         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
1589         warning.
1590         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
1591         InstanceExpression.
1592         * report.cs (AllWarnings): Add CS1690.
1593         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
1594         for ref access too.
1595         (LocalVariableReference.DoResolveBase): Update.
1596
1597 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1598
1599         * class.cs (MethodOrOperator): Moved common parts from method class.
1600         detect obsolete attributes.
1601         (Method.Define): Simplified as it reuses code from base.
1602         (Constructor.ValidAttributeTargets): Fixed issue found during
1603         refactoring.
1604         (Destructor.ValidAttributeTargets): Fixed issue found during
1605         refactoring.
1606         (Operator): Finished refactoring set off by #78020. Operator class is now
1607         ordinary method class.
1608
1609         * anonymous.cs: Updated.
1610
1611 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1612
1613         * class.cs (Constructor.Emit): Don't emit the attributes twice.
1614
1615 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1616
1617         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
1618         detect obsolete attributes.
1619         (Method.CreateEmitContext): Moved to MethodOrOperator.
1620
1621 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1622
1623         A fix for #78048.
1624         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
1625         customized exception to make crash detection easier.
1626         (MethodOrOperator): Started to work on new base class for methods and
1627         operators.
1628         (Method): Derives from MethodOrOperator.
1629         (Constructor.Emit): Emits its own attributes.
1630         (AbstractPropertyEventMethod.Emit): Ditto.
1631         (Operator): Derives from MethodOrOperator, will refactor fully in extra
1632         patch.
1633         (Operator.Emit): It's temporary more tricky than should be.
1634         
1635         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
1636
1637         * report.cs (InternalErrorException): Add ctor with inner exception.
1638
1639 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
1640
1641         A fix for #76744.
1642         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
1643         only not visible.
1644
1645 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
1646
1647         A fix for #77916.
1648         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
1649         array.
1650
1651 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1652
1653         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
1654         attribute is present and Guid not.
1655         (Interface.ApplyAttributeBuilder): Ditto.
1656
1657         * attribute.cs: Add error message.
1658
1659 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1660
1661         A fix for #78020.
1662
1663         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
1664         sources (it's composite) so hold them in extra array as they are used in
1665         Emit phase only. It worked in the previous versions by mistake.
1666         (Attribute.Emit): Emit attribute for more owners when exist.
1667
1668         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
1669         it has now different behaviour.
1670
1671 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
1672
1673         * constant.cs (Constant.IsDefaultInitializer): New method.
1674
1675         * class.cs: Updated.
1676
1677         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
1678         re-initialize default values. It saves KBs almost for every assembly.
1679         Thanks Zoltan for the idea.
1680         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
1681         (ArrayCreation.DoResolve): Resolve only once.
1682         (ArrayCreation.Emit): Emit static initializer only when it is faster.
1683         (ArrayCreation.GetAttributableValue): Cope with optimized values.
1684
1685 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
1686
1687         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
1688         From #77961.
1689
1690 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1691
1692         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
1693         in an embedded statement too.
1694
1695 2006-04-01  Raja R Harinath  <rharinath@novell.com>
1696
1697         Fix #77929
1698         * typemanager.cs (IsNestedChildOf): Drop generic arguments before
1699         testing.
1700
1701         Fix #77958
1702         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
1703
1704         Fix #77962
1705         * report.cs (SymbolRelatedToPreviousError): Drop generic type
1706         arguments before checking whether a type is reflected or not.
1707
1708         Fix #77954
1709         * expression.cs (Invocation.IsApplicable): Ensure a generic method
1710         definition doesn't take part in overload resolution.
1711         (Invocation.IsParamsMethodApplicable): Likewise.
1712         (Invocation.OverloadResolve): When replacing a reflected override
1713         method with its base definition, ensure that type arguments are
1714         applied.
1715
1716 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1717
1718         A fix for #77966.
1719
1720         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
1721         was not specified.
1722
1723         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
1724
1725 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
1726
1727         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
1728         phase.
1729
1730         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
1731         LocalTemporary change.
1732
1733         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
1734         TypeContainer.
1735         (ClassOrStruct.DefineFieldInitializers): Implemented static field
1736         initializers optimization.
1737         (ClassOrStruct.TypeAttr): Moved from modifiers.
1738         (Constructor.CheckBase): Don't crash when static ctor has parameters.
1739         (FieldBase.ResolveInitializer): Resolves initializer.
1740         (FieldBase.HasDefaultInitializer): New property.
1741
1742         * cs-parser.jay: Removed message.
1743
1744         * expression.cs (CompilerGeneratedThis): New specialization.
1745
1746         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
1747
1748 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
1749
1750         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
1751
1752 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1753
1754         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
1755         be now EnumConstants only.
1756
1757 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1758
1759         * attribute.cs, driver.cs: Reset more caches.
1760
1761 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1762
1763         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
1764
1765 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1766
1767         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
1768         for easier reuse. Updated all overrides.
1769         (IntegralConstant): New base class for all integral constants.
1770         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
1771         of the constant range, report custom error.
1772         (UIntConstant.Reduce): Fixed uint conversion.
1773
1774         * ecore.cs, literal.cs: Reduce updates.
1775
1776 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1777
1778         A fix for #75813.
1779
1780         * class.cs (Constructor.Define): Removed extra if for default ctors.
1781         A patch from Atsushi Enomoto.
1782
1783 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1784
1785         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
1786         GetAttributableValue.
1787
1788         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
1789         when required.
1790
1791         * convert.cs (ImplicitConversionRequired): Error message moved to
1792         DoubleLiteral.
1793
1794         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
1795         automatic implicit conversion of an output value.
1796         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
1797
1798         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
1799         conversion.
1800         (TypeOf.GetAttributableValue): Add extra handling for object type.
1801
1802         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
1803         special error message.
1804
1805 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
1806
1807         * class.cs (Constructor.Emit): Don't crash when struct ctor is
1808         InternalCall.
1809         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
1810         compatible with MS runtime.
1811
1812 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
1813
1814         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
1815         attribute arguments here.
1816
1817         * class.cs (Indexer.Define): The check was moved to attribute class.
1818
1819 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1820
1821         * expression.cs (StringConcat.Append): Reverted back to no warning state.
1822
1823 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1824
1825         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
1826
1827         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
1828         the blocks too.
1829
1830 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
1831
1832         * doc-bootstrap.cs : fix build.
1833
1834 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1835
1836         * expression.cs (StringConcat.Append): Issue a warning when empty string
1837         is going to append.
1838
1839 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1840
1841         * assign.cs (CompoundAssign.ResolveSource): Removed.
1842
1843         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
1844         clean up.
1845
1846         * class.cs (TypeContainer.FindMethods): Removed.
1847         (TypeContainer.CheckMemberUsage): Made static.
1848
1849         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
1850
1851         * constant.cs (CheckRange): Removed unused type argument.
1852         (CheckUnsigned): Removed unused type argument.
1853
1854         * cs-parser.jay: Updated after MemberAccess clean up.
1855         Uses Length for empty string test.
1856
1857         * cs-tokenizer.cs: Uses Length for empty string test.
1858         (IsCastToken): Made static.
1859         (is_hex): Made static.
1860         (real_type_suffix): Made static.
1861
1862         * decl.cs (SetupCache): Made static.
1863         (OnGenerateDocComment): Removed unused ds argument.
1864
1865         * delegate.cs (VerifyDelegate): Removed unused argument.
1866
1867         * doc.cs: Uses Length for empty string test.
1868
1869         * driver.cs: Uses Length for empty string test.
1870
1871         * enum.cs (IsValidEnumType): Made static
1872
1873         * expression.cs (EnumLiftUp): Removed unused argument.
1874         (ResolveMethodGroup): Ditto.
1875         (BetterConversion): Ditto.
1876         (GetVarargsTypes): Ditto.
1877         (UpdateIndices): Ditto.
1878         (ValidateInitializers): Ditto.
1879         (MemberAccess.ctor): Ditto.
1880         (GetIndexersForType): Ditto.
1881
1882         * flowanalysis.cs: (MergeFinally): Removed unused argument.
1883
1884         * iterators.cs: Updated after MemberAccess clean up.
1885
1886         * location.cs: Uses Length for empty string test.
1887
1888         * namespace.cs: Uses Length for empty string test.
1889
1890          * report.cs (CheckWarningCode): Made static.
1891
1892         * statement.cs (LabeledStatement): Removed unused argument.
1893
1894         * typemanager.cs (FilterNone): Removed.
1895
1896 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1897
1898         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
1899         obsolete.
1900
1901         * class.cs: Updated.
1902
1903 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1904
1905         * cs-parser.jay.cs: __arglist is not allowed for delegates.
1906
1907 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1908
1909         A fix for #77816.
1910
1911         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
1912         host container.
1913         (AnonymousMethod.ImplicitStandardConversionExists): New method.
1914         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
1915         Add more error reporting; Fixed issue with params.
1916
1917         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
1918
1919         * cs-parser.jay: AnonymousMethod requires host container.
1920
1921         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
1922
1923 2006-03-18  Raja R Harinath  <harinath@gmail.com>
1924
1925         * class.cs: Change 'TypeContainer ds' constructor argument to
1926         'DeclSpace parent'.  Some classes were missed below due to
1927         different naming convention.
1928
1929         * class.cs (MemberCore.Parent): Delete.  This makes the
1930         ParentContainer changes below enforceable by the compiler.
1931
1932         Treat pointers to enclosing declaration space as 'DeclSpace', not
1933         'TypeContainer'.
1934         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
1935         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
1936
1937         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
1938         of TypeContainer.
1939         (Block.AddThisVariable): Likewise.
1940         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
1941         (AbstractPropertyEventMethod.Emit): Likewise.
1942         (AbstractPropertyEventMethod.EmitMethod): Likewise.
1943         (GetMethod.Define, SetMethod.Define): Likewise.
1944         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
1945         (DelegateMethod.EmitMethod): Likewise.
1946
1947         Fix regression test-partial-13.cs.
1948         Rationalize use of PartialContainer.  Ensure that the partial
1949         class semantics can be tied to type-correctness, i.e., any
1950         violation will cause a compile error.
1951         * class.cs, const.cs: Access all fields that belong to class
1952         TypeContainer via ParentContainer.  Arguments of EmitContexts and
1953         Resolve()-like functions still use 'Parent'.
1954
1955         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
1956         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
1957         (PropertyMethod.CheckModifiers): Remove unused argument.
1958         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
1959         DeclSpace.
1960
1961 2006-03-28  Raja R Harinath  <rharinath@novell.com>
1962
1963         * decl.cs (DeclSpace.LookupGeneric): Update to changes.
1964
1965 2006-03-17  Raja R Harinath  <harinath@gmail.com>
1966
1967         Make semantics of PartialContainer simpler.
1968         * decl.cs (DeclSpace.IsPartial): Remove.
1969         * class.cs (TypeContainer.IsPartial): Likewise.
1970         (TypeContainer..ctor): Set PartialContainer to point to self.
1971         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
1972         (TypeContainer.FindNestedType): Likewise.
1973         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
1974
1975 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
1976
1977         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
1978
1979 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1980
1981         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
1982         classes.
1983
1984 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1985
1986         * class.cs (Operator.Define): An error for base conversion was not
1987         reported correctly.
1988
1989 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
1990
1991         A fix for #77593, #77574.
1992
1993         * class.cs (MethodCore.CheckBase): Another if for operator.
1994
1995 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1996
1997         A fix for #77822.
1998
1999         * expression.cs (VerifyArgumentsCompat): Reverted to double error
2000         reporting, it's more tricky than I thought.
2001
2002 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
2003
2004         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
2005         were not resolved
2006
2007         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
2008         (DelegateCreation.ImplicitStandardConversionExists): New method for just
2009         conversion test.
2010         
2011         * ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
2012         not needed.
2013
2014 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
2015
2016         A fix for #77353.
2017
2018         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
2019         (Event.Define): ditto
2020         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
2021
2022         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
2023         Removed redundant code and set NewSlot for Invoke method too.
2024
2025         * parameter.cs (Parameters.ctor): Add custom, type ctor.
2026         (Parameters.MergeGenerated): New method. Use this method when you merge
2027         compiler generated argument with user arguments.
2028
2029 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
2030
2031         * attribute.cs (ResolveAsTypeTerminal): Removed.
2032
2033         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
2034         specialization for predefined types; 30% speed up.
2035         Finally placed obsolete check to right place.
2036         (Expression.ResolveType): Removed.
2037
2038         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
2039         Updated after ResolveType was removed.
2040
2041         * expression.cs (Cast.ctor): Check void cast.
2042         (Binary.ResolveAsTypeTerminal): Is never type.
2043         (Conditional.ResolveAsTypeTerminal): Is never type.
2044
2045         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
2046
2047 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
2048
2049         * rootcontext.cs (ResolveCore): Removed System.INullableValue.
2050
2051 2006-03-23  Martin Baulig  <martin@ximian.com>
2052
2053         * expression.cs (Is.DoResolve, As.DoResolve): Perform a dynamic
2054         type check if either of the types is an open generic type.
2055
2056 2006-03-23  Martin Baulig  <martin@ximian.com>
2057
2058         * convert.cs
2059         (Convert.ExplicitTypeParameterConversion): New method; implement
2060         explicit type parameter conversions.
2061
2062 2006-03-23  Martin Baulig  <martin@ximian.com>
2063
2064         * convert.cs (Convert.ImplicitTypeParameterConversion): Do not
2065         blindly allow all conversions if we do not have any constraints.
2066
2067 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
2068
2069         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
2070         these two separated members to simplify the code.
2071         (Attribute.Resolve): Refactored to use new fields and methods.
2072         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
2073         implemented obsolete attribute checking.
2074         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
2075         implemented obsolete checking again. It look line never ending quest ;-)
2076         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
2077
2078         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
2079
2080         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
2081
2082         *class.cs (Property.Define): Add RegisterProperty call.
2083
2084         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
2085         argument groups (only 2).
2086
2087         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
2088         encoding expression to arguments.
2089         (Expression.ExprClassToResolveFlags): Just turned to property.
2090
2091         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
2092         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
2093         optimized as well as implemented support for zero-length attributes.
2094
2095         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
2096         Add caching of PropertyInfo's.
2097
2098 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
2099
2100         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
2101         error multiple times.
2102
2103 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
2104
2105         New partial class implementation.
2106         A fix for #77027, #77029, #77403
2107
2108         * attribute.cs (Attributable): Made attributes protected.
2109
2110         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
2111         the replacements of ClassPart and PartialContainer.
2112         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
2113         (TypeContainer.AddInterface): Ditto.
2114         (TypeContainer.AddPartial): The main method for partial classes. It checks
2115         for errors and merges ModFlags and attributes. At the end class is added to
2116         partial_parts list.
2117         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
2118         required here.
2119         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
2120         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
2121         from the rest of partial classes.
2122         (TypeContainer.GetClassBases): Simplified.
2123         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
2124         DefineType.
2125         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
2126         (TypeContainer.HasExplicitLayout): Uses Flags now.
2127         (PartialContainer): Removed.
2128         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
2129         (StaticClass): Was merged with Class.
2130         (Class.GetClassBases): class and static class bases are verified here.
2131         (Class.TypeAttr): Added static attributes when class is static.
2132         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
2133         (MemberBase): In some cases we need to call parent container for partial
2134         class. It should be eliminated but it's not easy now.
2135
2136         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
2137
2138         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
2139         partial classed to accumulate class comments.
2140         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
2141
2142         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
2143
2144         * driver.cs (MainDriver): Tree.GetDecl was removed.
2145
2146         * modifiers.cs (Modifiers): Add partial modifier.
2147
2148         * tree.cs (Tree.decl): Removed.
2149         (RootTypes): Started to use this class more often for root types
2150         specializations.
2151
2152 2006-03-23  Raja R Harinath  <rharinath@novell.com>
2153
2154         * generic.cs (TypeParameter.UpdateConstraints): Update
2155         'constraints' if null.
2156
2157 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
2158
2159         A fix for #77615
2160
2161         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
2162         external interface does not have an attribute.
2163
2164 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
2165
2166         Another prerequisites for new partial classs implementation.
2167         
2168         * attribute.cs (Attribute.Equal): Implemented.
2169         (Attribute.Emit): Changed as attributes can be applied more than twice.
2170         (Attributes.Emit): Check for duplicate attributes here.
2171
2172         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
2173         as a parameter, clean-up.
2174
2175 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
2176
2177         A fix for #77485
2178
2179         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
2180         contains obsolete attribute check which can in some cases look for base
2181         type of current class which is not initialized yet.
2182         (TypeContainer.BaseType): Replacement of ptype.
2183
2184         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
2185
2186 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
2187
2188         First of prerequisites for new partial classs implemention.
2189         
2190         * attribute.cs (Attributable): Extended by ResolveContext;
2191         Attributes finally have correct context for resolving in all cases.
2192         (AttachTo): Attribute owner is assigned here.
2193
2194         * codegen.cs (IResolveContext): Introduce new interface to hold
2195         all information needed in resolving phase.
2196         (EmitContext): Implements IResolveContext; more clean-up needed here.
2197         
2198         * decl.cs (MemberCore): Implemented IResolveContext.
2199
2200         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
2201         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
2202         parameter.cs, statement.cs, tree.cs, typemanager.cs:
2203         Refactored to use new IResolveContext instead of EmitContext; cleanup
2204
2205 2006-03-22  Raja R Harinath  <rharinath@novell.com>
2206
2207         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
2208         mcs to keep code differences small.
2209         * attribute.cs (Attribute.GetParameterDefaultValue): New.
2210         * typemanager.cs (parameter_default_value_attribute_type): New.
2211         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
2212         CS1908 check.
2213
2214 2006-03-22  Martin Baulig  <martin@ximian.com>
2215
2216         * generic.cs
2217         (Nullable.NullableLiteral): Derive from `NullLiteral'.
2218
2219         * convert.cs
2220         (Convert.TypeParameter_to_Null): Create a `Nullable.NullableLiteral'
2221         instead of the normal `NullLiteral'.
2222
2223 2006-03-21  Martin Baulig  <martin@ximian.com>
2224
2225         Fix #77583.
2226         * generic.cs (TypeManager.InferType): If `pt' is a generic
2227         parameter, don't check whether `pt == at'.
2228
2229 2006-03-20  Raja R Harinath  <rharinath@novell.com>
2230
2231         Fix #77852
2232         * generic.cs (Constraints.Resolve): Change argument to IResolveContext.
2233         (TypeParameter.Resolve): Update to change.
2234         (ConstraintChecker.CheckConstraints): Resolve type-argument
2235         constraints before use.
2236
2237 2006-03-16  Martin Baulig  <martin@ximian.com>
2238
2239         * generic.cs
2240         (ConstraintChecker.HasDefaultConstructor): If we're a TypeBuilder
2241         and don't have any instance constructors, also lookup in the base class.
2242         (TypeManager.IsNullableValueType): New public method.
2243
2244         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Clear the
2245         `BindingFlags.DeclaredOnly' flag and set `used_cache'.
2246         (TypeManager.TryGetBaseDefinition): Use DropGenericMethodArguments().
2247
2248         * expression.cs (Unary.DoResolve): Use TypeManager.IsNullableValueType()
2249         instead of just TypeManager.IsNullableType() to determine whether
2250         a lifted operator exists.
2251         (UnaryMutator.DoResolve): Likewise.
2252         (Conditional.DoResolve): Likewise.
2253         (Binary.DoResolve): A lifted operator only exists if both operands
2254         are valuetypes and at least one of them is a nullable type.
2255
2256 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
2257
2258         * iterator.cs : yield break is allowed in try statement which has
2259           catch clauses. Fixed bug #77767.
2260
2261 2006-03-12  Martin Baulig  <martin@ximian.com>
2262
2263         * typemanager.cs (TypeManager.ArrayContainsMethod): Use a new
2264         private IsSignatureEqual() to compare types; see the comment in
2265         that method; fixes #77674.
2266
2267 2006-03-10  Raja R Harinath  <rharinath@novell.com>
2268
2269         * ecore.cs (Expression.ResolveAsTypeStep): Remove 1-argument wrapper.
2270         (Expression.ResolveAsTypeTerminal): Likewise.
2271         * class.cs, decl.cs, delegate.cs, ecore.cs: Update to changes.
2272         * expression.cs, generic.cs, iterators.cs: Likewise.
2273         * parameter.cs, statement.cs, typemanager.cs: Likewise.
2274
2275 2006-03-09  Martin Baulig  <martin@ximian.com>
2276
2277         * generic.cs (ConstraintChecker.HasDefaultConstructor): Call
2278         TypeManager.DropGenericTypeArguments() on the `atype'; fixes #77548.
2279
2280 2006-03-09  Martin Baulig  <martin@ximian.com>
2281
2282         * ecore.cs (FieldExpr.AddressOf): Don't emit the instance if the
2283         `prepared' flag is set.
2284
2285         * generic.cs (LiftedBinaryOperator): Don't allow `||' or `&&' anymore.
2286         (LiftedBinaryOperator, LiftedUnaryMutator): Fix a few nullable
2287         issues; see gtest-254.cs.
2288
2289 2006-03-07  Martin Baulig  <martin@ximian.com>
2290
2291         * generic.cs (TypeManager.InferType): Allow infering
2292         `IEnumerable<T>' with an array of T; see gtest-251.cs.
2293
2294 2006-03-06  Martin Baulig  <martin@ximian.com>
2295
2296         * generic.cs
2297         (TypeManager.InferType): Fix gtest-250.cs.
2298
2299         * typemanager.cs
2300         (TypeManager.IsSubclassOf): Also check the base class.
2301
2302         * expression.cs
2303         (Invocation.IsAncestralType): Use TypeManager.IsSubclassOf();
2304         fixes gtest-249.cs.
2305
2306 2006-03-01  Raja R Harinath  <rharinath@novell.com>
2307
2308         Fix #77679.
2309         * expression.cs (ParameterReference.DoResolveBase): Change return
2310         type to bool.
2311         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
2312         Update.
2313
2314         Fix #77628.
2315         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
2316
2317         Fix #77642.
2318         * typemanager.cs (GetFullNameSignature): Don't nullref on
2319         protected accessors.
2320
2321 2006-02-16  Martin Baulig  <martin@ximian.com>
2322
2323         * generic.cs
2324         (TypeManager.GetGenericFieldDefinition): New public method; use it
2325         instead of the `FieldInfo.Mono_GetGenericFieldDefinition()' icall.
2326
2327 2006-02-14  Martin Baulig  <martin@ximian.com>
2328
2329         * *.cs: Use `Type.IsGenericType' instead of `Type.IsGenericInstance'.
2330
2331 2006-02-14  Martin Baulig  <martin@ximian.com>
2332
2333         * generic.cs
2334         (TypeManager.DropGenericMethodArguments): New public method; don't
2335         use GetGenericMethodDefinition() on something which is not a
2336         generic method.
2337
2338 2006-02-14  Martin Baulig  <martin@ximian.com>
2339
2340         * generic.cs
2341         (ConstraintChecker.CheckConstraints): If a type parameter has the
2342         `struct' constraint, the type must be a non-nullable valuetype.
2343
2344 2006-02-10  Martin Baulig  <martin@ximian.com>
2345
2346         * typemanager.cs
2347         (TypeManager.IsOverride): Make this work for instantiated methods
2348         in a generic class; fixes #77509.
2349         (TypeManager.ExpandInterfaces): Use TypeManager.GetInterfaces()
2350         rather than calling it directly; fixes #77488.  
2351
2352 2006-02-08  Martin Baulig  <martin@ximian.com>
2353
2354         * generic.cs (ConstraintChecker.CheckConstraints): Move the error
2355         reporting into CheckConstraint() so we can use the correctly
2356         instantiated type.
2357
2358 2006-02-08  Martin Baulig  <martin@ximian.com>
2359
2360         * expression.cs (BaseAccess): Add support for generic methods.
2361
2362         * ecore.cs (MethodGroupExpr.ResolveGeneric): Propagate `IsBase' to
2363         the new MethodGroupExpr.
2364
2365 2006-02-07  Martin Baulig  <martin@ximian.com>
2366
2367         * generic.cs (ConstraintChecker.CheckConstraints): Interfaces are
2368         also reference types; fixes #77483.
2369
2370 2006-02-07  Martin Baulig  <martin@ximian.com>
2371
2372         * generic.cs
2373         (TypeManager.IsGenericMethod): We now return whether something is
2374         an instantiated generic method (and not a generic method def).
2375         (TypeManager.IsGenericMethodDefinition): New public method.
2376
2377         * typemanager.cs
2378         (TypeManager.CSharpSignature): Only include type arguments for
2379         "real" generic methods, not for any instantiated method.
2380         (TypeManager.GetMethodName): Likewise, but also allow generic
2381         method definitions here.
2382
2383 2006-02-06  Miguel de Icaza  <miguel@novell.com>
2384
2385         * codegen.cs (EmitScopeInitFromBlock): check here the
2386         capture_context, there is no need to make two calls to the
2387         EmitContext. 
2388
2389         * anonymous.cs: Add some debugging messages that might help me
2390         track other instances of this problem in the future (the
2391         regression of test 467).
2392
2393         * cs-parser.jay: track the variable block, as we need to initalize
2394         any captured variables declared in this block for the "catch"
2395         portion of the "Try" statement.
2396
2397         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
2398         scope initialization for captured variables. 
2399
2400         Also, move the emit for the variables after the block location has
2401         been marked.
2402
2403 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
2404
2405        * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
2406         
2407 2006-02-06  Martin Baulig  <martin@ximian.com>
2408
2409         * class.cs (TypeContainer.DefineType): If we're a struct, pass
2410         `TypeManager.value_type' as parent type to
2411         ModuleBuilder.DefineType().  Fixes #77358.      
2412
2413 2006-02-02  Miguel de Icaza  <miguel@novell.com>
2414
2415         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
2416         commit yesterday, the initialization for the roots is necessary.
2417         What is not necessary is the scope activation.
2418
2419 2006-02-02  Raja R Harinath  <rharinath@novell.com>
2420
2421         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
2422         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
2423         CS0206 checks.
2424         (Argument.Resolve): Remove CS0206 checks.
2425
2426 2006-02-01  Miguel de Icaza  <miguel@novell.com>
2427
2428         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
2429         scopes for all the roots, the scopes will now be emitted when the
2430         Blocks are entered. [This change was wrong, fixed on 2006-02-02]
2431
2432         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
2433         code.  This reduces a lot of existing cruft.
2434         
2435         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
2436         that the ScopeInfo is generated as we enter the scope, not at the
2437         time of use, which is what we used to do before.
2438
2439         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
2440         every time a Block is about to be emitted if we have a
2441         CaptureContext. 
2442
2443 2006-02-01  Raja R Harinath  <rharinath@novell.com>
2444
2445         * codegen.cs (AssemblyClass.Emit): Emit RuntimeCompatibility
2446         attribute for mscorlib too.
2447
2448         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
2449         (Reset): Update.
2450         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
2451
2452         * typemanager.cs (cons_param_array_attribute): Make private.
2453         (Reset): Set it to null.
2454         (InitCoreHelpers): Don't initialize it.
2455         (ConsParamArrayAttribute): New.  Initialize it as needed.
2456         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
2457
2458 2006-01-31  Miguel de Icaza  <miguel@novell.com>
2459
2460         * expression.cs: There might be errors reported during the
2461         selection of applicable methods.  If there are errors, do not
2462         continue execution as it will lead the compiler to crash.
2463
2464 2006-01-30  Miguel de Icaza  <miguel@novell.com>
2465
2466         * expression.cs: Member access is not allowed on anonymous
2467         methods.  Fixes #77402.
2468
2469 2006-01-30  Raja R Harinath  <rharinath@novell.com>
2470
2471         Fix #77401
2472         * cs-parser.jay (VariableDeclaration): Don't set
2473         current_array_type to null.
2474         (field_declaration, event_declaration, declaration_statement):
2475         Set it to null here.
2476
2477 2006-01-29  Raja R Harinath  <harinath@gmail.com>
2478
2479         Fix part of #77397
2480         * generic.cs (TypeManager.IsEqual): Handle pass-by-ref types.
2481
2482 2006-01-28  Raja R Harinath  <harinath@gmail.com>
2483
2484         * typemanager.cs (GenericParameterPosition): New.
2485         * doc.cs: Use it.
2486
2487 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
2488
2489         * doc.cs : To process "include" elements, first we should create
2490           another list than XmlNodeList, because it could result in node
2491           removal, which could result in that the XmlNodeList gives up
2492           yielding next node.
2493
2494 2006-01-25  Miguel de Icaza  <miguel@novell.com>
2495
2496         * expression.cs: Introduce an error report that we were not
2497         catching before.   Gonzalo ran into it.
2498
2499 2006-01-23  Miguel de Icaza  <miguel@novell.com>
2500
2501         A fix for bug: #76957
2502         
2503         * iterators.cs (MoveNextMethod.CreateMethodHost): call
2504         ComputeMethodHost before creating the method, this is a new
2505         requirement. 
2506
2507         * anonymous.cs (AnonymousContainer): Now we track all the scopes
2508         that this method references (RegisterScope).  The actual scope
2509         where the method is hosted is computed with the ComputeMethodHost
2510         before we create the method.
2511
2512         Moved the Deepest routine here.
2513
2514         (AnonymousContainer.ComputeMethodHost): New routine used to
2515         compute the proper ScopeInfo that will host the anonymous method.
2516
2517         (ScopeInfo): Deal with multiple roots.  The problem was that we
2518         did not have a unique root where all ScopeInfos could be hanged
2519         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
2520         of roots.  
2521
2522         Remove AdjustMethodScope which is now computed at the end.  Remove
2523         LinkScope which did a partial link, instead link all ScopeInfos
2524         before code generation from the new "LinkScopes" routine. 
2525
2526         Simplify all the Add* routines as they no longer need to maintain
2527         the tree, they just need to record that they are using variables
2528         from a ScopeInfo.
2529
2530         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
2531         routines to produce the forest of ScopeInfo trees.
2532
2533         * class.cs (TypeContainer.AppendMethod): This is just like
2534         AddMethod, but ensures that an interface implementation method
2535         (IEnumerable.XXX) is not inserted at the beginning of the queue of
2536         methods, but at the end.
2537
2538         We use this functionality to ensure that the generated MoveNext
2539         method in the iterator class is resolved/emitted before the
2540         enumerator methods created.   
2541
2542         This is required because the MoveNext method computes the right
2543         ScopeInfo for the method.  And the other methods will eventually
2544         need to resolve and fetch information computed from the anonymous
2545         method. 
2546
2547         
2548 2006-01-23  Raja R Harinath  <rharinath@novell.com>
2549
2550         Improve implementation of section 14.4.2.2 (Better function member).
2551         * expression.cs (Invocation.MoreSpecific): Compare all type
2552         arguments before deciding if one type is more specific than
2553         another.  Handle array types too.  Return the more specific type.
2554         (Invocation.BetterFunction): Add more tie-breaking rules from
2555         section 14.4.2.2.  Perform "more specific" check after
2556         other tie-breaking rules.  Compare all parameter types before
2557         choosing the "more specific" method.
2558
2559 2006-01-21  Raja R Harinath  <harinath@gmail.com>
2560             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
2561
2562         Fix rest of #76995.
2563         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
2564         the 'aliases' hash.
2565         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
2566         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
2567
2568 2006-01-18  Martin Baulig  <martin@ximian.com>
2569
2570         * class.cs (TypeContainer.AddToMemberContainer): Use
2571         `symbol.MemberName.MethodName' instead of just `symbol.Name';
2572         fixes #77124.
2573
2574 2006-01-18  Martin Baulig  <martin@ximian.com>
2575
2576         Fix #76417: a generic class may now have methods which may unify
2577         for some type parameter substitutions.
2578
2579         * class.cs (Method.IsDuplicateImplementation): Don't report CS0408
2580         for methods which may unify anymore.
2581
2582         * expression.cs (Invocation.MoreSpecific): New private static
2583         method; checks whether one method is more specific than another
2584         according to 14.4.2.2 of the spec.
2585         (Invocation.BetterFunction): Implement the tie-breaking rules from
2586         14.4.2.2 of the spec: if two methods unify for some type parameter
2587         substitution, we need to pick the more specific one.
2588
2589 2006-01-18  Raja R Harinath  <rharinath@novell.com>
2590
2591         Fix #76656, cs0231-2.cs.
2592         * cs-parser.jay (formal_parameter_list): Make error case catch
2593         more issues.
2594         (parenthesized_expression_0): Add CS1026 check.
2595         (invocation_expression): Remove unused { $$ = lexer.Location }.
2596
2597 2006-01-17  Raja R Harinath  <rharinath@novell.com>
2598
2599         Fix #76824.
2600         * cs-parser.jay (statement_expression): Don't list out the
2601         individual statement-expressions.  Convert syntax error into
2602         CS0201 check.
2603
2604 2006-01-16  Raja R Harinath  <rharinath@novell.com>
2605
2606         Fix #76874.
2607         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
2608         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
2609         CheckIntermediateModification.
2610         (FieldExpr.DoResolve): Add new two-argument version that
2611         allows us to resolve the InstanceExpression as an lvalue.
2612         The one-argument variant is now just a wrapper.
2613         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
2614         Resolve the lhs as an lvalue if the it has a value type.
2615         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
2616         from Assign.DoResolve.
2617         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
2618         resolved as an lvalue.
2619         (PropertyExpr.DoResolve): Update.
2620         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
2621         has a value type.  Move CS1612 check here from
2622         CheckIntermediateModification.
2623         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
2624         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
2625         'right_side' of a ResolveLValue on an 'out' argument.
2626         (EmptyExpression.LValueMemberAccess): New.  Used as the
2627         'right_side' of a propagated ResolveLValue on a value type.
2628         (LocalVariableReference.DoResolveBase): Recognize
2629         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
2630         Add CS1654 check.
2631         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
2632         EmptyExpression.Null.
2633
2634 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
2635
2636         * typemanager.cs : added IsGenericParameter(). In gmcs it returns
2637           Type.IsGenericParameter(). Fixed bug #77183.
2638         * doc.cs : it is now identical to doc.cs in mcs.
2639
2640 2006-01-16  Martin Baulig  <martin@ximian.com>
2641
2642         * generic.cs (ConstraintChecker.CheckConstraint): Fix #77167.
2643
2644 2006-01-16  Martin Baulig  <martin@ximian.com>
2645
2646         * typemanager.cs (TypeManager.CSharpSignature): Make this work for
2647         ctors; fixes #77250.
2648
2649 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2650
2651         This fixes the problem where we used ldfld instead of ldflda to
2652         load the "THIS" pointer on captured parameters, when THIS is a
2653         value type.  See bug #77205.
2654         
2655         * iterators.cs (CapturedThisReference.Emit): Pass false to
2656         EmitThis (we do not need the address).
2657
2658         * codegen.cs (EmitThis): it needs to know whether we need the
2659         address of `this' or not.  This is used by value types.  
2660
2661         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
2662         every other call passes false.
2663
2664 2006-01-12  Raja R Harinath  <rharinath@novell.com>
2665
2666         Fix #77221.
2667         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
2668         GetOverride.
2669         * expression.cs (Invocation.OverloadResolve): Update.
2670         (Invocation.DoResolve): Avoid double resolution of invocation.
2671
2672 2006-01-11  Raja R Harinath  <rharinath@novell.com>
2673
2674         Fix #77180.
2675         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
2676         unary negation of floating point types as 0-expr; negation cannot
2677         overflow in floating point types.
2678
2679         Fix #77204.
2680         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
2681         on operands of 'void' type.
2682
2683         Fix #77200.
2684         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
2685         and ExclusiveOr for boolean constants too.
2686
2687 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
2688
2689         * expression.cs: Fix Console.WriteLine ((this = x).foo);
2690
2691 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2692
2693         * cs-tokenizer.cs (Position): New class used to save and restore
2694         the position state in the tokenizer.  Before this patch the save
2695         and restore was not complete enough so the line and columns would
2696         start to drift and the debugger and stack traces will get the
2697         wrong data.
2698
2699 2006-01-10  Martin Baulig  <martin@ximian.com>
2700
2701         * generic.cs
2702         (TypeParameter.InflateConstraints): New public method.
2703
2704         * iterators.cs (Iterator.DefineNestedTypes): Also inflate the
2705         constraints; fixes #77042.
2706
2707 2006-01-10  Martin Baulig  <martin@ximian.com>
2708
2709         * anonymous.cs (ScopeInfo.EmitScopeType): Use the `CurrentType'
2710         instead of the `TypeBuilder' for this "<>THIS" variable; fixes
2711         #77061. 
2712
2713 2006-01-09  Raja R Harinath  <rharinath@novell.com>
2714
2715         Fix #75636.
2716         * expression.cs (Invocation.OverloadResolve): Replace reflected
2717         override methods with their base virtual methods, rather than
2718         skipping over them.
2719         * typemanager.cs (TypeManager.GetOverride): New.
2720
2721 2005-12-21  Miguel de Icaza  <miguel@novell.com>
2722
2723         * driver.cs: Report the case of no source files and no -out:
2724         argument provided.
2725
2726 2005-12-20  Raja R Harinath  <rharinath@novell.com>
2727
2728         Fix #77035.
2729         * expression.cs (ComposedCast.GetSignatureForError): Define.
2730
2731 2006-01-05  Jb Evain  <jbevain@gmail.com>
2732
2733         * class.cs (Property.Define, Indexer.Define): do not tag the
2734         properties as SpecialName | RTSpecialName.
2735
2736 2006-01-04  Miguel de Icaza  <miguel@novell.com>
2737
2738         * class.cs (MethodCore.IsDuplicateImplementation): This method was
2739         doing a low-level comparission of parameter types.  It was lacking
2740         a check for __argslist. 
2741
2742 2005-12-30  Miguel de Icaza  <miguel@novell.com>
2743
2744         * expression.cs (ParameterReference.DoResolveBase): Allow
2745         reference parameters if they are local to this block. 
2746
2747         This allows the ref and out parameters of a delegate to be used in
2748         an anonymous method, for example:
2749
2750         delegate void set (out int x);
2751
2752         set s = delegate (out int x){
2753                 x = 0;
2754         };
2755
2756         This is used by functionality introduced late in the C# language.
2757         
2758         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
2759         method that take ref and out parameters. 
2760
2761         Fixes #77119 which was a late change in the spec.
2762
2763 2005-12-23  Miguel de Icaza  <miguel@novell.com>
2764
2765         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
2766         parent if its the same scope.  Fixes #77060.
2767
2768 2005-12-22  Marek Safar  <marek.safar@seznam.cz>
2769
2770         * expression.cs (ComposedCast.DoResolveAsTypeStep): Fixed wrong merge.
2771
2772 2005-12-21  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2773
2774         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): Generate
2775         errors 1726 for strong named assemblies with InternalsVisibleToAttribute 
2776         that doesn't contain the full public key. This is a update of the
2777         friend assemblies in .Net 2.0 release.
2778         
2779 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
2780
2781         Fix #76995
2782
2783         * namespace.cs (NamespaceEntry): Add extern_aliases as a
2784         ListDictionary, to contain the ExternAliasEntry entries (in
2785         addition to the NamespaceEntry.aliases hashtable). This field is
2786         shared between the original entry and its doppelganger (bodyless 
2787         copy of it).
2788         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
2789         extern_aliases field.
2790         (NamespaceEntry.Lookup): Move the IsImplicit check after the
2791         lookup in extern_aliases.
2792
2793 2005-12-16  Raja R Harinath  <rharinath@novell.com>
2794
2795         Fix #77006.
2796         * class.cs (TypeContainer.Mark_HasEquals): New.
2797         (TypeContainer.Mark_HasGetHashCode): New.
2798         (ClassPart): Override them.
2799         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
2800
2801         * generic.cs (GenericMethod.DefineMembers): Update to changes.
2802         (TypeParameter.TypeParameter): Change type of 'parent' argument to
2803         DeclSpace.
2804
2805         Fix #77008.
2806         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
2807         'parent' argument to the base constructor.
2808
2809         Remove all mention of TypeContainer from decl.cs.
2810         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
2811         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
2812         (DeclSpace.DeclSpace): Likewise.
2813         (DeclSpace.DefineMembers): Remove unused argument.
2814         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
2815         debugging check -- we don't care if the debug code throws an
2816         InvalidCastException instead of an InternalErrorException.
2817         * class.cs (TypeContainer.DefineMembers): Update to changes.
2818         (TypeContainer.DoDefineMembers): Likewise.
2819         (TypeContainer.GetMethods): Likewise.
2820         (PropertyMember.Define): Likewise.
2821         (MemberBase.Parent): New property that forwards to
2822         MemberCore.Parent, but ensures that we get a TypeContainer.
2823         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
2824         (RootContext.PopulateTypes): Likewise.  Remove special case code
2825         for !RootContext.StdLib: DefineMembers is idempotent.
2826
2827 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
2828
2829         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
2830
2831 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
2832
2833         * doc.cs : The search for referenced namespace was insufficient to
2834           get global one as it used to do. Fixed bug #76965.
2835
2836 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
2837
2838         * doc.cs : check name in cref in the last phase that whether it is
2839           namespace or not.
2840
2841 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2842
2843         * cs-tokenizer.cs : reverted the latest change: it somehow broke
2844           Mono.C5.
2845
2846 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2847
2848         * doc.cs : so it turned out that we cannot skip override check for 
2849           interface members. Fixed bug #76954.
2850
2851 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2852
2853         * cs-tokenizer.cs : fixed bug #75984:
2854           - #warning and #error should not be handled when the source line
2855             is disabled.
2856           - #line is not checked strictly when the source line is disabled.
2857           - #define and #undef is on the other hand checked strictly at any
2858             state.
2859
2860 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
2861
2862         * cs-tokenizer.cs : missing Location (actually, filename) in one of
2863           CS1027 report.
2864
2865 2005-12-15  Raja R Harinath  <rharinath@novell.com>
2866
2867         * generic.cs (TypeManager.IsGeneric): Remove unused method.
2868
2869         * typemanager.cs (TypeManager.GetFullName): Rewrite to handle
2870         nested types.
2871
2872 2005-12-14  Martin Baulig  <martin@ximian.com>
2873
2874         * typemanager.cs (TypeManager.GetFullName): Make this public;
2875         `Type.Fullname' now never returns null.
2876
2877         * class.cs (Method.Define): Use TypeManager.GetFullName() for
2878         explicit interface implementations; we're now using the same
2879         naming convention than csc does.
2880
2881 2005-12-14  Miguel de Icaza  <miguel@novell.com>
2882
2883         * convert.cs (ExplicitConversionCore): Check the return value from
2884         ExplicitConversionCore which can return null on failure.  Fixes #76914
2885
2886 2005-12-09  Raja R Harinath  <rharinath@novell.com>
2887
2888         * anonymous.cs (AnonymousMethod.Compatible): Use IsGenericType
2889         instead of IsGenericInstance.
2890         * generic.cs (TypeManager.IsEqual): Likewise.  Delete redundant
2891         code that's now covered by the more general test.
2892         * typemanager.cs (TypeManager.IsPrivateAccessible): Likewise.
2893
2894         * generic.cs (DropGenericTypeArguments): New.  Captures the common
2895         pattern: if (t.IsGenericInstance) t = t.GetGenericTypeDefinition ();
2896         * attribute.cs, class.cs, decl.cs, ecore.cs: Use it.
2897         * generic.cs, report.cs, typemanager.cs: Likewise.
2898
2899 2005-12-08  Martin Baulig  <martin@ximian.com>
2900
2901         * generic.cs (TypeArguments.Resolve): Added CS1547 check.
2902
2903         * typemanager.cs (TypeManager.CSharpSignature): Include type
2904         arguments in the signature of a generic method.
2905
2906 2005-12-07  Martin Baulig  <martin@ximian.com>
2907
2908         Add support for custom attributes on type parameters.
2909
2910         * cs-parser.jay (type_arguments): Added `opt_attributes'.
2911
2912         * generic.cs (TypeParameterName): New public class; we use this
2913         instead of a `string' to store the name of a type parameter, so we
2914         can also have `Attributes'.
2915         (TypeArguments.GetDeclarations): Return a `TypeParameterName[]'
2916         array instead of a `string[]' array.
2917         (TypeParameter.ctor): We now also take an `Attributes' argument.
2918         (TypeParameter.EmitAttributes): New public method; emit our
2919         `OptAttributes' here.
2920         (GenericMethod.EmitAttributes): New public method; emit the custom
2921         attributes on all our type parameters.
2922
2923         * class.cs (TypeContainer.EmitType): Call EmitAttributes() on all
2924         our type parameters.
2925         (MethodData.Define): If we're a generic method, call
2926         EmitAttributes() on it.
2927
2928 2005-12-07  Martin Baulig  <martin@ximian.com>
2929
2930         * generic.cs
2931         (ConstraintChecker): New public abstract class; move the
2932         constraint checking here from `ConstructedType' and also do
2933         constraint checking for generic methods here.
2934
2935         * expression.cs (Invocation.OverloadResolve): Use
2936         ConstraintChecker.CheckConstraints() if we resolved to a generic
2937         method.  Fix #76806.
2938
2939 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2940
2941         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
2942
2943         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
2944         event initializers.
2945         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
2946         (FieldBase.Initializer): Initializer is now optional.
2947         (EventField.Define): Only event field can have initializer.
2948
2949         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
2950
2951         * const.cs (Const): Reuse initializer.
2952
2953         * cs-parser.jay: Updated after FieldBase changes.
2954         Added current_array_type to simplify array initializers.
2955
2956         * ecore.cs (NullCast.IsDefaultValue): Implemented.
2957
2958         * expression.cs, iterators.cs: Updated.
2959
2960         * namespace.cs (NamespaceEntry): Made UsingFound private.
2961
2962 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2963
2964         * parameterCollection.cs: Obsolete, removed.
2965         * parser.cs: Obsolete, removed.
2966
2967 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2968
2969         Fix #76849.
2970         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
2971
2972         * enum.cs (Enum.Define): Set obsolete context here.
2973
2974 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2975
2976         * doc.cs :
2977           - FindDocumentedMember() now expects 1) paramList as null
2978             when "we don't have to check the number of parameters" and
2979             2) Type.EmptyTypes when "there is no arguments".
2980           - Introduced FoundMember struct to hold the exact type which was
2981             used to find the documented member (the above change broke
2982             test-xml-044; it might be better just to use DeclaringType than
2983             what MS does, like this change does, but it depends on usage.)
2984
2985 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2986
2987         * doc.cs : documented member might be from DeclaringType for nested
2988           types. Fixed bug #76782.
2989
2990 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
2991
2992         * anonymous.cs: Have the param code handle leaving copies on the
2993         stack etc. Allows anonymous params to take part in the assignment
2994         code (++, +=, etc). Fixes bug #76550
2995
2996         * expression.cs: Handle the prepare_for_load/leave_copy by passing
2997         it down to the anon code.
2998
2999         * iterators.cs: Use dummy var here
3000
3001         * codegen.cs: Handle new vars
3002
3003 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
3004
3005         Fix #76849.
3006         * class.cs (MethodData.Define): Set proper Obsolete context.
3007
3008         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
3009         obsolete context.
3010         (FieldExpr.DoResolve): Ditto.
3011
3012 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
3013
3014         Fix #76849.
3015         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
3016         parent is not obsolete.
3017
3018 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
3019
3020         * doc.cs : (FindDocumentedMember) find parameterless members first
3021           and get CS0419 in the early stage. Fixed first case of bug #76727.
3022
3023 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
3024
3025         Fix #76859.
3026         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
3027         no error was reported.
3028
3029         *expression.cs (Binary.DoResolve): left can be null.
3030
3031 2005-12-06  Raja R Harinath  <rharinath@novell.com>
3032
3033         * class.cs (MethodCore.CheckGenericOverride): Delete unused
3034         abstract method and all overrides.
3035         * support.cs (ParameterData.GenericConstraints): Delete.
3036         (ReflectionParameters.type_params): Delete.
3037         (ReflectionParameters.ReflectionParameters): Make private.
3038         (ReflectionParameters.GetConstaints): New factory method.
3039         * generic.cs (TypeParameterDefineType): Use it.
3040         (TypeManager.GetTypeParameterConstraints): Likewise.
3041
3042 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
3043
3044         Fix #76783.
3045         * class.cs (MethodData.Emit): Parameters should be labeled first.
3046
3047 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
3048
3049         Fix #76761.
3050         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
3051
3052 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
3053
3054         * attribute.cs (AreParametersCompliant): Moved to Parameter.
3055
3056         * class.cs (MethodCore): Parameter clean up.
3057         (IMethodData): Added ParameterInfo.
3058         (MethodData): Parameter clean up.
3059         (Indexer.Define): Parameter clean up.
3060
3061         * anonymous.cs,
3062         * codegen.cs,
3063         * cs-parser.jay,
3064         * decl.cs,
3065         * doc.cs,
3066         * ecore.cs,
3067         * flowanalysis.cs,
3068         * iterators.cs,
3069         * pending.cs,
3070         * statement.cs,
3071         * typemanager.cs: Parameter clean up.
3072
3073         * delegate.cs (Define): Get rid of duplicated code.
3074
3075         * expression.cs (ParameterReference): Removed useless parameters
3076         and simplified.
3077         (Invocation): Ditto.
3078
3079         * parameter.cs (ParamsParameter): New class, params specialization.
3080         (ArglistParameter): Attemp to separate arglist.
3081         (Parameter): Refactored to be reusable and faster.
3082         (Parameter.Modifier): Made understandable.
3083         (Parameters): Changed to be used as a class for `this' assembly
3084         parameters. Refactored to use new specialized classes.
3085
3086         * support.cs (ParameterData): Added Types property.
3087         (InternalParameters): Deleted.
3088
3089 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
3090
3091         * doc.cs : the previous patch does not actually fix the bug.
3092           PropertyInfo override check is now implemented and really fixed it.
3093         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
3094
3095 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
3096
3097         * doc.cs : apply "override filter" also to properties.
3098           Fixed bug #76730.
3099
3100 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
3101
3102         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
3103           no need to check overrides. For classes, omit those results from 
3104           interfaces since they must exist in the class. Fixed bug #76726.
3105
3106 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
3107
3108         * typemanager.cs : (GetFullNameSignature) differentiate indexers
3109           with different parameters. Fixed the second problem in #76685.
3110
3111 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
3112
3113         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
3114           get expected 'protected' access in CheckValidFamilyAccess()).
3115           Fixed bug #76692.
3116
3117 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
3118
3119         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
3120           Fixed bug #76705.  CS1569 was incorrectly commented out.
3121
3122 2005-11-23  Martin Baulig  <martin@ximian.com>
3123
3124         * generic.cs (Constraints.Define): Removed.
3125         (TypeParameter.DefineConstraints): Removed.
3126         (TypeParameter.DefineType): Call SetGenericParameterAttributes()
3127         on the GenericTypeParameterBuilder here.
3128
3129 2005-11-23  Martin Baulig  <martin@ximian.com>
3130
3131         * typemanager.cs (TypeManager.GetProperty): Make this public.
3132
3133         * generic.cs (Nullable.NullableInfo.ctor): Use
3134         TypeManager.GetProperty() rather than using reflection directly.
3135
3136 2005-11-17  Martin Baulig  <martin@ximian.com>
3137
3138         * expression.cs (Indexers.GetIndexersForType): Added support for
3139         generic parameters; fixes #76587.
3140
3141 2005-11-17  Martin Baulig  <martin@ximian.com>
3142
3143         * anonymous.cs
3144         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
3145         inherit the scope from our parent.  Fixes #76653.
3146
3147 2005-11-15  Martin Baulig  <martin@ximian.com>
3148
3149         * anonymous.cs (ScopeInfo.ScopeType): New public field; use this
3150         instead of `ScopeTypeBuilder' to refer to the "current" type.
3151         (AnonymousMethod.CreateScopeType): Correctly create the helper
3152         class if we're inside a generic type definition.
3153
3154 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
3155
3156         * doc.cs : use Invocation.IsOverride() to do real override check.
3157         * expression.cs : made Invocation.IsOverride() internal.
3158
3159 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
3160
3161         * doc.cs : use TypeManager.FindMembers() instead of (possible)
3162           TypeBuilder.FindMembers() and filter overriden base members out.
3163           Fixed bug #76990.
3164
3165 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3166
3167         * doc.cs : ref/out parameters are represented as '@' (instead of
3168           '&' in type FullName). Fixed bug #76630 (additionally crefs).
3169
3170 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3171
3172         * doc.cs : when there was no '.' in cref to methods in doc comment,
3173           then parameters were missing in the output. Fixed bug #76691.
3174
3175 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3176
3177         * driver.cs : don't output docs when there is an error.
3178           Fixed bug #76693.
3179
3180 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3181
3182         * doc.cs :
3183           Now it should detect indexers. Fixed primary concern in bug #76685.
3184           Fixed CS0419 message to not show the identical member signature in
3185           the message.
3186
3187 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3188
3189         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
3190           instead of Type.FindMembers() since it does not handle events.
3191           Fixed bug #71604.
3192
3193 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
3194
3195         * codegen.cs: Fixed typo (speficied -> specified).
3196
3197 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
3198
3199         Fix #76369.
3200         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
3201
3202 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
3203
3204         * attribute.cs: Changed error message.
3205
3206         * cs-tokenizer.cs: One more check.
3207
3208 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
3209
3210         * statement.cs (Block.Resolve): Ignore empty statement.
3211
3212 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
3213
3214         * report.cs: Made error/warning methods more strict to avoid
3215         their misuse.
3216
3217         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
3218         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
3219         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
3220         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
3221
3222 2005-11-11  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3223
3224         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): 
3225         Use the more explicit AssemblyName.FullName instead of 
3226         AssemblyName.Name to report errors.
3227         
3228 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
3229
3230         * attribute.cs, class.cs, cs-tokenizer.cs, parameter.cs: Sync
3231         with mcs.
3232
3233 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
3234
3235         * class.cs,
3236         * convert.cs,
3237         * cs-parser.jay,
3238         * decl.cs,
3239         * enum.cs,
3240         * expression.cs,
3241         * generic.cs,
3242         * pending.cs,
3243         * report.cs: Fixed error reporting and typos.
3244
3245         * generic.cs (TypeParameter.GetSignatureForError): New method.
3246         (ConstructedType.GetSignatureForError): Instead of DeclarationName.
3247
3248         * typemanager.cs (GetFullName): Refactored.
3249
3250 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
3251
3252         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
3253         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
3254
3255         * class.cs (TypeContainer.IsComImport): New property.
3256         (Constructor.Define): Create proper ctor for ComImport types.
3257
3258         * expression.cs (New.CheckComImport): Fixed.
3259
3260 2005-11-07  Miguel de Icaza  <miguel@novell.com>
3261
3262         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
3263         that a parameter has been captured does not mean that we do not
3264         have to do the rest of the processing.  This fixes the second part
3265         of #76592.  If there was another anonymous method capturing
3266         values in the past, the Scope would never be set for the second
3267         method that captured the same parameter.
3268
3269         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
3270         properly manipulate the stack.   Second part of fix for #76592.
3271
3272         * expression.cs (New): Add support for invoking "new" on
3273         interfaces that have been flagged with the ComImport attribute and
3274         the CoClass.  Fixes #76637 
3275
3276         * statement.cs (Try.DoEmit): When a variable is captured, do not
3277         try to emit the vi.LocalBuilder variable as it has been captured.
3278         Create a temporary variable and store the results on the
3279         FieldBuilder.  Fixes #76642
3280
3281 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3282
3283         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
3284
3285         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
3286
3287         * expression.cs (Binary.DoResolve): Added && optimalization.
3288     
3289         * typemanager.cs (AddUserType): Removed useless argument.
3290
3291 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
3292
3293         * statement.cs (Block.variables): Uses ListDictionary.
3294
3295 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
3296
3297         Fix #75969.
3298         * class.cs (PartialContainer.EmitType): Customized to emit
3299         security attributes.
3300         (ClassPart.ApplyAttributeBuilder): Transform security attribute
3301         for partial classes.
3302
3303 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
3304
3305         Fix #76599.
3306         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
3307         access has to be fixed.
3308         
3309         * typemanager.cs (IsUnmanagedType): Wrong common field type.
3310
3311 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
3312
3313         Fix #76590.
3314         * ecore.cs (NullCast.Reduce): Implemented.
3315
3316         * expression.cs (ArrayCreation.CheckIndices): Correcly check
3317         constant type.
3318         
3319         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
3320         properly.
3321         (Foreach.Resolve): Catch null properly.
3322
3323 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
3324  
3325         * cs-tokenizer.cs: Warning text fix.
3326
3327         * driver.cs: AllWarningNumbers exposed on public interface.
3328
3329         * report.cs (): Reviewed warning numbers.
3330         (IsValidWarning): Use binary search.
3331
3332 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
3333  
3334         * driver.cs: Implemeted resource visibility.
3335         (Resources): New class for code sharing between /res: and
3336         /linkres:
3337  
3338 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3339
3340         decl.cs (CurrentTypeParameters): Fixed to be public.
3341
3342 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3343
3344         generic.cs, rootcontext.cs: Removed NewConstraintAttribute.
3345
3346 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3347
3348         gmcs.exe.sources: Use CryptoConvert.cs from corlib.
3349
3350 2005-11-05  Kornél Pál  <kornelpal@hotmail.com>
3351
3352         * gmcs.exe.config: Updated runtime version to v2.0.50727 (2.0 RTM).
3353
3354 2005-11-04  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3355
3356         Add friend assembly access support.
3357         * typemanager.cs: assembly_internals_vis_attrs
3358         cache for friend assembly access. 
3359         (TypeManager.IsFriendAssembly): New method for
3360         checking friend assembly access.
3361         (TypeManager.Error_FriendAccessNameNotMatching): New
3362         helper method.
3363         (TypeManager.CompareKeyTokens): Likewise.
3364         (TypeManager.Filter): Handle friend accessible
3365         members.
3366
3367         * namespace.cs (RootNamespace.GetTypeInAssembly): Return
3368         friend accessible types.
3369
3370         * ecore.cs (Expression.IsAccessorAccessible): Handle
3371         friend accessible properties.
3372
3373         * decl.cs (DeclSpace.CheckAccessLevel): Handle friend
3374         accessible types.
3375         
3376 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
3377
3378         Fix #76568.
3379         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
3380         folding.
3381         
3382         * convert (Convert.ImplicitReferenceConversion): NullCast holds
3383         contants only.
3384         
3385         * ecore.cs (NullCast): Child is contant only.
3386         
3387         * literal.cs (NullLiteral.Reduce): null can be converted to any
3388         reference type.
3389
3390 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
3391
3392         * driver.cs: Use Encoding.Default as default code page instead
3393           of ISO-28591.
3394
3395 2005-10-27  Raja R Harinath  <rharinath@novell.com>
3396
3397         Fix #76085.
3398         * expression.cs (Invocation.Error_InvalidArguments): Handle
3399         __arglist parameters.
3400         (Invocation.VerifyArgumentsCompat): Likewise.
3401         * support.cs (ReflectionParameters.GetSignatureForError): Print
3402         __arglist parameters.
3403         (InternalParamters.GetSignatureForError): Likewise.
3404         * parameter.cs (Parameters.GetSignatureForError): Likewise.
3405
3406 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
3407
3408         * attribute.cs (GetPropertyValue): Made public.
3409
3410         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
3411         Resolve.
3412         Add new property WrapNonExceptionThrows to handle 2.0 assembly
3413         attribute.
3414         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
3415         is not defined.
3416         
3417         * driver.cs: Reflect method name change.
3418         
3419         * statement.cs (Try.Resolve): Warn when try has both general
3420         exception handlers.
3421         
3422         * typemanager.cs: runtime_compatibility_attr_type new predefined
3423         type.
3424
3425 2005-10-26  Raja R Harinath  <harinath@gmail.com>
3426
3427         Fix #76419.
3428         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
3429         treat it as an empty parameter list.
3430
3431 2005-10-26  Raja R Harinath  <rharinath@novell.com>
3432
3433         Fix #76271.     
3434         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
3435         ResolveAsTypeStep silent.
3436         * statement.cs (Block.AddConstant): Mark block as used.
3437         (Block.ResolveMeta): Avoid piling on error messages
3438         if a constant initializer resolution fails.
3439
3440 2005-10-25  Raja R Harinath  <rharinath@novell.com>
3441
3442         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
3443         Remove.
3444         (NamespaceEntry.VerifyAllUsing): New.
3445         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
3446         behaviour.  Delegates actual resolution of alias to ...
3447         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
3448         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
3449         Update.
3450         * driver.cs (Driver.MainDriver): Update.
3451         
3452         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
3453         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
3454         property.
3455         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
3456         Remove.
3457         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
3458         RootNamespace.DefineNamespacesForAll.
3459
3460 2005-10-24  Raja R Harinath  <harinath@gmail.com>
3461
3462         * typemanager.cs (assemblies, external_aliases, modules)
3463         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
3464         (ComputeNamespaces, GetRootNamespace): Remove extra staging
3465         overhead.  Move resposibility ...
3466         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
3467         * driver.cs, attribute.cs, codegen.cs: Update to changes.
3468
3469 2005-10-23  Raja R Harinath  <harinath@gmail.com>
3470
3471         * namespace.cs (RootNamespace.all_namespaces): Renamed from
3472         cached_namespaces.  Improve usage.
3473         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
3474         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
3475         Move from GlobalRootNamespace and simplify.
3476         (RootNamespace.Global): Make instance variable.
3477         (RootNamespace.RootNamespace): Add "alias name" parameter.
3478         (GlobalRootNamespace): Simplify drastically.
3479         (Namespace.Lookup): Don't use GetNamespace.
3480         * typemanager.cs (GetRootNamespace): Rename from
3481         ComputeNamespaceForAlias.
3482         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
3483
3484 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3485
3486         * anonymous.cs (AnonymousContainer): Don't crash when container
3487         doesn't exist.
3488
3489 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3490
3491         * expression.cs (Binary.DoResolve): Warn when comparing same
3492         values.
3493
3494 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3495
3496         Fix #76486.
3497         * expression.cs (Binary.DoResolve): It looks like there are no
3498         convetsion rules in enum context.
3499
3500 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3501
3502         Add support for extern alias qualifiers.
3503         * typemanager.cs: Move some LookupTypeReflection code
3504         to namespace.cs, to have cleaner code. Added some methods
3505         to help us keep track of the extern aliased references.
3506         * driver.cs: Add suport for extern alias assemblies on command
3507         line and check for their warnings/errors. Also keep track of the
3508         extern aliased assemblies.
3509         * namespace.cs: Move the global functionality of Namespace
3510         to GlobalRootNamespace/RootNamespace. Now the global namespace
3511         is GlobalRootNamespace.Globa. Also the code moved from 
3512         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
3513         Finally added LocalAliasEntry (AliasEntry before) and
3514         ExternAliasEntry, to handle alias statements.
3515         * cs-parser.jay: Add support in the grammar for extern alias
3516         statement.
3517         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
3518         Update callings to Namespace (now in GlobalRootNamespace).
3519
3520 2005-10-25  Martin Baulig  <martin@ximian.com>
3521
3522         * convert.cs (ImplicitTypeParameterConversion): Make base
3523         interfaces actually work; fixes #76557.
3524
3525 2005-10-25  Martin Baulig  <martin@ximian.com>
3526
3527         * generic.cs
3528         (GenericMethod.Define): Call TypeParameter.DefineConstraints() on
3529         all the type parameters; fixes #76551.
3530
3531 2005-10-25  Martin Baulig  <martin@ximian.com>
3532
3533         Fix #76472.
3534
3535         * generic.cs
3536         (GenericMethod.ctor): Added `Expression return_type' and
3537         `Parameters parameters' arguments.
3538         (GenericMethod.DefineType): Call ResolveAsTypeTerminal() on the
3539         parameter and return types to check their constraints if they're
3540         generic types.
3541
3542         * codegen.cs (EmitContext.ResolvingGenericMethod): New public
3543         boolean field.
3544
3545         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
3546         constraints of a generic type if `ec.ResolvingGenericMethod'.
3547
3548         * class.cs (MethodCore.DoDefineParameters): Set
3549         `ec.ResolvingGenericMethod' if we're a generic method.
3550         (MemberBase.MemberType): Likewise.
3551
3552 2005-10-25  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3553
3554         * typemanager.cs (TypeManager): Added 
3555         TypeManager.internals_visible_attr_type to cache
3556         S.R.CompilerServices.InternalsVisibleToAttribute.
3557
3558         * codegen.cs (AssemblyClass): Added checks for 
3559         InternalsVisibleToAttribute in new method 
3560         CheckInternalsVisibleAttribute () and also cache the
3561         AssemblyName in AssemblyClass.Name.
3562         
3563 2005-10-24  Martin Baulig  <martin@ximian.com>
3564
3565         * typemanager.cs
3566         (TypeManager.ExpandInterfaces): Added overloaded version which
3567         just takes a `Type[]' array.
3568
3569         * generic.cs
3570         (Constraints.Resolve): Don't expand the interfaces here; ie. we
3571         just use the interfaces which were explicitly specified and not
3572         the interfaces they inherit.  Fixes #76482.
3573         (TypeParameter.FindMembers): Expand the interfaces here.
3574
3575 2005-10-21  Martin Baulig  <martin@ximian.com>
3576
3577         * generic.cs
3578         (Constraints.Resolve): Also resolve the actual types here.
3579         (Constraints.ResolveTypes): Just check the constraints here.
3580         Fixes #76363; see gtest-218.cs.
3581
3582 2005-10-21  Martin Baulig  <martin@ximian.com>
3583
3584         * convert.cs
3585         (Convert.ImplicitTypeParameterConversion): Use a `ClassCast'
3586         instead of a `BoxedCast'; fixes gtest-217.cs.
3587
3588 2005-10-20  Atsushi Enomoto  <atsushi@ximian.com>
3589
3590         * generic.cs : (ConstructedType.CheckConstraints) warn CS0310 when
3591           1) "new()" is specified as generic parameter constraint and 2) the
3592           type is TypeBuilder and 3) the type is abstract even if it has a
3593           default .ctor(). Now errors/gcs0310-3.cs is correctly rejected.
3594
3595 2005-10-20  Martin Baulig  <martin@ximian.com>
3596
3597         * generic.cs
3598         (GenericConstraints.TypeParameter): New public property.
3599         (TypeParameter.ctor): Also take a `DeclSpace' argument.
3600         (TypeParameter.DeclSpace): New public property.
3601         (TypeParameter.DefineType): Inflate the constraints if our
3602         `DeclSpace' is an `Iterator'.   
3603
3604 2005-10-19  Atsushi Enomoto  <atsushi@ximian.com>
3605
3606         * class.cs, decl.cs : (MemberCache.FindMemberToOverride) added 
3607           GenericMethod argument to compare methods' generic type arguments.
3608           Fixed bug #76382.
3609
3610 2005-10-19  Martin Baulig  <martin@ximian.com>
3611
3612         * class.cs (TypeContainer.DefineType): Only use ResolveAsTypeStep(),
3613         not ResolveType() when resolving the base type, so we're not
3614         checking the constraints here.
3615         (TypeContainer.ResolveType): Call ResolveType() on our base_type
3616         if we have any.
3617
3618 2005-10-19  Martin Baulig  <martin@ximian.com>
3619
3620         * generic.cs (ConstructedType.CheckConstraints): Committing
3621         untested fix for #76441.
3622
3623 2005-10-18  Raja R Harinath  <rharinath@novell.com>
3624
3625         Fix #76371.
3626         * class.cs (TypeContainer.DefineType): Move updating of
3627         topological sort earlier in the code.
3628         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
3629
3630 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
3631
3632         Fix #76273.
3633         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
3634         
3635         * constant.cs (Constant.TryReduce): Moved from Cast class.
3636         (Reduce): Made little bit more OO and fixed missing conversions.
3637         
3638         * ecore.cs (Reduce): Implemented.
3639         (Binary.EnumLiftUp): New method to upgrade values to enum values.
3640         
3641         * literal.cs (Reduce): Implemented.
3642         
3643         * class.cs: Reverted Miguel's wrong commit.
3644
3645 2005-10-14  Miguel de Icaza  <miguel@novell.com>
3646
3647         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
3648
3649 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
3650
3651         * cs-parser.jay, expression.cs : CS0214 was missing error location
3652           for constants. Fixed bug #76404.
3653
3654 2005-10-10  Raja R Harinath  <rharinath@novell.com>
3655
3656         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
3657         InstanceExpression.
3658         (PropertyExpr.EmitCall): Likewise.
3659         * expression.cs (Invocation.EmitArguments): Handle case where
3660         arguments == null.
3661         (Invocation.EmitCall): Avoid allocating temporary variable if
3662         there are no arguments.
3663
3664 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
3665
3666         Fix #76370.
3667         * convert.cs (ExplicitConversionCore): Fixed object->enum
3668         conversion.
3669
3670 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3671
3672         Fix #76323.
3673         * convert.cs (ImplicitConversionStandard): Move conversion of
3674         void* to arbitrary pointer types ...
3675         (ExplicitConversionStandard): .. here.
3676         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
3677         error to always print typenames.
3678
3679 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3680
3681         * convert.cs (GetConversionOperator): Rename from
3682         GetConversionOperators.  Move operator selection code from ...
3683         (UserDefinedConversion): ... here.
3684
3685 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
3686
3687         * convert.cs (ExplicitConversionCore): Removed duplicate enum
3688         conversion.
3689
3690 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
3691
3692         * assign.cs (Assign.DoResolve): Error method changed.
3693
3694         * cfold.cs (DoConstantNumericPromotions): Error method changed.
3695         
3696         * const.cs (ResolveValue): Reset in_transit immediately.
3697         
3698         * constant.cs: Error method changed.
3699         
3700         * convert.cs: Removed useless location parameter.
3701         (ExplicitNumericConversion): Don't do double enum check.
3702         (ExplicitConversionCore): Renamed from ExplicitConversion.
3703         (ExplicitUnsafe): Extracted from ExplicitConversion.
3704         (ExplicitConversion): Uses for error reporting.
3705         
3706         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
3707         error messages.
3708         (ResolveBoolean): Uses common error method.
3709         (CastToDecimal): Get rid of ec.
3710         (CastFromDecimal): Optimized.
3711         (ConvCast): Get rid of ec.
3712         
3713         * enum.cs (ResolveValue): Reset in_transit immediately.
3714         (Emit): Return after first error.
3715         
3716         * expression.cs: Convert changes.
3717         
3718         * literal.cs: Error method changed.
3719         
3720         * statement.cs: Error method changed.
3721
3722 2005-10-06  Raja R Harinath  <rharinath@novell.com>
3723
3724         Fix gtest-131.cs and gtest-211.cs.
3725         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
3726         Only emit code for a label if it is used.  Unreachable code can
3727         violate ECMA evaluation stack invariants.
3728
3729 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3730
3731         * anonymous.cs: Implemented ExprClassName.
3732         
3733         * assign.cs (Assign.DoResolve): Don't chrash when type is not
3734         delegate.
3735         
3736         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
3737         check.
3738         
3739         * class.cs (StaticClass.DefineContainerMembers): Report protected
3740         members as error.
3741         
3742         * codegen.cs: if(ed) PRODUCTION.
3743         
3744         * convert.cs (Error_CannotImplicitConversion): Better error
3745         distinction.
3746         
3747         * cs-parser.jay: More error checks.
3748         
3749         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
3750         
3751         * driver.cs (CSCParseOption): Enabled wrong option check.
3752         
3753         * ecore.cs (Expression.ExprClassName): Turned to property.
3754         (MemberExpr.CheckIntermediateModification): For checking boxed
3755         value types     modification.
3756         
3757         * statement.cs (Fixed.Resolve): Expression type must be
3758         convertible to fixed type.
3759         (CollectionForeach.GetEnumeratorFilter,TryType):
3760         Small refactoring for easier error checking.
3761
3762 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
3763
3764         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
3765         attributes.
3766         
3767         * class.cs (GeneratedBaseInitializer): New class for customization
3768         compiler generated initializers.
3769         (MemberBase.DoDefine): Check Obsolete attribute here.
3770         (FieldMember.DoDefine): Ditto.
3771         
3772         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
3773         constants.
3774         
3775         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
3776         (MemberCore.GetObsoleteAttribute): Removed argument.
3777         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
3778         (MemberCore.CheckObsoleteType): New helper.
3779         
3780         * delegate.cs,
3781         * enum.cs,
3782         * statement.cs: Updates after MemberCore changes.
3783         
3784         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
3785         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
3786         
3787         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
3788         obsolete attribute for compiler construct.
3789         (As.DoResolve): Cache result.
3790         
3791         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
3792
3793 2005-10-01  Miguel de Icaza  <miguel@novell.com>
3794
3795         * expression.cs (Probe): instead of having a "Type probe_type"
3796         keep the extra information as a TypeExpr probe_type_expr since the
3797         "As" operator needs to perform some type checks.
3798
3799         * (As.DoResolve): If the type is a type parameter, ensure that it
3800         is constrained by a class.
3801
3802 2005-09-22  Miguel de Icaza  <miguel@novell.com>
3803
3804         * statement.cs (Lock): Use the TemporaryVariable class instead of
3805         manually using local variables as those do not work when variables
3806         are captured.
3807
3808         * ecore.cs: Moved the TemporaryVariable class from being a nested
3809         class inside Foreach to be a public class that can be employed in
3810         other places. 
3811
3812 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
3813
3814         * cs-parser.jay: interface_accessors replaced by
3815         accessor_declarations.
3816
3817         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
3818         location.
3819         
3820         * statement.cs (GotoCase.Resolve): Convert null constant to
3821         null case.
3822         (SwitchLabel.ResolveAndReduce): Ditto.
3823         (SwitchLabel.NullStringCase): Custom null stamp.
3824         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
3825         
3826         typemanager.cs (CSharpSignature): Don't skip first argument
3827         for full names.
3828
3829 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
3830
3831         * cfold.cs, constant.cs, convert.cs, ecore.cs,
3832         expression.cs, iterators.cs, literal.cs: Store constants and
3833         literals location.
3834         
3835         * class.cs (MemberBase.ShortName): Pass location.
3836         
3837         * cs-parser.jay: Some location fixes.
3838         
3839         * ecore.cs (Expression.Location): Made virtual.
3840
3841 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3842
3843         Fix #72930.
3844         * const.cs (Const.ResolveValue): Check for assigning non-null
3845         value to reference type.
3846
3847 2005-09-26  Raja R Harinath  <rharinath@novell.com>
3848
3849         Fix #76133.
3850         * expression.cs (This.VerifyFixed): In a value type T, the type of
3851         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
3852         value type R, 'this' is treated as a value parameter.
3853
3854 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3855
3856         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3857         if the underlying types are the same, otherwise we need to produce
3858         code that will do the proper cast.
3859
3860         This was exposed by Marek's constant rewrite which produced
3861         invalid code for the call site:
3862
3863         enum X : long { a }
3864         void Method (X v) {}
3865
3866         Method ((X) 5)
3867
3868         This fixes test-49.cs
3869
3870 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3871
3872         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
3873           Type/Object should be allowed as well. Fixed bug #75968.
3874
3875 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3876
3877         * expression.cs : (Binary.DoResolve): when one is enum constant and
3878           another is constant 0, then return enum one *as enum type*.
3879           Fixed bug 74846.
3880
3881 2005-10-04  Martin Baulig  <martin@ximian.com>
3882
3883         * ecore.cs (PropertyExpr.ResolveAccessors): Cosmetic fix; make the
3884         `SetMemberIsUsed()' work for generics, too.
3885
3886 2005-10-04  Martin Baulig  <martin@ximian.com>
3887
3888         * expression.cs (DelegateInvocation.EmitStatement): Make this work
3889         for corlib.  Fixes #75691.
3890
3891 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
3892
3893         Fix #76255.
3894         * driver.cs: Fix compilation files with full root path.
3895
3896 2005-09-25  Miguel de Icaza  <miguel@novell.com>
3897
3898         * report.cs (SymbolRelatedToPreviousError): Format the output so
3899         it does not use an open parenthesis that is never closed. 
3900
3901         * driver.cs: Follow coding guidelines
3902
3903 2005-09-18  Miguel de Icaza  <miguel@novell.com>
3904
3905         * driver.cs: Set InEmacs based on the environment variable EMACS. 
3906
3907         * location.cs (InEmacs): in this mode, do not report column
3908         location as it confuses Emacs.
3909
3910 2005-10-03  Raja R Harinath  <rharinath@novell.com>
3911
3912         * support.cs (SeekableStreamReader.Position): Don't error out when
3913         the requested position is just beyond the end of the current
3914         buffered data.
3915
3916 2005-09-28  Raja R Harinath  <rharinath@novell.com>
3917
3918         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
3919         try to keep in sync with the byte count of the underlying Stream.
3920         However, this limits us to a window size of 2048 characters: i.e.,
3921         the maximum lookahead of our lexer/parser can be 2048 characters.
3922
3923 2005-09-22  Martin Baulig  <martin@ximian.com>
3924
3925         * driver.cs: Removed a debugging FIXME.
3926
3927 2005-09-21  Raja R Harinath  <rharinath@novell.com>
3928
3929         * cs-parser.jay (type_arguments): Add CS1644 check.
3930         * decl.cs (DeclSpace.AddToContainer): Restore CS0694 check.
3931
3932 2005-09-15  Raja R Harinath  <rharinath@novell.com>
3933
3934         * Makefile (PROGRAM): Make profile specific.
3935         (gmcs.exe) [PROFILE=net_2_0]: Add utility rule to copy gmcs.exe to
3936         the current directory.
3937
3938         Fix test-455.cs.
3939         * expression.cs (Invocation.EmitCall): Remove optimization on
3940         this_call since it doesn't handle 'this' being a value type.
3941
3942 2005-09-05  Geoff Norton  <gnorton@customerdna.com>
3943
3944         * driver.cs: Ensure file handles are closed after parsing
3945
3946 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3947
3948         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3949         if the underlying types are the same, otherwise we need to produce
3950         code that will do the proper cast.
3951
3952         This was exposed by Marek's constant rewrite which produced
3953         invalid code for the call site:
3954
3955         enum X : long { a }
3956         void Method (X v) {}
3957
3958         Method ((X) 5)
3959
3960         This fixes test-49.cs
3961
3962 2005-09-05  Martin Baulig  <martin@ximian.com>
3963
3964         * expression.cs (As.DoResolve): Use `probe_type.IsValueType'
3965         instead of `TypeManager.IsValueType (probe_type)'; fixes #75668.
3966
3967         * cs-parser.jay (delegate_declaration): Small fix for #75852.
3968
3969 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3970
3971         * typemanager.cs: (IsUnmanagedType) : generic parameter is not allowed
3972           to be a pointer type due to the spec 25.2, so check if declaring
3973           type is generic type definition. Fixed bug #75772.
3974
3975 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3976
3977         Fixed bug #75957.
3978         * generic.cs : (TypeManager.IsEqual(Type,Type)): it should work when
3979           both types are not defined by methods.
3980         * expression.cs : (Invocation.IsApplicable): it should work when
3981           the argument type is equal to the parameter type, not only when
3982           ImplicitConversionExists() returns true.
3983
3984 2005-09-02  Raja R Harinath  <rharinath@novell.com>
3985
3986         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
3987         internal.
3988
3989         Fix #75941.
3990         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
3991         flow-branching for LocalVariableReferences in case we were invoked
3992         from a MemberAccess.
3993         * expression.cs (LocalVariableReference.VerifyAssigned): New.
3994         Carved out of ...
3995         (LocalVariableReference.DoResolveBase): ... this.
3996         (MemberAccess.Resolve): Do the check that was disabled during
3997         SimpleNameResolve.
3998
3999 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
4000
4001         * class.cs :
4002           (PartialContainer.Create): check abstract/sealed/static strictly
4003           but abstract/sealed can exist only at one side. Fixed bug #75883.
4004
4005 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
4006
4007         Fix #75945.
4008         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
4009         specified, don't default to UnmanagedType.I4.
4010
4011 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
4012
4013         * expression.cs : conditional operator should check possibly
4014           incorrect assign expression. Fixed bug #75946.
4015
4016 2005-08-30  Raja R Harinath  <rharinath@novell.com>
4017
4018         Fix #75934.
4019         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
4020         (ScopeInfo.EmitScopeType): Use it to construct field names from
4021         names of captured locals.
4022
4023         Fix #75929.
4024         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
4025         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
4026         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
4027         (ExplicitConversion): Remove enum cases already handled by
4028         implicit conversion.  Move implicit conversion check to the beginning.
4029         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
4030         * expression.cs (ArrayCreation.EmitDynamicInitializers):
4031         Don't treat System.Enum as a struct.
4032
4033 2005-08-30  Jb Evain  <jbevain@gmail.com>
4034
4035         * attribute.cs: handles as expression in parameters.
4036
4037 2005-08-30  Raja R Harinath  <rharinath@novell.com>
4038
4039         Fix #75802.
4040         * class.cs (TypeContainer.VerifyClsName): Don't use a
4041         PartialContainer when verifying CLS compliance.
4042         (AbstractPropertyEventMethod): Set Parent here, ...
4043         (PropertyMethod): ... not here.
4044
4045 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
4046
4047         * attribute.cs : escaped attribute name should not be allowed to be
4048           resolved (e.g. @class as classAttribute). Fixed bug #75930.
4049
4050 2005-08-29  Raja R Harinath  <rharinath@novell.com>
4051
4052         Fix #75927.
4053         * convert.cs (ImplicitStandardConversionExists): Allow zero also
4054         when converting a long constant to unsigned long.
4055         * expression.cs (Invocation.OverloadResolve): Add sanity check to
4056         detect where IsApplicable and VerifyArgumentsCompat disagree.
4057
4058 2005-08-29  Raja R Harinath  <rharinath@novell.com>
4059         and Carlos Alberto Cortez  <carlos@unixmexico.org>
4060
4061         Fix #75848.
4062         * class.cs (TypeContainer.CanElideInitializer): New helper.
4063         (TypeContainer.EmitFieldInitializers): Use it to determine if we
4064         can safely emitting the initializer of a field.
4065
4066 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4067
4068         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
4069           allowed inside a switch (without loop). Fixed bug #75433.
4070
4071 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
4072
4073         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
4074         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
4075
4076 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4077
4078         * driver.cs : kinda reverting the default encoding changes (not exact 
4079           revert since I noticed that "codepage:reset" might not work fine).
4080
4081 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4082
4083         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
4084           Location. Now getter and setter store location correctly.
4085           (errors/cs0111-12.cs now reports the expected location.)
4086
4087 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4088
4089         * driver.cs : Use default encoding on the environment.
4090           Removed (now that) extra parameter for SeekableStreamReader.
4091         * support.cs : (SeekableStreamReader) third .ctor() argument for
4092           StreamReader is not required (always true). preamble size could
4093           be acquired in simpler and safe way.
4094
4095 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
4096
4097         * cs-parser.jay: report CS0642 at warning level 3
4098           and report CS0642 for an if else statement also
4099           fixes bug #74745. Patch by John Luke (and a bit
4100           modified by me).
4101           Removed extra CS0642 warning check for "while",
4102           "for" and "fixed".
4103         * statement.cs: In Block.Resolve(), CS0642 check
4104           is reimplemented to check a sequence of an empty
4105           statement and a block.
4106
4107           Both fix bug #66777.
4108
4109 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
4110
4111         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
4112         detection until I fix it.
4113         
4114         * cs-tokenizer.cs: Changed error message.
4115         
4116         * cs-parser.jay: Fixed 2 error locations.
4117         
4118         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
4119         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
4120         properties.
4121         
4122         * enum.cs (GetSignatureForError): Fixed.
4123         
4124         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
4125         method detection.
4126         
4127         * class.cs,
4128         * typemanager.cs (RegisterProperty): Removed.
4129         
4130         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
4131
4132 2005-08-24  Raja R Harinath  <rharinath@novell.com>
4133
4134         Fix #75874.
4135         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
4136         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
4137
4138 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4139
4140         * expression.cs : tiny fix is required for not warning positive ulong.
4141           See test-441.cs.
4142
4143 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4144
4145         * expression.cs : add CS0652 check for constant and integral
4146           expression. Fixed bug #53974.
4147
4148 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4149
4150         * expression.cs : in DoNumericPromotions(), check if there is implicit
4151           conversion overload for string (to check CS0034). Fixed bug #52492.
4152
4153 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4154
4155         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
4156
4157 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4158
4159         * ecore.cs : report location when it is *not* Null.
4160
4161 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4162
4163         * codegen.cs,
4164           ecore.cs,
4165           flowanalysis.cs,
4166           expression.cs:
4167           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
4168           correctly. Fixed bug #75721.
4169
4170 2005-08-23  Raja R Harinath  <rharinath@novell.com>
4171
4172         * support.cs (SeekableStreamReader.Position): Avoid an expensive
4173         loop that performs 'min (pos, char_count)'.
4174
4175         Fix #75862.
4176         * expression.cs (Unary.ResolveOperator): Don't discard implicit
4177         converted value in Operator.OnesComplement.
4178
4179 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
4180
4181         * anonymous.cs: If the anon method is pulled into a helper class,
4182         it needs to be `internal' not `private'. Fixes runtime behavior on
4183         msft. bug #75704
4184
4185 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
4186
4187         Fix #75803
4188         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
4189         is a partial class.
4190
4191 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
4192
4193         The big constants rewrite
4194         Fix #75746, #75685 and more
4195         As a side effect saved 1MB for MWF ;-)
4196         
4197         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
4198         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
4199         enum based for corlib compilation.
4200         
4201         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
4202         subtractions.
4203         
4204         * class.cs (FixedField.Define): Use ResolveAsConstant.
4205         
4206         * const.cs (IConstant): Interface constants and enums.
4207         (Const.ResolveValue): New method for constant resolvning.
4208         (ExternalConstant): Constants from imported assemblies.
4209         
4210         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
4211         conversion; like enums.
4212         (Constant.ToType): Converts this constant to different type.
4213         (Constant.Increment): Adds 1.
4214         
4215         * convert.cs (ImplicitConversionRequired): Simplified.
4216         
4217         * cs-parser.jay: Create EnumMember directly.
4218         
4219         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
4220         
4221         * doc.cs (GenerateEnumDocComment): Removed.
4222         
4223         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
4224         (ConvertIntLiteral): Removed.
4225         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
4226         
4227         * enum.cs (EnumMember): Implement IConstant.
4228         (Enum.IsValidEnumConstant): Removed.
4229         (Enum.GetNextDefaultValue): Removed.
4230         (Enum.FindMembers): Updated.
4231         (Enum.GenerateDocComment): Iterate enum members.
4232         
4233         * expression.cs (Cast.TryReduce): Handle enums correctly.
4234         (New.Constantify): Made public.
4235         (MemberAccess.DoResolve): Removed contant specific if(s).
4236         
4237         * literal.cs (NullLiteral): Implement new abstract methods.
4238         
4239         * statement.cs (GotoCase.Resolve): Use new constant methods.
4240         (SwitchLabel.ResolveAndReduce): Use new constant methods.
4241         
4242         * typemanager.cs (LookupEnum): Removed.
4243         (IsEnumType): Fixed to work with corlib.
4244         (RegisterConstant): Removed.
4245         (LookupConstant): Removed.
4246         (GetConstant): Changed to work with IConstant.
4247
4248 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
4249
4250         * location.cs : Fixed overflown (>255) column number.
4251
4252 2005-08-03  Raja R Harinath  <rharinath@novell.com>
4253
4254         First cut of the qualified-alias-member feature.
4255         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
4256         token.
4257         * cs-parser.jay (DOUBLE_COLON): New token.
4258         (namespace_or_type_name): Add rule for recognizing
4259         qualified-alias-members.
4260         (primary_expression): Likewise.
4261         (element_access): Allow QualifiedAliasMember as a possible
4262         type-bearing expression.
4263         (local_variable_type, local_variable_pointer_type): Likewise.
4264         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
4265         aliases in the current and enclosing namespace declarations.
4266         (NamespaceEntry.UsingAlias): Add CS0440 warning.
4267         * decl.cs (MemberName.is_double_colon): New.
4268         (MemberName.MemberName): Add new constructor for alias-member.
4269         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
4270         * expression.cs (QualifiedAliasMember): New expression type.
4271
4272 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4273
4274         * location.cs : it borked when no argument was specified.
4275
4276 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4277
4278         * location.cs : tiny ToString() format fix.
4279
4280 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4281
4282         * statement.cs : oops, it was missing.
4283
4284 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4285
4286         A set of fixes for precise line/column location.
4287
4288         * location.cs :
4289           "token" field now holds a file/line "delta", a line number offset 
4290           from the segment, and a column number. See also:
4291           http://lists.ximian.com/pipermail/mono-devel-list/2004-
4292           December/009508.html
4293           Removed static IsNull. Use instance IsNull property instead.
4294         * cs-tokenizer.cs :
4295           For some tokens it stores Location. For Identifier it stores
4296           LocatedToken which is a pair of string name and location.
4297           Column numbers are adjusted only at getChar().
4298         * report.cs :
4299           Use Location.ToString() for reporting (it now contains column).
4300         * cs-parser.jay :
4301           Largely modified to use LocatedToken instead of
4302           string (IDENTIFIER), and to acquire Location from some tokens.
4303         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
4304           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
4305           codegen.cs :
4306           Now MemberName holds Location. DeclSpace.ctor() receives Location
4307           as a parameter. Removed extra parameters to all derived classes.
4308           Replaced Location.IsNull() with instance property.
4309         * assign.cs, expression.cs :
4310           Added .ctor() overload that omits Location.
4311         * attribute.cs :
4312           Added "nameEscaped" flag that indicates the identifier was escaped
4313           in the source file. This fixes bug #57047.
4314
4315 2005-09-02  Martin Baulig  <martin@ximian.com>
4316
4317         * class.cs: Make CS3005 a warning, not an error.
4318
4319 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
4320
4321         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
4322         New method, looking for lo-case imported cls type.
4323
4324         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
4325         here.
4326
4327         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
4328
4329         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
4330
4331         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
4332         all_imported_types.
4333         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
4334
4335         Optimized to save 3.5 MB for SWF compilation.
4336
4337 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
4338
4339         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
4340         (PartialContainer.Create): Moved logic AddToContainer.
4341         (PartialContainer.MarkForDuplicationCheck): Shares name.
4342         
4343         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
4344         place.
4345         
4346         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
4347         initialization.
4348         (Namespace.GetSignatureForError): New method.
4349         
4350         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
4351         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
4352
4353 2005-08-01  Raja R Harinath  <rharinath@novell.com>
4354
4355         Fix #75669.
4356         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
4357         member lookup rather than qualifier_type, since qualifier_type can
4358         be null.
4359
4360 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
4361
4362         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
4363         enum member.
4364
4365 2005-07-31  Miguel de Icaza  <miguel@novell.com>
4366
4367         * statement.cs: Copy the local exception into the exception
4368         captured local.  Fixes 75674
4369
4370 2005-07-31  Raja R Harinath  <harinath@gmail.com>
4371
4372         Fix #75658.
4373         * expression.cs (Invocation.OverloadResolve): Don't report error
4374         CS1501 if error CS1502 has been reported.
4375         (New.DoResolve): Delegate CS1501 reporting to
4376         Invocation.OverloadResolve.
4377
4378         Fix #75656.
4379         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
4380         invariant-meaning-in-block property in an enclosing block if
4381         necessary.
4382
4383 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
4384
4385         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
4386         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
4387         (Switch.CheckSwitch): Just save 50kb for SWF.
4388
4389 2005-07-27  Martin Baulig  <martin@ximian.com>
4390
4391         * anonymous.cs (CaptureContext.AddField): Added
4392         `AnonymousContainer am' argument; compute its toplevel scope if
4393         it's not already computed.  Fixes #75649.
4394
4395 2005-07-26  Raja R Harinath  <rharinath@novell.com>
4396
4397         Fix #75628.
4398         * class.cs (Constructor.Emit): Reset block to null if the block
4399         resolve fails.
4400
4401 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4402
4403         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
4404
4405 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4406
4407         * class.cs (MethodData.Define): Check whether accessor implementing
4408         interface is public.
4409
4410         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
4411
4412 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
4413
4414         Fix #57245
4415         * namespace.cs (LookupType): Moved same type check to...
4416         
4417         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
4418         with the same name.
4419
4420 2005-07-21  Raja R Harinath  <rharinath@novell.com>
4421
4422         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
4423         already found a typebuilder.
4424         * class.cs (MethodCore.IsDuplicateImplementation): Compare
4425         MemberNames, not strings.
4426
4427         * const.cs (Error_ExpressionMustBeConst): 
4428         Rename from Error_EpressionMustBeConst.
4429         * const.cs, class.cs, statement.cd: Update.
4430
4431 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
4432
4433         Fix #65573
4434
4435         * const.cs (Const.LookupConstantValue): Report missing contant expression
4436         everytime.
4437         (Error_EpressionMustBeConstant): Only one error method.
4438
4439         * class.cs, statement.c: Updated.
4440
4441 2005-07-20  Raja R Harinath  <rharinath@novell.com>
4442
4443         * statement.cs (Block.Flags): Add back HasVarargs.
4444         (Block.flags): Make protected.
4445         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
4446
4447         * typemanager.cs (types, typecontainers, user_types): Remove.
4448         (UserTypes, TypeContainers): Likewise.
4449         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
4450         (CleanUp, Reset): Update.
4451         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
4452         (GetNestedType): Use Type.GetNestedType.
4453         (CoreLookupType): Take two arguments, the namespace and the
4454         basename of the type.  Update to use the Namespace.Lookup
4455         mechanism.
4456         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
4457         (RealMemberLookup): Use IsNestedChildOf instead of playing with
4458         string concatenation and substring matches.
4459         * class.cs, enum.cs, delegate.cs: Update to changes.
4460
4461 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
4462
4463         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
4464         Expression and made virtual.
4465
4466         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
4467         (ImplicitStandardConversionExists): Fixed `byte' typo ?
4468
4469         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
4470
4471         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
4472         error message.
4473
4474         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
4475         change.
4476
4477 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
4478
4479         Fix #57707
4480         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
4481         AssemblyCultureAttribute is not used on executable.
4482
4483         * rootcontext.cs,
4484         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
4485
4486 2005-07-16  Raja R Harinath  <rharinath@novell.com>
4487
4488         Fix #60638.
4489         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
4490         New.  Reports CS0252/CS0253.
4491         Mostly taken from preliminary patch by Duncak Mak.
4492         (Binary.DoResolveOperator): Store results of operator lookup.
4493         Use them to detect if we need to warn about unintended reference
4494         comparisons.
4495
4496 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4497
4498         Fix #72969.
4499         * namespace.cs (Namespace.Lookup): Add back location parameter.
4500         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
4501         * delegate.cs, ecore.cs, expression.cs: Update to changes.
4502
4503         * codegen.cs (EmitContext.DeclSpace): Make readonly.
4504         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
4505         (Namespace.LookupType): ... this.
4506         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
4507         of namespaces.
4508         * typemanager.cs (LookupTypeReflection): Remove buggy code that
4509         purported to handle pointers.
4510         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
4511         CoreLookupType.
4512
4513 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4514
4515         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4516         type as namespace.
4517
4518 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4519
4520         * namespace.cs (Namespace.Lookup): Drop location parameter.
4521         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
4522         (NamespaceEntry.Lookup): ... this.
4523         (NamespaceEntry.Error_AmbiguousTypeReference):
4524         Move here from DeclSpace.
4525         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
4526         names ...
4527         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
4528         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
4529         Move to NamespaceEntry.
4530         * delegate.cs, expression.cs: Update to changes.
4531
4532 2005-08-31  Martin Baulig  <martin@ximian.com>
4533
4534         Committing a patch from Atsushi Enomoto for #75850.
4535
4536         * statement.cs (Foreach.CollectionForeach.GetEnumeratorFilter):
4537         Prefer a generic enumerator over a non-generic one.
4538
4539 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
4540
4541         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
4542         * gmcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
4543
4544 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4545
4546         * driver.cs : reverting default encoding change as well as mcs.
4547
4548 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4549
4550         * driver.cs, support.cs : merged r48826.
4551           Marek Safer wrote:
4552           > could you integrate your mcs changes to gmcs otherwise
4553           > gmcs cannot compile some files.
4554
4555 2005-08-20  Martin Baulig  <martin@ximian.com>
4556
4557         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
4558         scope if we don't already have it.
4559
4560         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
4561         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
4562         fixes #75867.
4563
4564 2005-07-31  Miguel de Icaza  <miguel@novell.com>
4565
4566         * statement.cs: Copy the local exception into the exception
4567         captured local.  Fixes 75674
4568
4569 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4570
4571         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4572         type as namespace.
4573
4574 2005-08-12  Martin Baulig  <martin@ximian.com>
4575
4576         * expression.cs (MemberAccess.ResolveNamespaceOrType): Only search
4577         for nested types here to avoid hitting the cache too early.
4578
4579 2005-08-09  Miguel de Icaza  <miguel@novell.com>
4580
4581         * enum.cs: On the new compiler CLS error 3005 is now a warning not
4582         an error. 
4583
4584 2005-08-03  Martin Baulig  <martin@ximian.com>
4585
4586         Make iterators in generic methods work; see gtest-191.cs.
4587
4588         * generic.cs
4589         (Constraints.Resolve): Protect against being called twice.
4590
4591         * class.cs
4592         (TypeContainer.GetClassBases): Make this `protected virtual'.
4593
4594         * iterator.cs (Iterator.ctor): Added `GenericMethod' argument.
4595         (Iterator.GetClassBases): Override this and compute the base
4596         classes here.
4597         (Iterator.DefineNestedTypes): If we're a generic method, all our
4598         method type parameters become class type parameters on the proxy
4599         class.
4600
4601         * statement.cs
4602         (ToplevelBlock.Parameters): Make this a property, not a field.
4603         (ToplevelBlock.ResolveMeta): Update the `parameters' from the `ip'.
4604
4605 2005-08-03  Martin Baulig  <martin@ximian.com>
4606
4607         * typemanager.cs (TypeManager.IsSubclassOf): Use
4608         `TypeManager.IsEqual' instead of `Type.Equals'; fixes gtest-190.cs.
4609         (TypeManager.GetFullName_recursed): Improved.
4610
4611 2005-07-27  Carlos Alberto Cortez <calberto.cortez@gmail.com>
4612
4613         Fix #75417
4614         * ecore.cs (Expression.IsAccessorAccessible): Change the check for
4615         Private accessor case, using TypeManager.IsPrivateAccessible instead of
4616         invocation_type == mi.DeclaringType, since the first one also checks
4617         other condition used by generic instances.
4618         
4619 2005-07-27  Martin Baulig  <martin@ximian.com>
4620
4621         * anonymous.cs (CaptureContext.AddField): Added
4622         `AnonymousContainer am' argument; compute its toplevel scope if
4623         it's not already computed.  Fixes #75649.
4624
4625 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
4626
4627         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
4628         CheckAttributeType and refactored.
4629         (Attribute.ResolvePossibleAttributeType): Changed to reuse
4630         ResolveAsTypeTerminal error handling.
4631         (ResolveAsTypeTerminal): Introduced because of global attributes extra
4632         handling.
4633         (GetSignatureForError): Print errors in same way.
4634
4635         * class.cs,
4636         * codegen.cs: Reflect attribute GetSignatureForError change.
4637
4638         * ecore.cs,
4639         * expression.cs: Add silent parameter to ResolveAsTypeStep.
4640
4641         * namespace.cs (UsingEntry): Refactored to make fields private.
4642
4643         * assign.cs,
4644         statement.cs: Error_UnexpectedKind has extra parameter.
4645
4646 2005-07-14  Raja R Harinath  <rharinath@novell.com>
4647
4648         * ecore.cs (IAlias): Remove.
4649         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
4650         that implement the interface.
4651         * namespace.cs (Namespace): Likewise.
4652         (Namespace.declspaces): Renamed from 'defined_names'.
4653         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
4654         DeclSpace instead of an IAlias.
4655         * tree.cs (Tree.AddDecl): Update.
4656
4657 2005-07-12  Raja R Harinath  <rharinath@novell.com>
4658
4659         * statement.cs (Block.Flags); Remove HasVarargs.
4660         (Block.HasVarargs): Move to ToplevelBlock.
4661         (Block.ThisVariable, Block.AddThisVariable): Likewise.
4662         (Block.Variables): Make protected.  Initialize variable hashtable
4663         if necessary.
4664         (Block.AddVariable): Update.
4665         (Block.Resolve): Update to changes.
4666         (ToplevelBlock.HasVarargs): New boolean.
4667         (ToplevelBlock.ThisVariable): Move here from Block.
4668         (ToplevelBlock.AddThisVariable): Likewise.
4669         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
4670         * expression.cs (This.ResolveBase): Update to changes.
4671         (ArglistAccess.DoResolve): Likewise.
4672
4673 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4674
4675         Fix #75321
4676         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
4677
4678         * class.cs (TypeContainer.VerifyMembers): Distinguish between
4679         not used and not used & assigned.
4680         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
4681
4682 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4683
4684         Fix #75053
4685         * expression.cs (Is.DoResolve): null is never provided type.
4686
4687 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
4688
4689         Fix #52496
4690         * cs-parser.jay: Less strict event error rule to catch more errors.
4691
4692 2005-07-11  Martin Baulig  <martin@ximian.com>
4693
4694         * generic.cs (ConstructedType.CheckConstraints): Improve the check
4695         for the constructor constraint: we do not only have to check
4696         whether the class has a public constructor, but also ensure that
4697         it's parameterless.  Fixes #75492.
4698
4699 2005-07-11  Martin Baulig  <martin@ximian.com>
4700
4701         * expression.cs (Binary.ResolveOperator): Only allow `==' and `!='
4702         between type parameters if they either have the reference type
4703         constraint or the class constraint.
4704
4705 2005-07-10  Kamil Skalski <nazgul@nemerle.org>
4706
4707         * generic.cs: Use MakeGenericType instead of BindGenericParameters.
4708
4709 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
4710
4711         Fix #74975
4712         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
4713         (ExtractSecurityPermissionSet): Cope with self referencing security
4714         attributes properly.
4715
4716         * driver.cs (SetOutputFile): Made public property OutputFile.
4717
4718 2005-07-07  Raja R Harinath  <rharinath@novell.com>
4719
4720         Fix #75486.
4721         * class.cs (TypeContainer.first_nonstatic_field): Rename from
4722         has_nonstatic_fields.  Make into a FieldBase pointer.
4723         (TypeContainer.AddField): Add CS0282 check.
4724         (TypeContainer.EmitType): Update.
4725
4726 2005-07-06  Miguel de Icaza  <miguel@novell.com>
4727
4728         * cs-tokenizer.cs (consume_identifier): Do not create strings to
4729         compare if they start with __.
4730
4731 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4732
4733         * statement.cs (Switch.SwitchGoverningType): Only look at
4734         UserCasts that don't need implicit standard conversions to one of
4735         the allowed switch types (Fixes test-322.cs).
4736         (LocalInfo.Resolve): Re-enable sanity-test.
4737
4738 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
4739
4740         * cs-tokenizer.cs (consume_identifier): Detect double undescores
4741         
4742         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
4743         
4744         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
4745
4746 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4747
4748         Fix #75472.
4749         * ecore.cs (SimpleName.GetSignatureForError): Add.
4750         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
4751         (MemberAccess.GetSignatureForError): Add.
4752
4753 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
4754  
4755         The big error and warning messages review.
4756         
4757         * anonymous.cs,
4758         * assign.cs,
4759         * attribute.cs,
4760         * class.cs,
4761         * codegen.cs,
4762         * convert.cs,
4763         * cs-parser.jay,
4764         * cs-tokenizer.cs,
4765         * decl.cs,
4766         * delegate.cs,
4767         * doc.cs,
4768         * driver.cs,
4769         * ecore.cs,
4770         * enum.cs,
4771         * expression.cs,
4772         * flowanalysis.cs,
4773         * iterators.cs,
4774         * literal.cs,
4775         * location.cs,
4776         * modifiers.cs,
4777         * namespace.cs,
4778         * parameter.cs,
4779         * pending.cs,
4780         * report.cs,
4781         * rootcontext.cs,
4782         * statement.cs,
4783         * support.cs,
4784         * tree.cs,
4785         * typemanager.cs: Updated.
4786         
4787         * class.cs: (MethodCore.SetYields): Moved here to share.
4788         (PropertyMethod.Define): Moved iterator setup here.
4789         
4790         * iterators.cs: Add orig_method to have full access to parent
4791         container.
4792
4793 2005-07-05  Raja R Harinath  <rharinath@novell.com>
4794
4795         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
4796         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
4797         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
4798         variable of struct type.
4799         * expression.cs (Unary.ResolveOperator): Update to change.
4800         (Indirection.VerifyFixed): Likewise.
4801         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
4802         (ParameterReference.VerifyFixed): Value parameters are fixed.
4803         (This.VerifyFixed): Treat 'this' as a value parameter.
4804         * statement.cs (LocalInfo.IsFixed): Remove.
4805
4806 2005-07-01  Martin Baulig  <martin@ximian.com>
4807
4808         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4809         `ec.EmitThis ()' to get the correct scope.
4810
4811 2005-07-01  Martin Baulig  <martin@ximian.com>
4812
4813         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
4814         instance is a ParameterReference; fixes #75299.
4815
4816 2005-06-30  Raja R Harinath  <rharinath@novell.com>
4817
4818         Fix #75412.
4819         * expression.cs (Indexers.map): Remove.
4820         (Indexers.Append): Filter out inaccessible setters and getters.
4821         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
4822
4823         Fix #75283.
4824         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
4825         Refactored from ...
4826         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
4827         (FieldExpr.Emit, PropertyExpr.Emit): Update.
4828         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
4829         * expression.cs (Invocation.EmitCall): Add CS0120 check.
4830
4831 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
4832
4833         Fix #75322
4834         * class.cs (FieldBase.GetInitializerExpression): One more field
4835         for backup.
4836
4837 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4838
4839         * pending.cs: Do not define a proxy if the base method is virtual,
4840         it will be picked up by the runtime (bug 75270).
4841
4842 2005-07-08  Martin Baulig  <martin@ximian.com>
4843
4844         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
4845         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
4846
4847 2005-07-07  Martin Baulig  <martin@ximian.com>
4848
4849         * generic.cs (ConstructedType.CheckConstraint): Use
4850         ResolveAsTypeStep(), not ResolveAsTypeTerminal() so we're not
4851         called recursively; fixes #75329.
4852
4853 2005-07-06  Martin Baulig  <martin@ximian.com>
4854
4855         * generic.cs (TypeManager.InferTypeArguments): Added support for
4856         anonymous methods; fixes #75461.
4857
4858 2005-07-01  Martin Baulig  <martin@ximian.com>
4859
4860         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4861         `ec.EmitThis ()' to get the correct scope.
4862
4863 2005-07-01  Martin Baulig  <martin@ximian.com>
4864
4865         * ecore.cs (FieldExpr.DoResolve): Only capture the field if it's
4866         instance is `This'; fixes #75299.
4867
4868 2005-06-30  Martin Baulig  <martin@ximian.com>
4869
4870         * class.cs (Indexer): Implement IIteratorContainer; added support
4871         for iterators in indexers.
4872
4873         * codegen.cs
4874         (EmitContext.CurrentIterator): Make this a property, not a field.
4875
4876         * anonymous.cs (AnonymousContainer.Iterator): New public property.
4877
4878 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4879
4880         * pending.cs: Do not define a proxy if the base method is virtual,
4881         it will be picked up by the runtime (bug 75270).
4882
4883 2005-06-28  Martin Baulig  <martin@ximian.com>
4884
4885         * cs-parser.jay (interface_method_declaration): Avoid a
4886         reduce/reduce conflict by moving some of the code into a separate
4887         `interface_method_declaration_body' rule; fixes #75368.
4888
4889 2005-06-28  Martin Baulig  <martin@ximian.com>
4890
4891         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Move the
4892         array check after the check for TypeBuilder's.
4893
4894 2005-06-21  Raja R Harinath  <rharinath@novell.com>
4895
4896         * convert.cs (FindMostEncompassedType): Add two trivial special
4897         cases (number_of_types == 0 || number_of_types == 1).
4898         (FindMostEncompasingType): Likewise.
4899
4900 2005-06-17  Raja R Harinath  <rharinath@novell.com>
4901
4902         Some cleanups preparing for the fix of #75283.
4903         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
4904         error testing.
4905         (EventExpr.InstanceResolve): Likewise.
4906         (EventExpr.DoResolve): Remove redundant checks.
4907
4908 2005-06-08  Miguel de Icaza  <miguel@novell.com>
4909
4910         * class.cs: Small fix.
4911
4912 2005-06-08  Raja R Harinath  <rharinath@novell.com>
4913
4914         Fix #75160.
4915         * class.cs (GetPartialBases): Fix return value check of
4916         part.GetClassBases.
4917
4918 2005-06-07  Raja R Harinath  <rharinath@novell.com>
4919
4920         Ensure that partial classes are registered in their enclosing
4921         namespace.  Initial part of fix of #75160.
4922         * tree.cs (Tree.RecordDecl): Add new namespace argument.
4923         Register declspace with namespace here, not in
4924         DeclSpace.RecordDecl.
4925         * cs-parser.jay: Pass namespace to RecordDecl.
4926         * class.cs (PartialContainer.Create): Likewise.
4927         (ClassPart.DefineType): New sanity-check.  Throws an exception if
4928         called.
4929         * decl.cs (Declspace.RecordDecl): Remove.
4930         * namespace.cs (NamespaceEntry.DefineName): Remove.
4931
4932 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4933
4934         * rootcontext.cs: Reset TargetExt as well.
4935
4936 2005-06-03  Raja R Harinath  <rharinath@novell.com>
4937
4938         * ecore.cs (Expression.Resolve): Emit CS0654 error when
4939         -langversion:ISO-1.
4940
4941 2005-06-02  Raja R Harinath  <rharinath@novell.com>
4942
4943         Fix #75080, cs0119.cs.
4944         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
4945         of ...
4946         (Expression.Resolve): ... this.  Use it.  Remove bogus code
4947         allowing ExprClass.Type and ExprClass.Namespace for
4948         ResolveFlags.VariableOrValue.
4949         (Expression.Resolve) [1-argument variant]: Change default resolve
4950         flags based on language version.
4951         (Expression.Error_UnexpectedKind): Use a simple string array
4952         rather than an ArrayList.
4953         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
4954         not ExprClass.Type.
4955         (TypeOfVoid.DoResolve): Likewise.
4956         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
4957         flags argument -- it always has the same value.
4958
4959 2005-05-31  Raja R Harinath  <rharinath@novell.com>
4960
4961         Fix #75081.
4962         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
4963         Use it in the error message.
4964         * assign.cs, expression.cs, statement.cs: Update.
4965
4966 2005-05-30  Raja R Harinath  <rharinath@novell.com>
4967
4968         Fix #75088.
4969         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
4970         the "almostMatchedMember" case too.
4971         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
4972         that failed the accessibility checks to 'almost_match'.
4973
4974 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
4975
4976         * attribute.cs: Use internal MethodBuilder methods to set
4977         ExactSpelling and SetLastError on PInvoke methods, instead
4978         of passing them via charset.  Fixes #75060.
4979
4980 2005-05-27  Raja R Harinath  <rharinath@novell.com>
4981
4982         * parameter.cs (Parameter): Remove TODO comment.
4983         (Parameter.DefineParameter): Remove Location parameter.
4984         (Parameters.LabelParameters): Likewise.
4985         * class.cs (Constructor.Emit): Update to change.
4986         (MethodData.Emit): Likewise.
4987         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
4988         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
4989
4990 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
4991
4992         * parameter.cs,
4993           Removed Parameters.Location and added Parameter.Location instead.
4994           Removed Location parameter from Emit() and GetSignature().
4995         * anonymous.cs,
4996           class.cs,
4997           cs-parser.jay,
4998           delegate.cs,
4999           iterators.cs,
5000           statement.cs :
5001           Modified all related calls.
5002
5003 2005-06-21  Martin Baulig  <martin@ximian.com>
5004
5005         * generic.cs (NullCoalescingOperator.Emit): Make this work if the
5006         left-hand side is not a nullable type; fixes #75328.
5007
5008 2005-06-21  Martin Baulig  <martin@ximian.com>
5009
5010         * typemanager.cs
5011         (TypeManager.CSharpName): Use GetFullName() instead of `t.FullName'.
5012         (TypeManager.GetFullNameSignature): Likewise.
5013
5014         * convert.cs (Convert.Error_CannotImplicitConversion): Compare
5015         `source.FullName' and `target.FullName' to check whether there are
5016         two conflicting definitions.
5017
5018 2005-06-21  Martin Baulig  <martin@ximian.com>
5019
5020         * convert.cs (Convert.ImplicitTypeParameterConversion): Always use
5021         a BoxedCast - also for reference types - to be compatible with csc.
5022
5023 2005-06-21  Martin Baulig  <martin@ximian.com>
5024
5025         * expression.cs (MemberAccess.DoResolve): Add support for nested
5026         types in a generic instance; fixes #75320.
5027
5028 2005-06-20  Martin Baulig  <martin@ximian.com>
5029
5030         * generic.cs (TypeManager.InferType): Also walk the class
5031         hierarchy for generic instances; fixes #75261.
5032
5033 2005-06-17  Martin Baulig  <martin@ximian.com>
5034
5035         * typemanager.cs (TypeManager.IsBuiltinType): Use TypeToCoreType()
5036         to make things work for corlib.
5037
5038 2005-06-15  Martin Baulig  <martin@ximian.com>
5039
5040         * attribute.cs (Attribute.CheckSecurityActionValidity): Remove the
5041         obsolete `SecurityAction' values.
5042
5043 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
5044
5045         * rootcontext.cs: Reset TargetExt as well.
5046         
5047 2005-06-09  Martin Baulig  <martin@ximian.com>
5048
5049         * delegate.cs (Delegate.VerifyMethod): Added
5050         `MethodGroupExpr old_mg' argument; inherit its
5051         `HasTypeParameters'; fix #75085.
5052
5053 2005-06-09  Martin Baulig  <martin@ximian.com>
5054
5055         * expression.cs (Invocation.OverloadResolve): Correctly handle
5056         generic methods for the SetMemberIsUsed(); fix #75064.
5057
5058 2005-06-09  Martin Baulig  <martin@ximian.com>
5059
5060         * statement.cs (Throw.Resolve): Use TypeManager.IsSubclassOf();
5061         fixes #75062.
5062
5063 2005-06-08  Martin Baulig  <martin@ximian.com>
5064
5065         * cs-parser.jay (nullable_type_or_conditional): If we put the
5066         nullable back and our `type' is a `ComposedCast', remove the
5067         nullable from it.  Fixes #75156.
5068
5069         * expression.cs (ComposedCast.RemoveNullable): New public method.
5070
5071 2005-06-08  Martin Baulig  <martin@ximian.com>
5072
5073         The big Iterators rewrite :-)
5074
5075         * iterators.cs: Rewrite this to use the anonymous methods framework.
5076
5077         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
5078         before the TypeContainers; see 2test-21.cs.
5079
5080         * class.cs
5081         (TypeContainer.DefineType): Don't create a new EmitContext if we
5082         already have one (this only happens if we're an Iterator).
5083         (TypeContainer.Define): Also call Define() on all our iterators.
5084         (Method.CreateEmitContext): Added support for iterators.
5085
5086         * anonymous.cs
5087         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
5088         (AnonymousContainer.CreateMethodHost): Moved here from
5089         AnonymousMethod and made abstract.
5090         (AnonymousContainer.CreateScopeType): New abstract method.
5091         (AnonymousContainer.IsIterator): New public property.
5092         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
5093         get the ScopeTypeBuilder rather than manually defining it here. 
5094         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
5095         iterators here.
5096
5097         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
5098         before RootContext.DefineTypes().
5099
5100         * codegen.cs (EmitContext.RemapToProxy): Removed.
5101         (EmitContext.CurrentAnonymousMethod): Changed type from
5102         AnonymousMethod -> AnonymousContainer.
5103         (EmitContext.ResolveTopBlock): Protect from being called twice.
5104         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
5105         (EmitContext.EmitThis): Removed the iterators hacks; use the
5106         anonymous methods framework for that.
5107
5108         * statement.cs
5109         (ToplevelBlock.Container): Make this a property, not a field.
5110         (ToplevelBlock.ReParent): New public method; move the
5111         ToplevelBlock into a new container.
5112         (Foreach.TemporaryVariable): Simplify.
5113
5114 2005-06-05  Martin Baulig  <martin@ximian.com>
5115
5116         * statement.cs (LocalInfo.CompilerGenerated): New flag.
5117         (Block.AddTemporaryVariable): New public method; creates a new
5118         `LocalInfo' for a temporary variable.
5119         (Block.EmitMeta): Create the LocalBuilders for all the temporary
5120         variables here.
5121         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
5122         non-iterator variables.
5123
5124 2005-06-05  Martin Baulig  <martin@ximian.com>
5125
5126         * statement.cs (Foreach.TemporaryVariable): Create the
5127         LocalBuilder in the Emit phase and not in Resolve since in some
5128         situations, we don't have an ILGenerator during Resolve; see
5129         2test-19.cs for an example.
5130
5131 2005-06-04  Martin Baulig  <martin@ximian.com>
5132
5133         The big Foreach rewrite - Part II.
5134
5135         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
5136         with `PropertyInfo ienumerator_getcurrent'.
5137
5138         * codegen.cs (VariableStorage): Removed.
5139
5140         * statement.cs
5141         (Foreach): Derive from Statement, not ExceptionStatement.
5142         (Foreach.CollectionForeach): New nested class.  Moved all the code
5143         dealing with collection foreach here.
5144         (Foreach.ForeachHelperMethods): Removed.
5145         (Foreach.TemporaryVariable): Implement IMemoryLocation.
5146
5147 2005-05-23  Martin Baulig  <martin@ximian.com>
5148
5149         * statement.cs (Try.DoResolve): Don't create a `finally' if we
5150         don't need to.  Fix #75014.
5151
5152 2005-05-26  Raja R Harinath  <rharinath@novell.com>
5153
5154         Improve user-defined conversion handling.
5155         * convert.cs (GetConversionOperators): Rewrite.  Return only the
5156         applicable operators.
5157         (AddConversionOperators): New.  Helper for GetConversionOperators.
5158         (FindMostEncompassedType, FindMostEncompassingType): Verify that
5159         there is only one most encompassed/encompassing type.
5160         (FindMostSpecificSource, FindMostSpecificTarget): Remove
5161         "applicable operator" handling.
5162         (UserConversion): Move cache here from GetConversionOperators.
5163         Directly cache the chosen operator, rather than the whole
5164         MethodGroup.
5165         (ExplicitNumericConversion): Fix buggy implementation of Decimal
5166         case.  Allow conversion of decimal to sbyte and byte too.
5167         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
5168         New static methods.  Used to avoid allocating EmptyExpressions in
5169         convert.cs.
5170
5171 2005-05-24  Duncan Mak  <duncan@novell.com>
5172
5173         * ecore.cs (CastFromDecimal): New class for casting a decimal to
5174         another class, used in Convert.ExplicitNumericConversion.
5175         (CastToDecimal): New class, similar to above, but casts to
5176         System.Decimal, used in Convert.ImplicitNumericConversion and also
5177         in explicit convesion from double/float to decimal.
5178
5179         * convert.cs (ImplicitNumericConversion): Handle implicit
5180         conversions to System.Decimal.
5181         (ExplicitNumericConversion): handle explicit conversions to
5182         System.Decimal.
5183
5184         This fixes #68711.
5185         
5186 2005-05-20  Miguel de Icaza  <miguel@novell.com>
5187
5188         * typemanager.cs: Do not throw an exception in the TypeBuilder
5189         case, we take care of it on the TypeCode.
5190
5191 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
5192         
5193         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
5194         is back.
5195         
5196         * cs-parser.jay: Catch more lexical errors.
5197         
5198         * report.cs: Add one more Error method.
5199         
5200         * rootcontext.cs,
5201         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
5202
5203 2005-05-20  Martin Baulig  <martin@ximian.com>
5204
5205         * class.cs (TypeContainer.CircularDepException): Removed.
5206         (TypeContainer.DefineType): Removed the `InTransit' stuff.
5207         (TypeContainer.CheckRecursiveDefinition): Check for circular class
5208         (CS0146) and interface (CS0529) dependencies here.
5209
5210 2005-05-20  Martin Baulig  <martin@ximian.com>
5211
5212         * expression.cs (New.DoResolve): Move the CS0712 check above the
5213         CS0144 check; otherwise it can never be reached.
5214
5215 2005-05-20  Martin Baulig  <martin@ximian.com>
5216
5217         * cs-parser.jay: Fix CS0080 check; add CS0231 and CS0257 from MCS.
5218
5219 2005-05-20  Martin Baulig  <martin@ximian.com>
5220
5221         * class.cs (TypeContainer.DefineType): Fix CS0698 check.
5222
5223         * typemanager.cs (TypeManager.IsAttributeType): New public method.
5224
5225 2005-05-19  Martin Baulig  <martin@ximian.com>
5226
5227         * delegate.cs
5228         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
5229         to disable error reporting.
5230
5231         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
5232         here since we don't want to report an error; see the new test-336.cs.
5233
5234 2005-05-19  Raja R Harinath  <rharinath@novell.com>
5235
5236         * statement.cs (ToplevelBlock.GetParameterReference)
5237         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
5238         Move here from class Block.
5239         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
5240         * expression.cs (ParameterReference.DoResolveBase): Likewise.
5241
5242 2005-05-18  Martin Baulig  <martin@ximian.com>
5243
5244         Fix #74978.
5245
5246         * flowanalysis.cs
5247         (FlowBranching.Reachability): Add non-static public And() and Or()
5248         methods.
5249         (FlowBranchingSwitch): New class; do the `break_origins' thing
5250         like in FlowBranchingLoop.
5251         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
5252         reachability, not just locals and parameters.
5253         (FlowBranching.MergeChild): Remove some of the hacks for loop and
5254         switch; MergeBreakOrigins() now takes care of that.
5255
5256 2005-05-18  Martin Baulig  <martin@ximian.com>
5257
5258         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
5259         a loop and may leave it, reset the barrier; fixes #74974.
5260
5261 2005-05-16  Raja R Harinath  <rharinath@novell.com>
5262
5263         Fix test-382.cs.  Emit values of decimal constants.
5264         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
5265         Carved out of ...
5266         (TypeContainer.AddField): ... this.
5267         (TypeContainer.EmitFieldInitializers): Allow the list of fields
5268         with initializers to include 'Const's.
5269         (ClassPart.RegisterFieldForInitialization): Forward to
5270         PartialContainer.
5271         * const.cs (Const.Const): Pass initializer to base class.
5272         (Const.Define): In case of decimal constants, register them for
5273         initialization in a static constructor.
5274
5275 2005-05-14  Martin Baulig  <martin@ximian.com>
5276
5277         * statement.cs (Block.Resolve): Correctly handle unreachable code;
5278         do not call ResolveUnreachable() on unreachable statements in
5279         here, see the comment in the source code.
5280
5281 2005-05-13  Raja R Harinath  <rharinath@novell.com>
5282
5283         Fix #74934.
5284         * expression.cs (BinaryResolveOperator): If one of the operands of
5285         an equality comparison is 'null' and the other is a pointer type,
5286         convert the null to a NullPointer.
5287         * convert.cs (ImplicitReferenceConversion): If the expression is a
5288         NullLiteral and the target type is a pointer type, return a
5289         NullPointer instead.
5290         (ImplicitConversionStandard): Likewise.
5291
5292 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
5293         
5294         * cs-parser.jay: Set readonly context based on special constructs.
5295         
5296         * expression.cs (LocalVariableReference.DoResolveBase): Improved
5297         readonly variable error handling.
5298         
5299         * rootcontext.cs (EmitCode): Don't verify members when error
5300         occurred.
5301         
5302         * statement.cs (LocalInfo): Add reaodnly context information.
5303         (SetReadOnlyContext, GetReadOnlyContext): New methods.
5304
5305 2005-05-17  Martin Baulig  <martin@ximian.com>
5306
5307         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
5308         #70970. 
5309
5310 2005-05-13  Martin Baulig  <martin@ximian.com>
5311
5312         * statement.cs (Block.Resolve, ResolveUnreachable): Correctly
5313         handle unreachable blocks.
5314
5315 2005-05-13  Martin Baulig  <martin@ximian.com>
5316
5317         * class.cs
5318         (ConstructorInitializer.GetOverloadedConstructor): Don't crash.
5319         (MethodCore.CheckCore): Use TypeManager.IsEqual(); fix #74904 and
5320         #74905. 
5321
5322 2005-05-13  Martin Baulig  <martin@ximian.com>
5323
5324         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
5325         instance variable, not a local.  Fix #74873.
5326         (Block.ResolveUnreachable): Set it to true here.
5327
5328 2005-05-12  Martin Baulig  <martin@ximian.com>
5329
5330         * cs-parser.jay (property_declaration): Pass the `current_class',
5331         not the `current_container' to Property's .ctor.  Fixes #74912.
5332
5333 2005-05-11  Martin Baulig  <martin@ximian.com>
5334
5335         * typemanager.cs (Closure): Copy this from MCS and merge all the
5336         GMCS-specific changes into it.
5337
5338 2005-05-12  Raja R Harinath  <harinath@gmail.com>
5339
5340         Fix #74920.
5341         * typemanager.cs (unmanaged_enclosing_types): New.
5342         (IsUnmanagedType): Avoid infloops by using
5343         'unmanaged_enclosing_types' to talk with recursive invocations.
5344
5345 2005-05-11  Duncan Mak  <duncan@novell.com>
5346
5347         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
5348         continuing to process for 'arg'.
5349         (handle_preprocessing_directive): Check the argument of the #endif
5350         directive and report error CS1025 if there are any trailing
5351         characters.
5352
5353         According to the C# spec, having even whitespace after the #endif
5354         directive is illegal; however, because we call arg.TrimEnd ()
5355         beforehand, we have the same behavior as csc, allowing whitespace
5356         after the directive.
5357
5358         Fixes #74892.
5359
5360 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
5361
5362         Fix #74863.
5363         
5364         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
5365         (Constructor.GetObsoleteAttribute): Implemented correctly.
5366
5367 2005-05-10  Martin Baulig  <martin@ximian.com>
5368
5369         * generic.cs (Constraints.Resolve): Report CS0246 if we cannot
5370         resolve the type; fixes #74864.
5371         (DefaultValueExpression): Create the LocalTemporary in Emit(), not
5372         in DoResolve(); fixes #74862.
5373
5374 2005-05-10  Martin Baulig  <martin@ximian.com>
5375
5376         * support.cs (ReflectionParameters.ParameterModifier): Use
5377         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
5378         and `ParameterAttributes.In'.  Fixes #74884.
5379
5380 2005-05-10  Martin Baulig  <martin@ximian.com>
5381
5382         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Don't use
5383         the cache if we're just looking for `MemberTypes.NestedType' in a
5384         generic instance.
5385
5386         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
5387         constraints if we're still resolving the type tree.
5388         (Expression.MemberLookup): If we're resolving the type tree, only
5389         look for `MemberTypes.NestedType' since we're only interested in
5390         getting types.
5391
5392         * class.cs (TypeContainer.DefineType): Don't resolve the type
5393         parameters here; do this later in ResolveType() after the type
5394         tree has been resolved.
5395         (TypeContainer.ResolveType): New public method; this is called
5396         after the type tree is resolved and before the types are being
5397         populated.  We resolve the generic constraints here.
5398         (TypeContainer.DoDefineMember): Check the constraints on our base
5399         class and interfaces.
5400
5401         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Make this protected;
5402         set the `ResolvingTypeTree' flag on the EmitContext.
5403
5404         * codegen.cs (EmitContext.ResolvingTypeTree): New public field.
5405
5406 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
5407
5408         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
5409         
5410         * expression.cs (Argument.GetParameterModifier): Turned to property.
5411         (Invocation.Error_InvalidArguments): Add more descriptive errors.
5412         
5413         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
5414         its C# equivalent.
5415         
5416 2005-05-09  Raja R Harinath  <rharinath@novell.com>
5417
5418         Fix #74852.
5419         * decl.cs (MemberCache.AddMethods): Register override methods,
5420         rather than non-override methods.
5421         * typemanager.cs (RegisterOverride): New.
5422         (IsOverride): Update.
5423
5424 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5425
5426         * typemanager.cs (TypeManager): Moved InitGenerics to Reset method.
5427
5428 2005-05-06  Martin Baulig  <martin@ximian.com>
5429
5430         * attribute.cs
5431         (Attributable.IsClsComplianceRequired): Fix typo in the method name.
5432         (AttributeTester.AnalyzeTypeCompliance): Add generics support.
5433
5434 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5435
5436         Fix #73105.
5437         
5438         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
5439         recursive declaration.
5440         
5441         * statement.cs (Block.ResolveMeta): Report any error in resolving.
5442         
5443 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
5444
5445         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
5446         
5447         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
5448
5449 2005-05-05  Raja R Harinath  <rharinath@novell.com>
5450
5451         Fix #74797.
5452         * decl.cs (DeclSpace.FamilyAccessible): 
5453         Use TypeManager.IsNestedFamilyAccessible.
5454
5455         Fix reopened #64812.
5456         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
5457         internal'.
5458
5459 2005-05-04  Raja R Harinath  <rharinath@novell.com>
5460             Abin Thomas  <projectmonokochi@rediffmail.com>
5461             Anoob V E  <projectmonokochi@rediffmail.com>
5462             Harilal P R  <projectmonokochi@rediffmail.com>
5463
5464         Fix #64812.
5465         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
5466         allow access to all static members.
5467
5468 2005-05-04  Martin Baulig  <martin@ximian.com>
5469
5470         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
5471
5472 2005-05-04  Martin Baulig  <martin@ximian.com>
5473
5474         Fix #74655.
5475
5476         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
5477         section at the end; make things work if `default' is not the last
5478         section.        
5479
5480 2005-05-04  Martin Baulig  <martin@ximian.com>
5481
5482         Fix #70400.
5483
5484         * statement.cs (Switch): Replaced the `got_default' field with a
5485         `default_section' one.
5486         (Switch.CheckSwitch): Set `default_section' here.
5487         (Switch.Resolve): If we're a constant switch and the constant is
5488         not found, use the default section.
5489
5490 2005-05-03  Martin Baulig  <martin@ximian.com>
5491
5492         * expression.cs (ArrayAccess.EmitGetLength): New public method.
5493
5494         * statement.cs (Foreach.ArrayForeach): New nested class.
5495         (Foreach.TemporaryVariable): New nested class.
5496         (Foreach.EmitArrayForeach): Removed; this is now in the new
5497         ArrayForeach class.
5498
5499 2005-05-03  Raja R Harinath  <rharinath@novell.com>
5500
5501         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
5502         more conservative.
5503         (VerifyPendingMethods): Revert change below.
5504
5505         * typemanager.cs (IsOverride, RegisterNonOverride): New.
5506         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
5507         that used to trigger warning -28.  Remove warning -28.
5508         * expression.cs (Invocation.OverloadResolve): Use
5509         TypeManager.IsOverride to distinguish override methods.
5510
5511         Fix #74773.
5512         * pending.cs (VerifyPendingMethods): If a base type implements the
5513         requested interface, don't bother checking individual methods of
5514         the base type.  As a side-effect, this prevents the creation of
5515         unnecessary proxies.
5516
5517 2005-05-02  Martin Baulig  <martin@ximian.com>
5518
5519         Fix #70182.
5520
5521         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
5522         Also `And' the locals if the old vector is null.
5523         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
5524         null; in this case we basically reset all the variables.        
5525
5526 2005-05-02  Martin Baulig  <martin@ximian.com>
5527
5528         Fix #74529.
5529
5530         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
5531         Added `FlowBranching branching' argument; always `and' the
5532         variables instead of `or'ing them unless we're an infinite loop.
5533
5534         * statement.cs (While.Resolve): Create a new sibling unless we're
5535         infinite.       
5536
5537 2005-05-02  Martin Baulig  <martin@ximian.com>
5538
5539         Fix #70140.
5540
5541         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
5542         arguments; use it instead of creating a new TopLevelBlock.
5543         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
5544         our ConstructorInitializer.
5545
5546         * statement.cs
5547         (TopLevelBlock.TopLevelBranching): New public property.
5548         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
5549         and create our `TopLevelBranching'.
5550
5551         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
5552         anonymous method host, use `block.TopLevelBranching' rather than
5553         creating a new branching.
5554
5555 2005-04-20  Miguel de Icaza  <miguel@novell.com>
5556
5557         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
5558         a ScopeInfo, if any of the current children is a child of the new
5559         entry, move those children there.
5560
5561 2005-04-30  Martin Baulig  <martin@ximian.com>
5562
5563         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
5564         at the beginning of a SwitchSection.  Fix #73335.
5565
5566 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
5567
5568         Fix #74378
5569         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
5570         
5571         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
5572         (FieldExpr.DoResolve): Obsolete members are ignored for field
5573         initializers.
5574         
5575 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
5576
5577         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
5578         of arrays detection.
5579
5580         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
5581         verification.
5582         (Field.VerifyClsCompliance): Volatile fields are not compliant.
5583
5584         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
5585         arrays report.
5586
5587 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
5588
5589         * cs-parser.jay: Use the prefered version of -unsafe in error
5590         message.
5591
5592 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
5593
5594         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
5595         circumstances.
5596
5597 2005-04-20  John Luke  <john.luke@gmail.com>
5598
5599         * driver.cs: fix typo in error message, --outout to --output
5600
5601 2005-04-30  Martin Baulig  <martin@ximian.com>
5602
5603         * attribute.cs (Attribute.CheckSecurityActionValidity): Correctly
5604         handle the .NET 2.x security attributes.
5605
5606 2005-04-30  Martin Baulig  <martin@ximian.com>
5607
5608         * typemanager.cs
5609         (TypeManager.ExpandInterfaces): Don't add things twice.
5610
5611         * class.cs
5612         (TypeContainer.VerifyClsCompliance): Allow generic instances.
5613
5614 2005-04-29  Martin Baulig  <martin@ximian.com>
5615
5616         * generic.cs (Constraints.ResolveTypes): Expand interfaces.
5617
5618         * anonymous.cs: Added support for anonymous generic methods.
5619
5620 2005-04-29  Martin Baulig  <martin@ximian.com>
5621
5622         * typemanager.cs (TypeManager.GetInterfaces): Correctly handle
5623         generic instances.
5624
5625 2005-04-29  Martin Baulig  <martin@ximian.com>
5626
5627         * generic.cs (TypeManager.HasConstructorConstraint): Removed.
5628
5629         * expression.cs (New.DoResolve): Fix the CS0304 check.
5630
5631 2005-04-29  Martin Baulig  <martin@ximian.com>
5632
5633         * typemanager.cs (TypeManager.GetFullName): Updated to the new
5634         naming schema.
5635
5636         * class.cs (MethodCore.IsDuplicateImplementation): If we're an
5637         explicit interface implementation, compare the interface types.
5638         (MethodData.Define): Use the new naming scheme from the latest
5639         .NET 2.x beta2.
5640         (MemberBase.DoDefineBase): Resolve `InterfaceType' here.
5641
5642         * decl.cs (MemberName.GetMemberName): Removed.
5643         (MemberName.MethodName, FullName): New properties.
5644
5645 2005-04-25  Raja R Harinath  <rharinath@novell.com>
5646
5647         * gmcs.exe.config: Update v2.0.40607 -> v2.0.50215.
5648
5649 2005-04-22  Martin Baulig  <martin@ximian.com>
5650
5651         * generic.cs (GenericMethod): Create the EmitContext in the
5652         `Define()'; in `Define(MethodBuilder)', create the type parameters
5653         before calling `Define()'.  Fixes #73933.
5654
5655 2005-04-22  Martin Baulig  <martin@ximian.com>
5656
5657         * generic.cs
5658         (Constraints.Resolve): Make things work wrt. the new type lookup system.
5659         (ConstructedType.ResolveAsTypeTerminal): Don't override this.
5660
5661         * ecore.cs (Expression.ResolveAsTypeTerminal): If `te' is a
5662         ConstructedType, check its constraints.
5663
5664 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
5665
5666         * codegen.cs (InRefOutArgumentResolving): New field.
5667         
5668         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
5669         fields outside contructor.
5670         
5671         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
5672         
5673 2005-04-19  Miguel de Icaza  <miguel@novell.com>
5674
5675         * anonymous.cs (CaptureContext.EmitParameterInstance): The
5676         parameter code was not completed ever, so it was not as up-to-date
5677         as local variables.  Must finish it.
5678
5679         The bug fix was to compare the Toplevel of the block, not the
5680         current block.  Thanks for Ben for pointing this out. 
5681
5682 2005-04-19  Raja R Harinath  <rharinath@novell.com>
5683
5684         * decl.cs (AddMethods): Use the declaring type of the problem
5685         method to determine if we want to squash a warning.
5686
5687 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
5688
5689         * attribute.cs: Removed debug output.
5690
5691         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
5692         
5693         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
5694         Report.Stderr.
5695         
5696 2005-04-18  Raja R Harinath  <rharinath@novell.com>
5697
5698         Fix #74481.
5699         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
5700         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
5701         all null comparisons against reference types.
5702
5703 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
5704
5705         Fix# 74565
5706         * class.cs (TypeContainer.CircularDepException) New nested
5707         exception class.
5708         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
5709         (TypeContainer.DefineType): Removed error, reset InTransit before
5710         exit.
5711         (Class.DefineType): Throw exception when is in Transit.
5712         Catch exception and report error.
5713         (Struct.DefineType): Throw exception when is in Transit.
5714         Catch exception and report error.
5715         (Interface.DefineType): Throw exception when is in Transit.
5716         Catch exception and report error.
5717
5718         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
5719         handle nested exception handlers.
5720
5721         * flowanalysis.cs (InTryWithCatch): New method, search for try with
5722         a catch.
5723
5724         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
5725         InFinally and InCatch storage.
5726
5727         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
5728         (Catch.Resolve): Set and Restore ec.InCatch.
5729         (Try.Resolve): Set and Restore ec.InFinally.
5730         (Try.HasCatch): True when try has catch.
5731
5732 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
5733
5734         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
5735           for the same event member, so exclude such cases from warning 419.
5736           Fixed bug #74633.
5737
5738 2005-04-16  Miguel de Icaza  <miguel@novell.com>
5739
5740         * expression.cs (Binary.ResolveOperator): Apply patch from John
5741         Luke to fix bug 59864: operators &, | and ^ on enumerations
5742         require that the same enum type on both sides.
5743
5744         * driver.cs: Add warnings to old flag usage, this is to assist
5745         people who produce Makefiles and hope that the Makefiles will be
5746         used on Windows.
5747
5748         * class.cs (TypeContainer.EmitType): Moved the definition of the
5749         special $PRIVATE$ field from the resolve phase to the Emit phase.
5750         During resolve we do not know if we are a struct with
5751         HasExplicitLayout, we know this only after the attributes for the
5752         type are emitted.
5753
5754         Set the FieldOffset to zero on the dummy field that we create for
5755         the class.   Fixes 74590.
5756
5757 2005-04-16  Raja R Harinath  <rharinath@novell.com>
5758
5759         Fix #73834.
5760         * ecore.cs (PropertyExpr.resolved): New.
5761         (DoResolve): Use it to handle a case of double resolution here.
5762         Handle a case of identical-name-and-type-name.
5763         * expression.cs (ArrayCreation.CheckIndices): Avoid double
5764         resolution by storing the results of expression resolution back
5765         into the "probes" array.
5766
5767 2005-04-15  Raja R Harinath  <rharinath@novell.com>
5768
5769         Fix cs0208-7.cs and cs0208-8.cs.
5770         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
5771         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
5772         error reporting to point out the reason a struct is not unmanaged.
5773
5774 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5775
5776         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
5777           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
5778
5779 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5780
5781         Fix #74528.
5782         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
5783         IdenticalNameAndTypeName here.
5784         (EventExpr.InstanceResolve): Likewise.
5785
5786 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
5787
5788         C# 2.0 DefaultCharSetAttribute implementation
5789         
5790         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
5791         which allows us to set GlobalNamespace for every resolve.
5792         (Attribute.ResolveArguments): Cut from Resolve.
5793         (Attribute.GetCharSetValue): Returns CharSet named argument.
5794         (Attribute.DefinePInvokeMethod): Gets default charset from
5795         module settings.
5796         (GlobalAttribute.ResolveAsTypeStep): Override.
5797         (GlobalAttribute.ResolveArguments): Override.
5798         
5799         * class.cs (TypeAttr): Is protected.
5800         
5801         * codegen.cs (ModuleClass.DefaultCharSet): New member.
5802         (ModuleClass.DefaultCharSetType): New memeber.
5803         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
5804         
5805         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
5806         charset from module.
5807         
5808         * delegate.cs (TypeAttr): Override.
5809         (Delegate.DefineType): Use this TypeAttr.
5810         
5811         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
5812         at very early stage (before types are defined) to resolve model
5813         module attributes. It will probably not work with corlib but it
5814         should be ok.
5815         
5816         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
5817         charset from module.
5818         
5819         * typemanager.cs (default_charset_type): New type.
5820
5821 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5822
5823         * decl.cs (MemberCache.AddMethods): Don't warn if
5824         System.Object.Finalize has buggy MethodAttributes.
5825
5826         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
5827         removed below.
5828
5829 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5830
5831         * doc.cs : detect ambiguous reference to overloaded members.
5832           Fixed bug #71603. MS 1.1 csc does not detect it.
5833
5834 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5835
5836         * doc.cs : delegates must not be referenced with parameters.
5837           Fixed bug #71605.
5838
5839 2005-04-12  Miguel de Icaza  <miguel@novell.com>
5840
5841         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
5842
5843 2005-04-10  Miguel de Icaza  <miguel@novell.com>
5844
5845         * driver.cs (MainDriver): Stop processing if the CLS stage found
5846         errors. 
5847
5848         (CompilerCallableEntryPoint.InvokeCompiler): Always
5849         reset after execution;   Take a TextWriter argument for the
5850         output.
5851
5852         * report.cs: Use the error stream instead of hardcoding stderr. 
5853
5854 2005-04-09  Miguel de Icaza  <miguel@novell.com>
5855
5856         * class.cs: Reduce code paths to test, too small of an
5857         optimization to make it worth the extra testing.  Always perform
5858         it. 
5859
5860 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5861
5862         Fix #74510.
5863         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
5864         operators that had errors reported on them.
5865
5866 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
5867
5868         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
5869         argument types.
5870         (Attribute.Resolve): Add named argument type checking.
5871         
5872         * class.cs (FixedField.Define): Use IsPrimitiveType
5873         
5874         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
5875         
5876         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
5877         unsafe parameter types.
5878         
5879         * statement.cs (Using.ResolveExpression): Add better error description.
5880         
5881         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
5882         
5883 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5884
5885         Fix #74484.
5886         * attribute.cs (Attribute.GetAttributeUsage): Resolve
5887         AttributeUsageAttribute in the emitcontext of the attribute class,
5888         not in the emitcontext of the attributable entity it was attached to.
5889         * cs-parser.jay: Use 'current_class', not 'current_container',
5890         when creating a GlobalAttribute.
5891
5892 2005-04-08  Alp Toker  <alp@atoker.com>
5893
5894         * pending.cs: The fix to #58413 failed to compile methods implementing
5895         interfaces with/without params modifiers and vice versa, even though
5896         params modifiers aren't part of the signature. Make the modifier check
5897         less strict as in csc.
5898
5899 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
5900             Anoob V E  <projectmonokochi@rediffmail.com>
5901             Harilal P R  <projectmonokochi@rediffmail.com>
5902
5903         Fix #58413.
5904         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
5905         modifiers of pending methods.
5906         (PendingImplementation.PendingImplementation): Initialize it.
5907         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
5908         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
5909         with ParameterData.  Add check for modifiers.
5910         * class.cs (MethodData.Define): Update to changes.
5911
5912 2005-04-07  Raja R Harinath  <rharinath@novell.com>
5913
5914         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
5915
5916 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
5917
5918         * class.cs (PropertyMethod.Define): Check private accessor in abstract
5919         property.
5920         
5921         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
5922         
5923         * rootcontext.cs,
5924         * typemanager.cs: Registered RequiredAttributeAttribute.
5925         
5926 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
5927
5928         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
5929         Warning CS0169 is back at level 3.
5930         (IMethodData.SetMemberIsUsed): New method.
5931         
5932         * decl.cs (IsUsed): New value; moved from FieldBase.Status
5933         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
5934         
5935         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
5936
5937         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
5938         contants.
5939         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
5940         is used.
5941         
5942         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
5943         is used.
5944         
5945         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
5946         to avoid the problems with nested types.
5947
5948 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
5949             Anoob V.E  <projectmonokochi@rediffmail.com>
5950             Harilal P.R  <projectmonokochi@rediffmail.com>
5951             Raja R Harinath  <rharinath@novell.com>
5952
5953         Fix #73820.
5954         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
5955         attribute.
5956         * typemanager (GetConstructor): Make public.
5957
5958 2005-04-05  John Luke  <john.luke@gmail.com>
5959             Raja R Harinath  <rharinath@novell.com>
5960
5961         Fix #62232.
5962         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
5963         struct too.  Return false quicker in a few cases.
5964         (VerifyUnManaged): Use it.
5965
5966 2005-04-05  Raja R Harinath  <rharinath@novell.com>
5967
5968         Fix #74041.
5969         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
5970         not 'unreachable_seen'.
5971
5972 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
5973
5974         * attribute.cs (Attribute.GetValue): Removed unused.
5975         
5976         * codegen.cs (CodeGen.TrimExt): Removed unused.
5977         
5978         * cs-parser.jay (output): Removed unused.
5979         
5980         * cs-tokenizer.cs (hex_digits): Removed unused.
5981         
5982         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
5983         
5984         * expression.cs (Indirection.LoadExprValue): Removed unused.
5985         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
5986         
5987         * iterators.cs (Iterator.param_types): Removed unused.
5988         
5989         * statement.cs (Goto.block): Removed unused.
5990         (ToplevelBlock.did): Removed unused.
5991         (Switch.ResolveConstantSwitch): Removed unused.
5992
5993 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
5994
5995         * rootcontext.cs: Allow mcs to bootstrap with the compilation
5996         resetting thingy.
5997
5998 2005-04-19  Martin Baulig  <martin@ximian.com>
5999
6000         Merged r42462 from MCS and made it work for GMCS.
6001
6002         * class.cs (MethodCore.ds): Moved this field to `MemberBase'.
6003
6004         * generic.cs (GenericMethod.Define): Removed `return_type' argument.
6005
6006 2005-04-01  Raja R Harinath  <rharinath@novell.com>
6007
6008         Fix #74232 and cs0208-3.cs.
6009         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
6010         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
6011         unmanaged type.  Don't use FieldBuilders when 't' is a
6012         TypeBuilder.  Use ModFlags and MemberType fields.
6013         * class.cs (MemberBase.member_type): Rename from MemberType.
6014         (MemberBase.MemberType): New property.  Determines member_type on
6015         demand.
6016         (MemberBase.DoDefine): Don't initialize MemberType here.
6017         (FieldMember.Define): Likewise.
6018
6019 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
6020
6021         Fix #74241
6022         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
6023         Attributes are emitted there.
6024         
6025 2005-04-01  Raja R Harinath  <rharinath@novell.com>
6026
6027         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
6028         keyword in 'partial enum' too.
6029         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
6030         is not allowed).
6031         Report from Kamil Skalski <nazgul@omega.pl>.
6032
6033         Fix #74309.
6034         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
6035         have partial containers too.
6036
6037         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
6038         in block' checks to Block.CheckInvariantMeaningInBlock.
6039         * statement.cs (Block.GetKnownVariableInfo): Make private.
6040         (Block.IsVariableUsedInChildBlock): Remove.
6041         (Block.IsVariableUsedInBlock): Likewise.
6042         (Block.CheckInvariantMeaningInBlock): New.  Show location of
6043         conflicting declaration.
6044         (Block.AddVariable): Make error messages less long-winded and more
6045         specific.  Show location of conflicting declaration.
6046         * parameter.cs (Parameters.Location): New readonly property.
6047
6048 2005-03-31  Raja R Harinath  <rharinath@novell.com>
6049
6050         Clean up semantics of invoking ResolveMemberAccess.
6051         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
6052         can have an instance, ensure that we pass in a non-TypeExpression
6053         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
6054         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
6055         argument.  Update to changes and simplify.
6056         (FieldExpr.Emitinstance): Remove CS0120 check.
6057         (PropertyExpr.EmitInstance): Likewise.
6058         * expression.cs (Argument.Resolve): Likewise.
6059         (Invocation.DoResolve): Update to changes in semantics of
6060         InstanceExpression.
6061
6062 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
6063
6064         Fix #74241
6065         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
6066         customization.
6067         
6068         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
6069
6070 2005-03-31  Raja R Harinath  <rharinath@novell.com>
6071
6072         Fix difference in behaviour with commandline invocation.
6073         * driver.cs (Driver.Reset): New.
6074         (CompilerCallableEntryPoint): Call it.
6075
6076         * statement.cs (If.Resolve): Avoid spurious "uninitialized
6077         variable" warnings if the boolean expression failed to resolve.
6078
6079 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
6080
6081         * attribute.cs: Fix the union of several permissions when some of them
6082         are unrestricted (so the result isn't an unrestricted permission set).
6083         Fix #74036.
6084
6085 2005-03-30  Raja R Harinath  <rharinath@novell.com>
6086
6087         * ecore.cs (MemberExpr): New class.  Convert from interface
6088         IMemberExpr.
6089         (MemberExpr.ResolveMemberAccess): Refactor and move here from
6090         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
6091         error checks.
6092         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
6093         (MethodGroupExpr.IsExplicitImpl): Remove.
6094         (Expression.GetFieldFromEvent): Remove.
6095         (SimpleName.MemberStaticCheck): Remove.
6096         (SimpleName.DoSimpleNameResolve): Update to changes.
6097         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
6098         (MemberAccess.IdenticalNameAndTypeName): Remove.
6099         (MemberAccess.error176): Move to MemberExpr.
6100         (MemberAccess.DoResolve): Update to changes.
6101         (BaseAccess.DoResolve): Likewise.
6102
6103 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
6104
6105         C# 2.0 Conditional attribute class implementation
6106         
6107         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
6108         Analyzes class whether it has attribute which has ConditionalAttribute
6109         and its condition is not defined.
6110         
6111         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
6112         (Class.IsExcluded): New method. Search for at least one defined
6113         condition in ConditionalAttribute of attribute class.
6114
6115 2005-03-30  Raja R Harinath  <rharinath@novell.com>
6116
6117         * ecore.cs (PropertyExpr): Derive from Expression, not
6118         ExpressionStatement.
6119         (PropertyExpr.EmitStatement): Remove.
6120
6121 2005-03-29  Raja R Harinath  <rharinath@novell.com>
6122
6123         Fix #74060.
6124         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
6125         internal field "value__" of an enum be private.  The examples for
6126         "value__" that I found on MSDN all used FieldAttributes.Private.
6127
6128         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
6129         Don't mention IL method attribute names.
6130
6131         Fix #47991.  Remove a TODO.
6132         * statement.cs (Block.Toplevel): Make into a field.
6133         (Block.Parameters): Move into ToplevelBlock.
6134         (Block.known_variables): Rename from child_variable_names.
6135         (Block.Block): Remove variants that take Parameters.  Initialize
6136         'Toplevel' with the immediately surrounding toplevel block.
6137         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
6138         LocalInfo parameter.
6139         (Block.GetKnownVariableInfo): New.
6140         (Block.IsVariableNameUsedInChildBlock): Update.
6141         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
6142         the block, even though it may not be in scope.
6143         (Block.AddVariable): Remove Parameters parameter.  Use
6144         Toplevel.Parameters instead.
6145         (Block.AddConstant): Remove Parameters parameter.
6146         (Block.GetParameterReference): Update to use Toplevel.Parameters.
6147         (Block.IsParamaterReference): Likewise.
6148         (Block.IsLocalParameter): Likewise.  Simplify a lot.
6149         (ToplevelBlock.Parameters): New.  Moved from Block.
6150         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
6151         initialize Parameters to a non-null value.
6152         * cs-parser.jay: Update to changes.
6153         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
6154         simple names that mean different things in the same block.  Use
6155         Block.IsVariableNameUsedInBlock.
6156
6157 2005-03-28  Raja R Harinath  <rharinath@novell.com>
6158
6159         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
6160
6161 2005-03-26  Raja R Harinath  <harinath@acm.org>
6162
6163         Fix #73038.
6164         * assign.cs (Assign.DoResolve): When the RHS of an assignment
6165         fails to resolve, ensure that the LHS is still resolved as an
6166         lvalue.
6167
6168 2005-03-25  Raja R Harinath  <harinath@acm.org>
6169
6170         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
6171         ec.ContainerType.
6172         (Enum.current_ec): Remove.
6173         (Enum.LookupEnumValue): Remove EmitContext argument.
6174         Just uses the one created during DefineType.
6175         (Enum.FindMembers): Update.
6176         * expression.cs (MemberAccess.DoResolve): Update.
6177
6178 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
6179
6180         * assign.cs (Assign.DoResolve): Check for CS1717 when
6181         source and target are same (uses Equals).
6182
6183         * expression.cs (LocalVariableReference, ParameterReference,
6184         This): Implemented Equals, GetHashCode.
6185
6186         * statement.cs (Block.GetParameterReference): Removed useless
6187         local variable.
6188
6189 2005-03-22  Raja R Harinath  <rharinath@novell.com>
6190
6191         Fix cs0128.cs
6192         * statement.cs (Block.AddVariable): Ensure that we skip implicit
6193         blocks before deciding whether the error is cs0136 or cs0128.
6194
6195         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
6196         (using_alias_directive, using_namespace_directive): Pass
6197         MemberName, not an expression to Namespace.UsingAlias and
6198         Namespace.Using.
6199         (MakeName): Use the MemberName of the namespace.
6200         * namespace.cs (Namespace.MemberName): New.
6201         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
6202         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
6203         Likewise.
6204         * decl.cs (MemberName.Name): Make readonly.
6205         (MemberName.FromDotted): New "constructor".
6206         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
6207         (MemberCore.Name): Compute from MemberName on demand.
6208         (MemberCore.SetMemberName): Provide a way to change the
6209         MemberName.
6210         (MemberCore.AddToContainer): Don't take a fullname parameter.
6211         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
6212         fully qualified name of the container to the member name.
6213         (TypeContainer.AddToTypeContainer): Use a fully qualified name
6214         only if the type is a member of the root container.
6215         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
6216         MemberName.Left rather than searching for an embedded ".".
6217         (PartialContainer.CreatePart): Update to changes in RootContext.
6218         (MemberBase.ShortName): Turn into a property.  Use
6219         MemberCore.SetMemberName.
6220         (MemberBase.ExplicitInterfaceName): Remove.
6221         (MemberBase.UpdateMemberName): Remove.
6222         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
6223         (PropertyBase.SetMemberName): New override.
6224         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
6225         (Tree.GetDecl): New.
6226         (Tree.AllDecls): Rename from Decls.
6227         * attribute.cs, enum.cs, report.cs: Update to changes.
6228         * driver.cs (MainDriver): Use MemberName.FromDotted on
6229         RootContext.MainClass.
6230
6231 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
6232
6233         * class.cs (FixedField.Define): Check for CS1664 and more sanity
6234         checks.
6235
6236         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
6237
6238 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
6239
6240         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
6241         property accessor modifiers.
6242
6243         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
6244         fixed buffer attribute (CS1716).
6245         (PropertyMethod.HasCustomAccessModifier): When property accessor
6246         has custom modifier.
6247
6248         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
6249         modifiers.
6250         (PropertyExpr.DoResolveLValue): Add CS0272.
6251
6252 2005-03-17  Miguel de Icaza  <miguel@novell.com>
6253
6254         * convert.cs: When converting to a pointer, use the proper Conv.U
6255         or Conv.I depending on the source data type.
6256
6257         * cs-tokenizer.cs: Make the size for large decimal constants,
6258         fixes #72957.
6259
6260 2005-03-17  Martin Baulig  <martin@ximian.com>
6261
6262         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
6263         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
6264
6265 2005-03-17  Martin Baulig  <martin@ximian.com>
6266
6267         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
6268         to bool so we can return an error condition.
6269         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
6270         returned an error.
6271
6272 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
6273
6274         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
6275         attributes.
6276
6277 2005-03-16  Raja R Harinath  <rharinath@novell.com>
6278
6279         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
6280         Refactor to avoid traversing the list of assemblies, and to avoid
6281         string concatenation.
6282         * typemanager.cs (guid_attr_type): Remove.
6283         (negative_hits, pointers, references): Remove hashes.
6284         (type_hash): New.
6285         (GetConstructedType): New.  Uses type_hash to handle constructed
6286         types (arrays, references, pointers).
6287         (GetReferenceType, GetPointerType): Use it.
6288         (GetNestedType): New.  Uses type_hash to handle nested types of
6289         reflected types.
6290         (LookupType, LookupTypeDirect): Remove.
6291         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
6292         'types' hash and LookupTypeReflection directly.
6293         (params_string, params_object): Use GetConstructedType.
6294         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
6295         top-level types.
6296         (Namespace.Lookup): Use cached_types.
6297         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
6298         provided by old TypeManager.LookupType.
6299         * rootcontext.cs (MakeFQN): Remove.
6300         * decl.cs (DeclSpace.MakeFQN): Likewise.
6301         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
6302         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
6303         TypeManager.GetConstructedType.
6304         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
6305
6306 2005-04-16  Zoltan Varga  <vargaz@freemail.hu>
6307
6308         * cs-parser.jay: Fix build.
6309
6310 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
6311
6312         * class.cs (TypeContainer.CircularDepException) New nested
6313         (MethodCore.CheckBase): Report CS1715 for properties and indexers.
6314
6315         * cs-parser.jay: Reports CS1527 for any namespace element.
6316
6317         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
6318         Added CS0407.
6319
6320         * expression.cs (ParameterReference.IsAssigned): Changed error to
6321         CS0269.
6322         (Error_WrongNumArguments): Moved CS0245 detection here.
6323
6324         * statement.cs (Return.Resolve): Add CS1622 report.
6325
6326 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
6327
6328         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
6329
6330 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
6331
6332         * attribute.cs expression.cs: Get rid of some allocations.
6333
6334 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
6335
6336         * doc.cs : just eliminate the latest change.
6337
6338 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6339
6340         * doc.cs : commented out the latest change. It breaks xml-030.cs
6341
6342 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6343
6344         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
6345           fail. So invoke CreateType() in FindDocumentedType().
6346
6347 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6348
6349         * cs-tokenizer.cs : added IsKeyword().
6350         * doc.cs : Detect keyword incorrectly used as identifier.
6351           Allow identifiers prefixed by @.
6352
6353 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
6354
6355         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
6356         It caused exception in namespace resolving (again!).
6357         
6358         * class.cs (Class.ctor): Removed exit.
6359         (PropertyMethod.ctor): ditto.
6360         
6361         * codegen.cs (Codegen.Reset): Reset static data.
6362         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
6363         
6364         * cs-tokenizer.cs (Cleanup): Removed.
6365         
6366         * driver.cs (GetSystemDir): Rewrote to one line command.
6367         It caused problem with unloaded dynamic modules.
6368         (UnixParseOption): Removed Exit.
6369         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
6370         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
6371         Now can be mcs used as library.
6372         
6373         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
6374         empty location.
6375         
6376         * location.cs (Reset): Reset static data.
6377         
6378         * namespace.cs (Reset): Reset static data.
6379         
6380         * report.cs (Report.Reset): Reset static data.
6381         
6382         * rootcontext.cs (RootContext.Reset): Reset static data.
6383         
6384         * tree.cs (RootTypes.ctor): Use Location.Null
6385         
6386         * typemanager.cs (TypeManager.Reset): Reset static data.
6387         (CoreLookupType): Removed Exit.
6388         (TypeHandle.Reset): Reset static data.
6389         
6390 2005-03-10  Raja R Harinath  <rharinath@novell.com>
6391
6392         Fix #73516.
6393         * typemanager.cs (ComputeNamespaces): Import namespaces from
6394         referenced modules too.
6395
6396 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6397
6398         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
6399         than '.'.
6400
6401 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6402
6403         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
6404         enclosing DeclSpace.  This ensures that a name-lookup populates
6405         more caches and there are fewer 'TypeExpression's.  Carve out
6406         nested type lookup into ...
6407         (LookupNestedTypeInHierarchy): ... this.
6408
6409 2005-04-15  Martin Baulig  <martin@ximian.com>
6410
6411         Merged r41590 from MCS and make it work in the generics land.
6412
6413         * generic.cs (TypeParameter.UpdateConstraints): Removed the
6414         `check' argument.
6415
6416         * class.cs (PartialContainer.UpdateConstraints): Removed.
6417         (PartialContainer.CheckConstraints): Removed.
6418         (PartialContainer.SetParameterInfo): Store the constraints here.
6419         (PartialContainer.DefineTypeParameters): New public method;
6420         resolve the type parameter's constraints here.  Note that the
6421         PartialContainer doesn't have an EmitContext anymore, so we must
6422         do this in the ClassPart.
6423
6424 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6425
6426         Clean up a few partial-class semantics.  
6427         Fixes test-357.cs and cs1618-2.cs.
6428         * cs-parser.jay (struct_declaration): Use 'current_class' as
6429         parent of newly-created struct.  Remove call to Register ().
6430         Use 'pop_current_class' to complete handing the current struct.
6431         (interface_declaration): Likewise.
6432         (class_declaration): Likewise.
6433         (enum_declaration): Use 'current_class' as parent of newly created
6434         enum.
6435         (delegate_declaration): Likewise.
6436         (pop_current_class): New function.  This is used to handle closing
6437         up the 'current_class' and 'current_container', and pointing them
6438         to the enclosing class/container.
6439         (CSharpParser): Initialize 'current_class' too.
6440         * decl.cs (MemberCore): Add check for invariant: a partial
6441         container is not a parsed entity, and thus does not enclose any
6442         parsed members.
6443         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
6444         (DeclSpace.BaseTypeExpr): Use it.
6445         (DeclSpace.LookupType): Add check for invariant.
6446         * class.cs (TypeContainer): Add check for invariant: a nested
6447         class should have the same NamespaceEntry as its enclosing class.
6448         (TypeContainer.EmitFieldInitializers): Make virtual.
6449         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
6450         MemberCore.
6451         (TypeContainer.Register): Remove.
6452         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
6453         null.  Use TypeResolveEmitContext for resolving base types and
6454         interfaces.  Move initialization of Parts.TypeBuilder here from
6455         ...
6456         (TypeContainer.DefineNestedTypes): ... here.
6457         (PartialContainer): Take a Namespace not a NamespaceEntry.
6458         (PartialContainer.Create): Don't use Register.  Call the
6459         appropriate Add... function directly.
6460         (ClassPart): Take both the PartialContainer and the enclosing
6461         class as constructor arguments.
6462         (ClassPart.EmitFieldInitializers): Override.
6463         (ClassPart.PartFindNestedTypes): Remove.
6464         (FieldBase.GetInitializerExpression): Resolve the initializer
6465         expression in the emit context of the enclosing class.
6466         * tree.cs (RootTypes): Remove Register ().
6467         
6468 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
6469
6470         * cs-parser.jay: Removed CS0134.
6471         
6472         * driver.cs: Removed CS1901.
6473         
6474         * expression.cs (SizeOf.DoResolve): Don't report CS0233
6475         for predefined types.
6476
6477 2005-03-07  Duncan Mak  <duncan@novell.com>
6478
6479         * codegen.cs (Save):  Catch UnauthorizedAccessException as
6480         well. Fixes bug #73454.
6481
6482 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
6483
6484         * cs-tokenizer.cs (xtoken): Add CS1035.
6485         
6486         * class.cs (MethodData.Define): Add CS0683.
6487         (FieldMember.ctor): Add CS0681.
6488
6489 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6490
6491         * ecore.cs (SimpleName.DoResolve): Rename from
6492         SimpleName.DoResolveAllowStatic.
6493         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
6494         Pass 'intermediate' flag to MemberStaticCheck.
6495         (SimpleName.MemberStaticCheck): Skip "static check" only in case
6496         of "intermediate" lookups via MemberAccess.
6497         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
6498         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
6499
6500 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6501
6502         Fix #73394.
6503         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
6504         slipped in because of variable names that are identical to a
6505         builtin type's BCL equivalent ('string String;', 'int Int32;').
6506         (PropertyExpr.EmitInstance): Likewise.
6507
6508 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
6509
6510         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
6511         
6512         * report.cs (warning_ignore_table): Made public.
6513
6514 2005-03-04  Raja R Harinath  <rharinath@novell.com>
6515
6516         Fix #73282.
6517         * class.cs (MethodData.Emit): Pass 'container' to
6518         container.GetObsoleteAttribute instead of 'container.Parent'.
6519
6520 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
6521
6522         * cs-parser.jay: Add 1534 error test.
6523
6524         * iterators.cs (Yield.CheckContext): Add error 1629.
6525         (Iterator.ctor): Save unsafe modifier.
6526         (MoveNextMethod.DoEmit): Restore unsafe context.
6527
6528         * namespace.cs (UsingAlias): Better error message.
6529
6530 2005-03-03  Dan Winship  <danw@novell.com>
6531
6532         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
6533         the warning message [#73219]
6534
6535 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6536
6537         Fix compile with MCS 1.0.0.0.
6538         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
6539         w_restore to not depend on string constant folding.
6540
6541 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6542
6543         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
6544         CS0246 check to users who passed 'silent = false'.
6545         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
6546         check.
6547         (SimpleName.SimpleNameResolve): Update.
6548         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
6549         (MemberAccess.IdenticalNameAndTypeName): Update.
6550         * doc.cs (FindDocumentedTypeNonArray): Update.
6551
6552 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
6553
6554         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
6555         * parameters.cs (ComputeAndDefineParameters): Remove.
6556         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
6557         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
6558         Use GetParameterInfo.
6559
6560 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
6561
6562         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
6563
6564 2005-03-02  Raja R Harinath  <rharinath@novell.com>
6565
6566         Unify DeclSpace.LookupType and DeclSpace.FindType.
6567         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
6568         is in charge of defining nested types on demand.
6569         (DeclSpace.LookupType): Use it when the current_type is a
6570         TypeBuilder.  Use LookupTypeDirect for reflected types.
6571         (DeclSpace.FindType): Remove.
6572         (DeclSpace.LookupInterfaceOrClass): Likewise.
6573         (DeclSpace.DefineTypeAndParents): Likewise.
6574         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
6575         DeclSpace.LookupType.
6576         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
6577         * typemanager.cs (LookupType): Simplify.
6578         (AddUserType): Remove type from negative_hits.
6579         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
6580         * class.cs (TypeContainer.FindMembers): Move handling of nested
6581         types ...
6582         (TypeContainer.FindMembers_NestedTypes): ... here.
6583         (TypeContainer.FindNestedType): Implement override.
6584         (ClassPart.FindNestedType): Delegate to PartialContainer.
6585         (ClassPart.PartFindNestedType): Looks up the nested types of the
6586         part alone.
6587
6588 2005-04-14  Martin Baulig  <martin@ximian.com>
6589
6590         * generic.cs (ConstructedType): Moved all the type lookup and
6591         nested class logic into SimpleName.
6592         (ConstructedType.ResolveConstructedType): Our underlying type is
6593         already fully resolved; all the type lookup stuff is in
6594         SimpleName.
6595
6596         * ecore.cs (SimpleName.ResolveAsTypeStep): Resolve nested
6597         constructed types here instead of in ConstructedType.
6598
6599         * decl.cs (MemberName.GetTypeExpression): Always create a
6600         SimpleName, not a ConstructedType.
6601         (DeclSpace.ResolveNestedType): Removed; this is now in SimpleName.
6602
6603 2005-03-02  Martin Baulig  <martin@ximian.com>
6604
6605         * class.cs (TypeContainer.DoDefineMembers): We also need a default
6606         static constructor in static classes.
6607
6608 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
6609
6610         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
6611         sizeParamIndex is not specified.
6612
6613 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
6614
6615         Fix #73117
6616         * report.cs (WarningMessage.IsEnabled): Missing null check.
6617
6618 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6619
6620         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
6621         in the fields and not in the properties.
6622
6623 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
6624
6625         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
6626         fields as well.
6627
6628 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6629
6630         * attribute.cs: Small refactoring (improved robustness).
6631         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
6632         (ValidateGuid): Removed.
6633         (Resolve): Removed referenced to above mentioned.
6634         (GetAttributeUsage): Made private and changed to work without
6635         class assistance.
6636         (GetIndexerAttributeValue): Don't crash.
6637         (GetConditionalAttributeValue): Ditto.
6638         (GetClsCompliantAttributeValue): Ditto.
6639         (ExtractSecurityPermissionSet): All attributes exceptions are
6640         error 648.
6641         (GetPropertyValue): New helper.
6642         (GetMethodImplOptions): New method.
6643         (DefinePInvokeMethod): Reuse common code. Implemented handling of
6644         some missing properties.
6645         
6646         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
6647         (Method.ApplyAttributeBuilder): Updated.
6648         
6649         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
6650         exception.
6651
6652 2005-02-28  Raja R Harinath  <rharinath@novell.com>
6653
6654         Fix #73052.
6655         * report.cs (Report.SymbolRelatedToPreviousError): Handle
6656         non-simple types (array, pointer, reference).
6657
6658 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6659
6660         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
6661
6662         * class.cs (MethodCore.IsDuplicateImplementation): Special error
6663         for operators.
6664         (Method.CheckBase): Catch wrong destructor here.
6665         (MethodData.Define): Add errors 550, 668.
6666
6667         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
6668
6669         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
6670
6671         * pending.cs (VerifyPendingMethods): Add error 551.
6672
6673         * typemanager.cs (CSharpName): Next error report helper.
6674
6675 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
6676
6677         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
6678         attributes. Removed useless attribute double check.
6679         It saves almost 2MBs for corlib.
6680
6681 2005-02-25  Raja R Harinath  <rharinath@novell.com>
6682
6683         Fix #72924.
6684         * statement.cs (ExpressionStatement.Resolve): Make robust to being
6685         called twice in case of error.
6686
6687 2005-02-23  Chris Toshok  <toshok@ximian.com>
6688
6689         Fix compiler portions of #72827.
6690         * statement.cs (Block.Emit): call Begin/EndScope on the
6691         EmitContext instead of the ILGenerator.
6692
6693         * codegen.cs (EmitContext.BeginScope): new method, call
6694         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
6695         we have one.)
6696         (EmitContext.BeginScope): same, but EndScope and CloseScope
6697
6698         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
6699         offset and call the superclass's OpenScope(int) with it.
6700         (SymbolWriter.CloseScope): get the current il
6701         offset and call superclass's CloseScope(int) with it.
6702
6703 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
6704
6705         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
6706         CS1677 for out and ref as well.
6707
6708         * class.cs (Method.Define): Add error CS1599 detection.
6709         
6710         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
6711         
6712         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
6713         
6714         * delegate.cs (Delegate.Define): Add error CS1599 detection.
6715         
6716         * support.cs.cs (ModifierDesc): New helper method.
6717
6718 2005-02-23  Raja R Harinath  <rharinath@novell.com>
6719             Abin Thomas  <projectmonokochi@rediffmail.com>
6720             Anoob V E  <projectmonokochi@rediffmail.com>
6721             Harilal P R  <projectmonokochi@rediffmail.com>
6722
6723         Fix #57851, #72718.
6724         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
6725         MemberLookup (used for error reporting) actually returns a result.
6726         Fix error report number (122, not 112).
6727
6728 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
6729             Anoob V E  <projectmonokochi@rediffmail.com>
6730             Harilal P R  <projectmonokochi@rediffmail.com>
6731
6732         Fix #71134.
6733         * pending.cs (PendingImplementation.GetAbstractMethods):
6734         Find NonPublic members too.
6735
6736 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
6737
6738         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
6739         Fixed error 217.
6740         
6741         * class.cs (MethodCore.CheckMethodAgainstBase):
6742         Add error 239 report.
6743
6744 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6745
6746         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6747         
6748         * class.cs (Operator.Define): Add error 217 report.
6749         
6750 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6751
6752         Fix #68955.
6753         * expression.cs (Invocation.IsApplicable): Make public.
6754         (Invocation.IsParamsMethodApplicable): Likewise.
6755         * delegate.cs (Delegate.VerifyApplicability): Don't use
6756         Invocation.VerifyArgumentCompat for parameter applicability
6757         testing.  Use Invocation.IsApplicable and
6758         Invocation.IsParamsMethodApplicable.
6759
6760 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6761
6762         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6763         
6764         * class.cs (Operator.Define): Add error 217 report.
6765         
6766 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6767
6768         * namespace.cs (UsingEntry.Resolve): Undo change below.
6769
6770 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6771
6772         Fix #72756.
6773         * ecore.cs (Expression.MemberLookupFailed): Add argument to
6774         disable the error message when the extended MemberLookup also
6775         fails.
6776         (Expression.MemberLookupFinal): Update.
6777         (SimpleName.DoSimpleNameResolve): Update.
6778         * expression.cs (MemberAccess.ResolveNamespaceOrType):
6779         Don't use MemberLookupFinal.
6780         (New.DoResolve): Update.
6781         (BaseAccess.CommonResolve): Update.
6782
6783 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6784
6785         Fix #72732.
6786         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
6787         occured previously, don't resolve again.
6788
6789 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6790
6791         Fix #69949
6792         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
6793         argument. Call ResolveAttributeUsage for unresolved.
6794         when types doesn't match ctor arguments.
6795         
6796         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
6797         for nested attribute classes.
6798         (Class.attribute_usage): Removed.
6799         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
6800         for attribute class.
6801         
6802         * ecore.cs (IsAttribute): Removed.
6803         
6804         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
6805         
6806         * rootcontext.cs (RegisterAttribute): Removed, attributes are
6807         now normal types.
6808         (attribute_types): Removed.
6809         (EmitCode): Global attributes are emited as the latest.
6810
6811 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
6812
6813         * class.cs (EmitFieldInitializers): Don't emit field initializer
6814         for default values when optimilization is on.
6815         
6816         * constant.cs (Constant.IsDefaultValue): New property.
6817         
6818         * driver.cs: Add /optimize handling.
6819         
6820         * constant.cs,
6821         * ecore.cs,
6822         * literal.cs: Implement new IsDefaultValue property.
6823         
6824         * rootcontext.cs (Optimize): New field, holds /optimize option.
6825
6826 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6827
6828         Fix crasher in re-opened #72347.
6829         * namespace.cs (Namespace.Lookup): Return null if
6830         DeclSpace.DefineType returns null.
6831
6832         Fix #72678.
6833         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
6834
6835 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6836
6837         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
6838         now returns null if it cannot resolve to an lvalue.
6839         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
6840         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
6841         returned null.  Remove check for SimpleName.
6842         (EventExpr.DoResolveLValue): New.
6843         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
6844         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
6845         error from ...
6846         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
6847         avoid CS0131 error.
6848         (Unary.ResolveOperator): Move CS0211 check ...
6849         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
6850         CS0131 error.
6851         (Unary.DoResolveLValue): Simplify.
6852         (AddressOf.DoResolveLValue): New.
6853         (ArrayAccess.DoResolveLValue): New.
6854
6855 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
6856
6857         * attribute.cs (Attribute.Resolve): Add arguments casting for
6858         when types doesn't match ctor arguments.
6859
6860 2005-02-16  Raja R Harinath  <rharinath@novell.com>
6861
6862         Fix parts of #63202.
6863         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
6864         lookup of operator in base type.  Ensure that all checks happen
6865         when the operator resolves to an "op_..." method.
6866
6867 2005-02-15  Raja R Harinath  <rharinath@novell.com>
6868
6869         Fix #71992.
6870         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
6871         'ignore_cs0104' parameter.  Pass it to ...
6872         (NamespaceEntry.Lookup): ... this.
6873         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
6874         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
6875         (TypeLookupExpression.DoResolveAsTypeStep): Update.
6876         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
6877         Update.  Request that cs0104 errors be ignored.
6878         (ComposedCast.ResolveAsTypeStep): Update.
6879
6880 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6881
6882         Fix #59209.
6883         * expression.cs (Invocation.BetterFunction): Remove support for
6884         comparing virtual functions and their overrides.
6885         (Invocation.IsOverride): New.
6886         (Invocation.OverloadResolve): Don't consider 'override' functions
6887         during candidate selection.  Store them in a lookaside list.
6888         If the selected method is a 'virtual' function, use the list to
6889         find any overrides that are closer to the LHS type.
6890
6891 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
6892
6893         * expression.cs (New.DoResolve): Add complex core type reduction.
6894         (New.Constantify): Converts complex core type syntax like 'new int ()'
6895         to simple constant.
6896         
6897 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6898
6899         * decl.cs (EntryType.EntryType): New constructor to create an
6900         updated copy of a cache entry.
6901         (MemberCache.AddMethods): Use it.
6902         (MemberCache.ClearDeclaredOnly): Remove.
6903         (MemberCache.MemberCache): Update.
6904
6905 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6906
6907         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
6908         variable.  This one is represents the actual low-level declaration
6909         of the method, as opposed to the semantic level `IsStatic'.   
6910
6911         An anonymous method which is hosted into a static method might be
6912         actually an instance method.  IsStatic would reflect the
6913         container, while MethodIsStatic represents the actual code
6914         generated.
6915
6916         * expression.cs (ParameterReference): Use the new MethodIsStatic
6917         instead of IsStatic.
6918
6919         * anonymous.cs (AnonymousMethod.Compatible): Pass the
6920         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
6921         set on the current EmitContext. 
6922
6923         * expression.cs (Cast): Overload DoResolveLValue so we can pass
6924         resolve our casted expression as an LValue.  This triggers the
6925         proper LValue processing that is later required by Assign.
6926
6927         This fixes 72347.
6928
6929         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
6930
6931 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
6932
6933         C# 2.0 Fixed buffer implementation
6934
6935         * anonymous.cs: Update after RegisterHelperClass renaming.
6936
6937         * attribute.cs (AttributeTester.fixed_buffer_cache):
6938         Cache of external fixed buffers.
6939         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
6940         implementation if field is fixed buffer else null.
6941
6942         * class.cs
6943         (TypeContainer.AddField): Accept FieldMember instead of Field.
6944         (FieldBase.IsFieldClsCompliant): Extracted code from
6945         VerifyClsCompliance descendant customization.
6946         (FixedField): New class handles fixed buffer fields.
6947         (FixedFieldExternal): Keeps information about imported fixed
6948         buffer.
6949         (IFixedField): Make access to internal or external fixed buffer
6950         same.
6951
6952         * cs-parser.jay: Add fixed buffer parsing.
6953
6954         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
6955         buffer.
6956
6957         * expression.cs (Indirection): Extended implementation to accept
6958         fixed buffer field.
6959         (PointerArithmetic.Emit): Get element from fixed buffer as well.
6960         (ElementAccess.MakePointerAccess): Get type as parameter.
6961         (DoResolve): Add fixed buffer field expression conversion.
6962         (DoResolveLValue): Ditto.
6963         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
6964         (ArrayPtr): Derives from FixedBufferPtr.
6965         (ArrayPtr.Emit): Add extra emit for array elements.
6966
6967         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
6968
6969         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
6970         for compiler generated types.
6971         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
6972
6973         * statement.cs (Fixed): Refactored to be easier add fixed buffer
6974         and consume less memory.
6975         (Fixed.Resolve): Add fixed buffer case.
6976
6977         * typemanager.cs (compiler_generated_attr_ctor,
6978         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
6979         (HasElementType): Add our own implementation to work on every
6980         runtime.
6981
6982 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6983
6984         * anonymous.cs (CaptureContext): Track whether `this' has been
6985         referenced.   
6986
6987         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
6988         only captured `this' if it was implicitly done (instance
6989         methods/variables were used). 
6990
6991         * codegen.cs (EmitContext.CaptureThis): New method to flag that
6992         `this' must be captured.
6993
6994 2005-01-30  Miguel de Icaza  <miguel@novell.com>
6995  
6996         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
6997         is null it means that there has been no need to capture anything,
6998         so we just create a sibling.
6999
7000         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
7001
7002         Just a partial fix.  The other half is fairly elusive.
7003         
7004 2005-02-10  Raja R Harinath  <rharinath@novell.com>
7005
7006         Fix #52586, cs0121-4.cs.
7007         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
7008         and return a hashtable.
7009         (MemberCache.ClearDeclaredOnly): New.
7010         (MemberCache.MemberCache): Update to change.  Make a deep copy of
7011         the method_hash of a base type too.
7012         (MemberCache.AddMethods): Adapt to having a deep copy of the base
7013         type methods.  Overwrite entries with the same MethodHandle so
7014         that the ReflectedType is correct.  The process leaves in base
7015         virtual functions and their overrides as distinct entries.
7016         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
7017         matters since it was boxed in a ArrayList before.
7018         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
7019         modifier.
7020         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
7021         case of a virtual function and its override (choose the overload
7022         as better).
7023         (Invocation.OverloadResolve): Avoid 'override' members during
7024         'applicable_type' calculation.
7025
7026 2005-03-28  Raja R Harinath  <rharinath@novell.com>
7027
7028         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
7029         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
7030         GetTypeHandle.  It is possible for a reflected type to derive from
7031         a TypeBuilder (e.g., int[] derives from the TypeBuilder
7032         System.Array during mscorlib compilation).
7033         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
7034         contain a method_hash, don't create one either.  Don't create a
7035         deep copy of the base cache's method_hash.
7036         (MemberCache.SetupCache): Rename back from DeepCopy.
7037         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
7038         already initialized.  If we see an override function, add its
7039         underlying base virtual function to the member_hash too.
7040
7041 2005-02-09  Raja R Harinath  <rharinath@novell.com>
7042
7043         Combine two near-redundant caches.
7044         * typemanager.cs (method_params): Rename from method_internal_params.
7045         (TypeManager.GetParameterData): New.  Replace
7046         Invocation.GetParameterData.
7047         (TypeManager.LookupParametersByBuilder): Remove.
7048         * expression.cs (Invocation.method_parameter_cache): Remove.
7049         (Invocation.GetParameterData): Remove.
7050         Update to changes.
7051         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
7052         Update to changes.
7053
7054 2005-02-08  Raja R Harinath  <rharinath@novell.com>
7055
7056         Fix #72015.
7057         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
7058         TypeManager.multicast_delegate_type is null, resolve it by looking
7059         up "System.MulticastDelegate".
7060         * rootcontext.cs (RootContext.ResolveCore): Simplify.
7061
7062 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
7063             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
7064             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
7065
7066         Fix cs0164.cs.
7067         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
7068         (LabeledStatement.AddReference): New.  Set 'referenced'.
7069         (Goto.Resolve): Use it.
7070
7071 2005-02-05  John Luke  <john.luke@gmail.com>
7072
7073         * driver.cs: remove duplicate -doc line in Usage ()
7074
7075 2005-02-04  Raja R Harinath  <rharinath@novell.com>
7076
7077         * location.cs (Location.AddFile): Fix CS2002 error report.
7078
7079 2005-02-02  Martin Baulig  <martin@ximian.com>
7080
7081         * delegate.cs (Delegate.DefineType): Report an internal error if
7082         TypeManager.multicast_delegate_type is null.  See bug #72015 for
7083         details.        
7084
7085 2005-02-02  Raja R Harinath  <rharinath@novell.com>
7086
7087         Fix a crasher in a variant of #31984.
7088         * const.cs (Constant.CheckBase): New override that defers the
7089         new-or-override check in case the base type hasn't been populated
7090         yet.
7091         (Constant.Define): Ensure the new-or-override check is performed.
7092
7093 2005-02-01  Duncan Mak  <duncan@ximian.com>
7094
7095         * const.cs (LookupConstantValue): Check that `ce' is not null
7096         before calling GetValue ().
7097
7098 2005-02-01  Raja R Harinath  <rharinath@novell.com>
7099
7100         Fix test-334.cs (#69519).
7101         * cs-parser.jay (using_alias_directive): Pass in an expression to
7102         NamespaceEntry.UsingAlias.
7103         (using_namespace_directive): Pass in an expression to
7104         NamespaceEntry.Using.
7105         (namespace_name): Don't flatten to a string.
7106         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
7107         (NamespaceEntry.AliasEntry.Resolve): Lookup using
7108         ResolveAsTypeStep.
7109         (NamespaceEntry.UsingEntry): Likewise.
7110         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
7111         changes.
7112         (NamespaceEntry.LookupForUsing): Remove.
7113         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
7114         names.
7115         (NamespaceEntry.Lookup): Remove support for dotted names.
7116
7117 2005-02-01  Raja R Harinath  <rharinath@novell.com>
7118
7119         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
7120         split into two.
7121         (NamespaceEntry.ImplicitParent): Compute on demand.
7122         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
7123         parallels the current.
7124         (NamespaceEntry.LookupForUsing): Use it.
7125         (NamespaceEntry.Lookup): If the current namespace-entry is
7126         implicit, don't search aliases and using tables.
7127
7128 2005-02-01  Raja R Harinath  <rharinath@novell.com>
7129
7130         Fix #31984.
7131         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
7132         BaseCache here.
7133         (TypeContainer.BaseCache): Compute on demand.
7134         (TypeContainer.FindMembers): Define constants and types if they're
7135         not already created.
7136         (FieldMember.Define): Move resetting of ec.InUnsafe before error
7137         check.
7138         * const.cs (Constant.Define): Make idempotent.
7139
7140 2005-01-29  Miguel de Icaza  <miguel@novell.com>
7141
7142         * pending.cs: Produce better code (no nops produced by using Ldarg
7143         + value).
7144         
7145         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
7146         i - 1' it should be arg + 1.
7147
7148         Fixes bug #71819.
7149
7150 2005-01-28  Raja R Harinath  <rharinath@novell.com>
7151
7152         * attribute.cs (Attribute.CheckAttributeType): Make private
7153         non-virtual.
7154         (Attribute.ResolveType): Make virtual.
7155         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
7156         handling of RootContext.Tree.Types.
7157
7158 2005-01-27  Raja R Harinath  <rharinath@novell.com>
7159
7160         Update attribute-handling to use the SimpleName/MemberAccess
7161         mechanisms.
7162         * cs-parser.jay (attribute): Pass in an expression to the
7163         constructors of Attribute and GlobalAttribute.
7164         * attribute.cs (Attribute): Take an expression for the name.
7165         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
7166         passed in attribute name expression.
7167         (Attribute.CheckAttributeType): Use it.
7168         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
7169         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
7170         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
7171         argument to prevent error messages if the lookup fails.
7172
7173 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
7174
7175         * expression.cs (Indirection): Implemented IVariable interface
7176         to support indirection in AddressOf operator.
7177         (PointerArithmetic.Emit): Add optimalization for case where
7178         result can be precomputed.
7179
7180 2005-01-26  Martin Baulig  <martin@ximian.com>
7181
7182         * class.cs (TypeContainer.AttributeTargets): Return the correct
7183         AttributeTargets depending on our `Kind' instead of throwing an
7184         exception; fixes #71632.
7185
7186 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
7187
7188         Fix #71257
7189         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
7190         constant members.
7191
7192 2005-03-17  Martin Baulig  <martin@ximian.com>
7193
7194         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
7195         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
7196
7197 2005-03-17  Martin Baulig  <martin@ximian.com>
7198
7199         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
7200         to bool so we can return an error condition.
7201         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
7202         returned an error.
7203
7204 2005-03-17  Martin Baulig  <martin@ximian.com>
7205
7206         * generic.cs (TypeMananager.IsIEnumerable): New public method.
7207
7208         * convert.cs (Convert.ImplicitReferenceConversion(Exists)): Allow
7209         converting from an array-type of T to `IEnumerable<T>'.
7210
7211 2005-03-16  Martin Baulig  <martin@ximian.com>
7212
7213         * generic.cs (Nullable.Unwrap): Implement IAssignMethod.
7214         (Nullable.LiftedUnaryMutator): New public class.
7215
7216         * expression.cs (UnaryMutator.DoResolve): Added support for
7217         Nullable Types.
7218
7219 2005-03-14  Martin Baulig  <martin@ximian.com>
7220
7221         * generic.cs (Nullable.NullCoalescingOperator): Implemented.
7222
7223 2005-03-14  Martin Baulig  <martin@ximian.com>
7224
7225         * generic.cs (Nullable.LiftedBinaryOperator): Added support for
7226         the comparision operators `<', `>', `<=' and `>='.
7227
7228 2005-03-13  Martin Baulig  <martin@ximian.com>
7229
7230         * generic.cs
7231         (Nullable.NullLiteral): Renamed to `Nullable.NullableLiteral' to
7232         avoid confusion with the `NullLiteral'.
7233         (Nullable.LiftedBinaryOperator): Correctly implement `==' and '!='.
7234
7235 2005-03-13  Martin Baulig  <martin@ximian.com>
7236
7237         * expression.cs (Binary.ResolveOperator): For `==' and `!=', allow
7238         comparing arbitrary types with the null literal.
7239
7240 2005-03-13  Martin Baulig  <martin@ximian.com>
7241
7242         * generic.cs (Nullable.LiftedBinaryOperator): Add support for the
7243         boolean operators '&&', '||', '&' and '|'.
7244         (Nullable.OperatorTrueOrFalse): New public class.
7245
7246         * ecore.cs (Expression.GetOperatorTrue/False): Return an `Expression'
7247         instead of a `StaticCallExpr'; added support for nullables.
7248
7249 2005-03-10  Martin Baulig  <martin@ximian.com>
7250
7251         * expression.cs
7252         (ArrayAccess.EmitDynamicInitializers): Use `etype.IsValueType'
7253         rather than `etype.IsSubclassOf (TypeManager.value_type)'.      
7254
7255 2005-03-07  Martin Baulig  <martin@ximian.com>
7256
7257         * generic.cs (Nullable.Unwrap): Implement IMemoryLocation and make
7258         it work if `expr' is not an IMemoryLocation.
7259         (Nullable.Lifted): Implement IMemoryLocation.
7260         (Nullable.LiftedConversion.ResolveUnderlying): Use the correct
7261         target type.
7262
7263 2005-03-05  Martin Baulig  <martin@ximian.com>
7264
7265         * generic.cs (Nullable.Unwrap, Wrap): New protected classes.
7266         (Nullable.Lifted): New abstract class; rewrote the lifted conversions.
7267         (Nullable): Added support for lifted unary and binary operators.
7268
7269         * expression.cs (Unary.DoResolve): Added support for nullable types.
7270         (Binary.DoResolve): Likewise.
7271         (Conditional.DoResolve): Likewise.
7272
7273 2005-03-02  Martin Baulig  <martin@ximian.com>
7274
7275         * decl.cs (DeclSpace.SetParameterInfo): Make this virtual.
7276
7277         * class.cs (ClassPart.SetParameterInfo): Override this.
7278         (PartialContainer.SetParameterInfo): Override this.
7279         (TypeContainer.CheckConstraints): New protected method.
7280         (PartialContainer.CheckConstraints): Override this and check
7281         whether the same contraints were specified in all parts of a
7282         partial generic type definition.
7283         (PartialContainer.UpdateConstraints): New public method.
7284
7285         * generic.cs (TypeParameter.UpdateConstraints): New public method.
7286
7287 2005-03-02  Martin Baulig  <martin@ximian.com>
7288
7289         Committing a patch from Carlos Alberto Cortez to fix #72887.
7290
7291         * convert.cs (Convert.ExplicitReferenceConversionExists): Allow
7292         casts from `T []' to `int []'.
7293
7294 2005-03-02  Martin Baulig  <martin@ximian.com>
7295
7296         * generic.cs (TypeManager.IsEqual): Make this symmetric.
7297
7298         * expression.cs (Binary.ResolveOperator): When resolving a
7299         BinaryDelegate, use `TypeManager.IsEqual (l, r)' rather than just
7300         `=='.  Fixes #71866.  See gen-127.cs.
7301
7302 2005-03-02  Martin Baulig  <martin@ximian.com>
7303
7304         * class.cs (TypeContainer.DoDefineMembers): We also need a default
7305         static constructor in static classes.
7306
7307 2005-03-02  Martin Baulig  <martin@ximian.com>
7308
7309         * generic.cs
7310         (NullableType.Name, NullableType.FullName): Add a "?" to the name.
7311         (Nullable.LiftedConversion): Added support for user-defined
7312         conversions.
7313
7314         * cs-tokenizer.cs (Tokenizer.PutbackCloseParens): New public method.
7315
7316         * cs-parser.jay: Use ComposedCast everywhere instead of
7317         NullableType, so we don't need to check for NullableType
7318         everywhere.
7319         (conditional_expression): Added `INTERR CLOSE_PARENS' rule for the
7320         case where we'll be resolved into a `parenthesized_expression_0'
7321         afterwards.
7322
7323         * convert.cs
7324         (Convert.UserDefinedConversion): Added nullable conversions.
7325
7326 2005-02-28  Martin Baulig  <martin@ximian.com>
7327
7328         * generic.cs (TypeManager.IsNullableType): New static method.
7329         (Nullable): New abstract class.
7330         (Nullable.NullLiteral): New public class.
7331         (Nullable.LiftedConversion): New public class.
7332
7333         * cs-parser.jay (non_expression_type): Changed `builtin_types' to
7334         `builtin_types opt_nullable'.
7335
7336         * convert.cs
7337         (Convert.ImplicitConversionStandard): Added nullable conversions.
7338         (Convert.ExplicitConversionStandard): Likewise.
7339         (Convert.ExplicitConversion): Likewise.
7340
7341 2005-02-26  Martin Baulig  <martin@ximian.com>
7342
7343         * expression.cs (ComposedCast.DoResolveAsTypeStep): Allow `dim' to
7344         begin with a "?", for instance "?[]".  Don't do a type lookup if
7345         `dim' is empty.
7346
7347 2005-02-25  Martin Baulig  <martin@ximian.com>
7348
7349         The first part of Nullable Types :-)
7350
7351         * generic.cs (NullableType): New public class.
7352         (NullCoalescingOperator): New public class.
7353         (TypeArguments.Resolve): Add a CS0306 check.
7354
7355         * cs-parser.jay (opt_error_modifier): Removed, this was unused.
7356         (opt_nullable): New rule.
7357         (type): Added `opt_nullable' to `namespace_or_type_name',
7358         `builtin_types' and `pointer_type'.
7359         (array_type): Added `opt_nullable'.
7360         (opt_rank_specifier_or_nullable): New rule; this is the
7361         combination of `opt_rank_specifier' and `opt_nullable'.
7362         (opt_error): New rule; catch errors here.
7363         (nullable_type_or_conditional): New rule; we use this to check for
7364         nullable and still detect the conditional operator.
7365         (local_variable_type): Use `opt_rank_specifier_or_nullable'
7366         instead `opt_rank_specifier'.
7367
7368         * expression.cs (ComposedCast.DoResolveAsTypeStep): Added support
7369         for nullables.
7370
7371 2005-02-24  Martin Baulig  <martin@ximian.com>
7372
7373         * README, README.Changes: Removed; they're old and obsolete.
7374
7375 2005-02-22  Martin Baulig  <martin@ximian.com>
7376
7377         * generic.cs (TypeParameter.Resolve): If resolving the constraints
7378         returned an error, set `constraints' to null to avoid a crash
7379         later on.
7380         (TypeParameter.ResolveType): Likewise.
7381
7382 2005-02-22  Martin Baulig  <martin@ximian.com>
7383
7384         * generic.cs
7385         (Constraints.ResolveTypes): Protect against being called twice.
7386         (Constraints.CheckInterfaceMethod): Don't call ResolveTypes().
7387         (TypeParameter.ResolveType): New public method; calls
7388         constraints.ResolveTypes().
7389         (TypeParameter.DefineType): Moved constraints.ResolveType() out
7390         into the new ResolveType().
7391         (GenericMethod.Define): Call ResolveType() on all our
7392         TypeParameter's.        
7393
7394 2005-02-21  Martin Baulig  <martin@ximian.com>
7395
7396         * generic.cs
7397         (TypeManager.generic_nullable_type): New static public field.
7398         (TypeManager.InitGenericCoreType): Lookup "System.Nullable`1".
7399
7400         * rootcontext.cs
7401         (RootContext.ResolveCore): Resolve "System.Nullable`1".
7402
7403 2005-02-15  Martin Baulig  <martin@ximian.com>
7404
7405         * generic.cs (ConstructedType.Constraints): Correctly check
7406         constraints if the argument type is a type parameter; fixes
7407         #72326. 
7408
7409 2005-02-02  Martin Baulig  <martin@ximian.com>
7410
7411         * delegate.cs (Delegate.DefineType): Report an internal error if
7412         TypeManager.multicast_delegate_type is null.  See bug #72015 for
7413         details.        
7414
7415 2005-01-29  Miguel de Icaza  <miguel@novell.com>
7416
7417         * pending.cs: Produce better code (no nops produced by using Ldarg
7418         + value).
7419         
7420         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
7421         i - 1' it should be arg + 1.
7422
7423         Fixes bug #71819.
7424         
7425 2005-01-26  Martin Baulig  <martin@ximian.com>
7426
7427         * cs-parser.jay (indexer_declarator): Don't report an error if we
7428         have type parameters since we can be an explicit interface
7429         implementation; fixes #71449.
7430
7431 2005-01-26  Martin Baulig  <martin@ximian.com>
7432
7433         * class.cs (TypeContainer.AttributeTargets): Return the correct
7434         AttributeTargets depending on our `Kind' instead of throwing an
7435         exception; fixes #71632.
7436
7437 2005-01-26  Martin Baulig  <martin@ximian.com>
7438
7439         * delegate.cs (Delegate.DefineType): Correctly define our type
7440         parameters.  Fixes #71483.
7441
7442 2005-01-25  Raja R Harinath  <rharinath@novell.com>
7443
7444         Fix #71602.
7445         * expression.cs (MemberAccess.DoResolve): Don't complain with
7446         cs0572 when the LHS of a member access has identical name and type
7447         name.
7448
7449 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
7450
7451         Fix #71651, #71675
7452         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
7453         CreatePermission.
7454         Create custom PermissionSet only for PermissionSetAttribute.
7455
7456 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
7457
7458         Fix #71649
7459         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
7460         delegates in static class.
7461
7462 2005-01-24  Martin Baulig  <martin@ximian.com>
7463
7464         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
7465         merging an implicit block, just use its reachability.
7466
7467         * statement.cs (Block.Resolve): Make the unreachable code check
7468         work wrt. implicit blocks; see test-337 from #63842.
7469
7470 2005-01-21  Alp Toker  <alp@atoker.com>
7471  
7472         * cs-parser.jay: destructor_declaration's container is PartialContainer
7473         not Class when partial types are used, so use Kind prop instead of
7474         'is'.
7475         
7476 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
7477
7478         * cs-parser.jay: Improve error reporting when an interface
7479         declares new types.
7480
7481 2005-01-20  Dick Porter  <dick@ximian.com>
7482
7483         * support.cs: SeekableStreamReader fix from Sandor Dobos
7484         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
7485         chars are read.  Fixes bug 70369.
7486
7487 2005-01-20  Raja R Harinath  <rharinath@novell.com>
7488
7489         * cs-parser.jay (catch_clause): Simplify current_block handling
7490         somewhat.
7491
7492 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
7493
7494         * convert.cs (ImplicitStandardConversionExists): Synchronize the
7495         code with ImplicitStandardConversion to handle the implicit
7496         conversion of method groups into valid delegate invocations. 
7497
7498         The problem is that in parameter handling we were using this code
7499         path.  Fixes bug #64698
7500
7501 2005-01-19  Raja R Harinath  <rharinath@novell.com>
7502
7503         * cs-parser.jay: Fix several infelicities.
7504         - Avoid assigning to the parser value stack.  Code like 
7505           '$3 = null' is unclean.  Synthesize a value for the code block
7506           instead. 
7507         - Avoid using oob_stack for storing location information.  Use ...
7508         (_mark_): ... this.  New (empty) rule.  Saves the current location
7509         in $$.
7510         (foreach_statement): Avoid using oob_stack for current_block
7511         handling.  Use technique used in for_statement and
7512         using_statement.  Synthesize a value for the code block to store
7513         additional intermediate information.
7514
7515 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
7516
7517         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
7518         of a different type is only allowed to private fields of a
7519         containing type, not on fields of a base class.
7520
7521         See test-174.cs and error cs0122-9.cs
7522
7523 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7524
7525         Fix test-335.cs (bug #58126).
7526         * cs-parser.jay (argument): Split out non-expression parts of the
7527         rule into 'non_simple_argument'.
7528         (invocation_expression): Support parenthesized invocations with
7529         multiple arguments, and with single non-simple arguments.
7530
7531 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7532
7533         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
7534         places.
7535
7536 2005-01-12  Raja R Harinath  <rharinath@novell.com>
7537
7538         Fix cs0038-1.cs, cs1640-6.cs.
7539         * ecore.cs (Expression.Resolve): Remove special-case for
7540         SimpleName in error-handling.
7541         (Expression.almostMatchedMembers): Relax access permission to
7542         protected.
7543         (Expression.MemberLookupFailed): Handle duplicates in
7544         almostMatchedMembers list.
7545         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
7546         * expression.cs (New.DoResolve): Report CS1540 for more cases.
7547         * typemanager.cs (GetFullNameSignature): Use the MethodBase
7548         overload if the passed in MemberInfo is a MethodBase.
7549
7550 2005-01-25  Martin Baulig  <martin@ximian.com>
7551
7552         * doc.cs
7553         (DocUtil.emptyParamList): Removed; use `Type.EmptyTypes' instead.
7554
7555 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
7556
7557         Fix #70749
7558         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
7559         for non-CAS & merge permission sets properly.
7560
7561 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7562
7563         Improve standard-compliance of simple name and member access 
7564         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
7565         * ecore.cs (FullNamedExpression): New abstract base class 
7566         for Namespaces and TypeExpressions.
7567         (ResolveFlags.SimpleName): Remove.
7568         (SimpleName): Remove support for dotted names.
7569         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
7570         DeclSpace.FindType and DeclSpace.LookupType.
7571         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
7572         (Expression.ExprClassName): Make member function.
7573         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
7574         a namespace.  Remove creation of dotted "SimpleName"s.
7575         (MemberAccess.DoResolve): Likewise.
7576         * decl.cs (DeclSpace.Cache): Make private.
7577         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
7578         (DeclSpace.FindType): Update.
7579         (DeclSpace.LookupType): Move here from RootContext.  Return a 
7580         FullNamedExpression.
7581         * namespace.cs (Namespace): Derive from FullNamedExpression
7582         so that it can be part of expression resolution.
7583         (Namespace.Lookup): Return an FullNamedExpression.
7584         (NamespaceEntry.LookupAlias): Lookup aliases only in current
7585         namespace.
7586         * rootcontext.cs (NamespaceLookup): Remove.
7587         (LookupType): Move to DeclSpace.
7588         * attribute.cs (CheckAttributeType): Update.
7589         * doc.cs (FindDocumentedType): Remove allowAlias argument.
7590         (FindDocumentedTypeNonArray): Likewise.
7591
7592 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7593
7594         Fix cs0509.cs, cs1632.cs.
7595         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
7596         is the same as IsInterface.
7597         (TypeContainer.GetClassBases): Likewise.
7598         * statement.cs (LabeledStatement.ig): New field.
7599         (LabeledStatement.LabelTarget): Save ILGenerator which created the
7600         label.
7601         (LabeledStatement.DoEmit): Check that the label was created with
7602         the same ILGenerator.
7603
7604 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7605
7606         Fix #71058
7607         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
7608         accessors to its properties.
7609
7610         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
7611         from accessors to property.
7612         
7613 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7614
7615         Fix #70722
7616         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
7617         only for overrides.
7618         
7619 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
7620
7621         * attribute.cs: Check for null and empty strings.  
7622
7623         I have lost another battle to Paolo.
7624
7625 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
7626
7627         Fix #70942
7628         * class.cs (PropertyMethod): Set Parent field in ctors.
7629         (SetMethod.InternalParameters): Add unsafe switch hack.
7630         Override MarkForDuplicationCheck where it is appropriate.
7631
7632         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
7633         It says whether container allows members with the same name.
7634         Base default is no.
7635         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
7636         Removed is_method parameter.
7637
7638 2005-01-06  Duncan Mak  <duncan@ximian.com>
7639
7640         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
7641         because the previous change led to incorrect reporting of CS1032
7642         ("Cannot define/undefine preprocessor symbols after first token in
7643         file"). Instead of using `tokens_seen' as the only flag that
7644         triggers CS1040, introduce `comments_seen'. This new flag is used
7645         to signify having seen comments on the current line, so it is
7646         unset after a newline.
7647
7648 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7649
7650         * doc.cs : When searching for a type, find nested type too.
7651           This fixes bug #71040.
7652
7653 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7654
7655         * doc.cs :
7656           - Warn missing member comment on those classes which also does not
7657             have doc comments. Fixed bug #71041.
7658           - Don't warn missing doc comment on default constructor.
7659             Fixed bug #71042.
7660
7661 2005-01-06  Duncan Mak  <duncan@ximian.com>
7662
7663         * cs-tokenizer.cs (xtoken): After handling traditional C-style
7664         comments, set `tokens_seen' to true. This allows us to detect
7665         misplaced preprocessor directives (i.e. not at the beginning of
7666         the a line, nor after whitespaces). In that case, report error
7667         CS1040. This fixes bug #56460.
7668
7669         * cs-parser.jay (interface_member_declaration): Add checks for
7670         IsExplicitImpl, and report CS0541 error if an interface member is
7671         defined as an explicit interface declaration.
7672
7673 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
7674
7675         Fix #70817
7676         * class.cs (PropertyMethod): Set Parent field in ctors.
7677         (SetMethod.InternalParameters): Add unsafe switch hack.
7678         
7679         * decl.cs (MemberCore.Parent): Cannot be readonly.
7680
7681 2005-01-06  Raja R Harinath  <rharinath@novell.com>
7682
7683         * decl.cs (DeclSpace.ResolveType): Remove.
7684         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
7685         Merge in code from ...
7686         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
7687         * class.cs, enum.cs: Update to changes.
7688
7689 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
7690
7691         * anonymous.cs: Ensure that we init the scope of our parent if it
7692         has not been initialized yet.
7693
7694 2004-12-30  Duncan Mak  <duncan@ximian.com>
7695
7696         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
7697         if field.FieldBuilder is null. Fixes #70758.
7698
7699         * convert.cs: Fixed some typos and updated some of the comments.
7700         (ImplicitStandardConversionExists):
7701         (TryImplicitIntConversion): If `target_type' is an interface and
7702         the type of `ic' implements this interface, return true or a new
7703         BoxedCast instead of null. This fixes #70468.
7704
7705 2004-12-29  Duncan Mak  <duncan@ximian.com>
7706
7707         * expression.cs (Argument.Emit): Check that Expr is
7708         IMemoryLocation before casting to it, and report CS1510 otherwise.
7709
7710         This fixes #70402.
7711
7712 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
7713
7714         * statement.cs (Block.ThisVariable): remove the recursion here, to
7715         make the --profile more sane.
7716
7717 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
7718
7719         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
7720         assembly, by JB Evain.
7721
7722 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7723
7724         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
7725           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
7726         "parent" refers to enclosing type/class.  "base" refers to superclass.
7727
7728 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7729
7730         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7731         Ensure that we only have GlobalAttributes.
7732         * attribute.cs (Attribute.Emit): Make non-virtual.
7733         (GlobalAttribute.Emit): Remove.
7734         (Attribute.Resolve): Make virtual.
7735         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
7736         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
7737         the argument. Don't create one.
7738         (Attribute.GetObsoleteAttribute): Likewise.
7739         (Attribute.GetClsCompliantAttributeValue): Likewise.
7740         * class.cs, decl.cs: Update to changes.
7741
7742 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
7743
7744         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
7745         
7746         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
7747         
7748         * statement.cs (Foreach.Resolve): Add error 186 report.
7749
7750 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
7751
7752         * expression.cs (Conditional.DoResolve): Add warning 429.
7753         
7754         * statement.cs (If.Resolve): Add warning 665.
7755
7756 2004-12-16  Raja R Harinath  <rharinath@novell.com>
7757
7758         New invariant: RootContext.Tree.Types.NamespaceEntry == null
7759         except when in the parser, and in GlobalAttribute.
7760         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
7761         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
7762         RootContext.Tree.Types.NamespaceEntry once work is done.
7763         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
7764         and resets RootContext.Tree.Types.NamespaceEntry.
7765
7766 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
7767
7768         * cs-parser.jay: Don't create a block for every variable.
7769
7770 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
7771
7772         * location.cs: Provide extra information.
7773
7774         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
7775         variables from the captured environment, it is the ldarg_0.
7776
7777 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7778
7779         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
7780         find a conclusion.
7781         
7782         * class.cs: Changed warning level for 169 to avoid developer
7783         displeasure from warning flooding. It will be changed back when they
7784         fix most of current BCL warnings.
7785         
7786         * RootContext.cs: Pushed default WarningLevel to 3.
7787         
7788         * statement.cs: Removed unused variable.
7789
7790 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7791
7792         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
7793         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
7794         Add error 502 report.
7795         (StaticClass.DefineType): Add error 441 report.
7796         (Class.AllowedModifiersProp): New virtual property as temporary
7797         extension to AllowedModifiers.
7798         (Class.DefineType): Add error 418 report. Moved ModFlags check here
7799         to share implementation with StaticClass and don't call virtual
7800         methods from ctor.
7801         
7802         * driver.cs (MainDriver): Add error 1558 test.
7803
7804         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
7805         report. Moved error 36 test here.
7806
7807         * statement.cs (Throw.Resolve): Add error 724 report.
7808
7809         * typemanager.cs: Add out_attribute_type core type.
7810         
7811 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
7812
7813         * class.cs (TypeContainer.VerifyClsCompliance): Add error
7814         3018 report.
7815         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
7816
7817         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
7818         3017 report.
7819         
7820         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
7821
7822         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
7823         Add error 3023 report.
7824         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
7825
7826         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
7827         implementation.
7828
7829 2004-12-12  John Luke  <john.luke@gmail.com>
7830
7831         * driver.cs (AddArgs): take -- into account when
7832         adding arguments, fixes bug 65710 
7833
7834 2004-12-12  Martin Baulig  <martin@ximian.com>
7835
7836         * expression.cs (Unary.TryReduceNegative): Added support for
7837         SByteConstant and ByteConstant.
7838         (Unary.Reduce): Check error values from TryReduceNegative().
7839
7840 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
7841
7842         * attributes.cs (Attribute.Resolve): Avoid multiple error report
7843         and report exception as error 182.
7844
7845 2004-12-10  Raja R Harinath  <rharinath@novell.com>
7846
7847         * driver.cs (Main): Fix message when there are warnings.
7848
7849 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
7850
7851         * delegate.cs: Fixed my fix from yesterday, sorry about that.
7852
7853 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
7854
7855         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
7856         Reduced number of warnings.
7857         
7858         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
7859
7860 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
7861
7862         * driver.cs: Removed message.
7863
7864         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
7865
7866 2004-12-08    <vargaz@freemail.hu>
7867
7868         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
7869
7870 2004-12-08  Martin Baulig  <martin@ximian.com>
7871
7872         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7873         instead of a CS3002 for properties and indexer.
7874
7875 2004-12-08  Martin Baulig  <martin@ximian.com>
7876
7877         * decl.cs (MemberName.ToString): Make this work again.
7878
7879 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
7880
7881         * attribute.cs (Resolve): Add error 591 detection.
7882
7883         * class.cs (FieldMember.Define): Add error 1547 detection.
7884         (Indexer.Define): Add error 620 detection.
7885         (Operator.Define): Add error 590 detection.
7886
7887         * ecore.cs: Missing argument for error 79.
7888
7889         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
7890         detection.
7891
7892 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
7893
7894         Fix #70106
7895         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
7896         only.
7897
7898 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7899
7900         * cs-parser.jay : handle doc comments on implicit/explicit operators.
7901           Some operator comments were suppressed.
7902         * doc.cs : Implicit/explicit operator name in doc comments are like
7903           "op_Explicit(type)~returnType", so added suffix handling.
7904
7905 2005-01-21  Alp Toker  <alp@atoker.com>
7906
7907         * cs-parser.jay: destructor_declaration's container is PartialContainer
7908         not Class when partial types are used, so use Kind prop instead of 'is'.
7909
7910 2004-12-12  Martin Baulig  <martin@ximian.com>
7911
7912         * expression.cs (Unary.TryReduceNegative): Added support for
7913         SByteConstant and ByteConstant.
7914         (Unary.Reduce): Check error values from TryReduceNegative().
7915
7916 2004-12-11  Martin Baulig  <martin@ximian.com>
7917
7918         * support.cs (ReflectionParameters.ParameterName): If we have a
7919         `gpd', call `ParameterName' on it.
7920
7921         * parameter.cs (Parameter.GetParameterAttributes): New static method.
7922
7923         * pending.cs (PendingImplementation.DefineProxy): Call
7924         DefineParameter() for all of the MethodBuilder's arguments.
7925
7926 2004-12-09  Martin Baulig  <martin@ximian.com>
7927
7928         * doc.cs (DocUtil): Make this a static class.
7929
7930 2004-12-09  Martin Baulig  <martin@ximian.com>
7931
7932         * expression.cs (Invocation.InferType): Moved the type inference
7933         implementation into TypeManager.
7934
7935         * generics.cs (TypeManager): Moved the type inference
7936         implementation here.
7937
7938 2004-12-09  Martin Baulig  <martin@ximian.com>
7939
7940         * typemanager.cs (TypeManager): Make this a partial class.
7941
7942         * generics.cs
7943         (TypeManager): Move the generics part of `TypeManager' here.
7944
7945 2004-12-08  Martin Baulig  <martin@ximian.com>
7946
7947         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7948         instead of a CS3002 for properties and indexer.  Added CS3024
7949         check for generic interfaces.
7950
7951         * attributes.cs (AttributeTester.AnalyzeTypeCompliance): Generic
7952         instances are not CLS-compliant.
7953
7954 2004-12-08  Martin Baulig  <martin@ximian.com>
7955
7956         * cs-parser.jay
7957         (void_pointer_expression): New rule for `void*', `void**' etc.
7958         (typeof_expression): Add `void_pointer_expression'; fixes #66846.       
7959
7960 2004-12-08  Martin Baulig  <martin@ximian.com>
7961
7962         * expression.cs (Invocation.InferType): Removed the hack for
7963         MethodCore.MayUnify().  
7964
7965         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Make
7966         this actually work.
7967
7968         * class.cs (MethodCore.MayUnify): Use
7969         TypeManager.MayBecomeEqualGenericTypes().       
7970
7971 2004-12-08  Martin Baulig  <martin@ximian.com>
7972
7973         * expression.cs (Is.DoResolve, As.DoResolve): If we're a type
7974         parameter, box it.  Fixes #69233.
7975
7976 2004-12-08  Martin Baulig  <martin@ximian.com>
7977
7978         * generic.cs (ConstructedType.CheckConstraints): Valuetypes always
7979         have the ctor constraint.  Fixes #68326.
7980
7981 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7982
7983         * cs-parser.jay : interface comment was not consumed because of
7984           extra opt_semicolon before doc handling.
7985
7986 2004-12-03  Raja R Harinath  <rharinath@novell.com>
7987
7988         Fix test-327.cs, test-328.cs, and put in early infrastructure
7989         for eventually fixing #52697.
7990         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
7991         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
7992         from other methods.
7993         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
7994         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
7995         (VerifyUsing, error246): Update.
7996         * rootcontext.cs (RootContext.NamespaceLookup): Just use
7997         'NamespaceEntry.LookupNamespaceOrType'.
7998
7999 2004-12-07  Martin Baulig  <martin@ximian.com>
8000
8001         * driver.cs: Call it "BETA SOFTWARE" :-)
8002
8003 2004-12-06  Raja R Harinath  <rharinath@novell.com>
8004
8005         Fix crash on cs0657-17.cs.
8006         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
8007         Use RootContext.Tree.Types, not 'new RootTypes ()'.
8008         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
8009         the case where the NamespaceEntry gets overwritten.
8010
8011 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
8012
8013         Fixed #69195, #56821
8014         * ecore.cs (ResolveBoolean): Tiny refactoring.
8015
8016         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
8017         of right expression resolving when left is false constant and
8018         operator is LogicalAnd OR true constant and operator is LogicalOr.
8019
8020         * statement.cs (ResolveUnreachable): Always reports warning.
8021
8022 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
8023
8024         * class.cs: Distinguish between 1721 and 1722 (just a little help
8025         for the programmer).
8026
8027 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
8028
8029         * delegate.cs: Only allow this on new versions of the language. 
8030
8031 2004-12-02  Duncan Mak  <duncan@ximian.com>
8032
8033         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
8034         Expression class.
8035         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
8036         here as a static method. Take an additional bool out parameter
8037         `must_do_cs1540_check' for signaling to InstanceResolve.
8038         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
8039         member field from PropertyExpr class and made it an argument of
8040         the method instead.
8041         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
8042         check for MarshalByRefObject, and report CS0122 instead of CS1540.
8043         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
8044         and `remove_accessor' as well as InstanceResolve: report CS0122
8045         where applicable.
8046
8047         Fixes #70129.
8048
8049 2004-12-07  Martin Baulig  <martin@ximian.com>
8050
8051         * decl.cs (DeclSpace.AddToContainer): Report correct errors CS0694
8052         and CS0692 where appropriate.
8053
8054 2004-12-06  Martin Baulig  <martin@ximian.com>
8055
8056         * class.cs (MethodCore.MayUnify): Moved the CS0408 check here from
8057         IsDuplicateImplementation() and improved it.
8058
8059         * expression.cs (Invocation.InferTypeArguments): Added
8060         `Type[] inferred_class_types' argument (for MethodCore.MayUnify)
8061         and removed the "ref" modifier from `infered_types'.
8062
8063         * decl.cs (MemberName.ToString): Removed the exception.
8064
8065 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
8066
8067         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
8068           comments are allowed.
8069
8070 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
8071
8072         * delegate.cs: Add checks for subtypes in paramaters and return values
8073         in VerifyMethod () to add support for Covariance/Contravariance
8074         in delegates.
8075         
8076 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
8077
8078         * report.cs: Remove extra closing parenthesis.
8079
8080         * convert.cs (Error_CannotImplicitConversion): If the name of the
8081         types are the same, provide some extra information.
8082
8083 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
8084
8085         Fix bug #70102
8086         * attribute.cs (Resolve): Improved implementation of params
8087         attribute arguments.
8088
8089         * support.cs (ParameterData): Add HasParams to be faster.
8090
8091 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
8092
8093         all things are for /doc support:
8094
8095         * doc.cs: new file that supports XML documentation generation.
8096         * mcs.exe.sources: added doc.cs.
8097         * driver.cs:
8098           Handle /doc command line option.
8099           Report error 2006 instead of 5 for missing file name for /doc.
8100           Generate XML documentation when required, after type resolution.
8101         * cs-tokenizer.cs:
8102           Added support for picking up documentation (/// and /** ... */),
8103           including a new XmlCommentState enumeration.
8104         * cs-parser.jay:
8105           Added lines to fill Documentation element for field, constant,
8106           property, indexer, method, constructor, destructor, operator, event
8107           and class, struct, interface, delegate, enum.
8108           Added lines to warn incorrect comment.
8109         * rootcontext.cs :
8110           Added Documentation field (passed only when /doc was specified).
8111         * decl.cs:
8112           Added DocComment, DocCommentHeader, GenerateDocComment() and
8113           OnGenerateDocComment() and some supporting private members for
8114           /doc feature to MemberCore.
8115         * class.cs:
8116           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
8117         * delegate.cs:
8118           Added overriden DocCommentHeader.
8119         * enum.cs:
8120           Added overriden DocCommentHeader and GenerateDocComment().
8121
8122 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
8123
8124         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
8125         unwrapping the enumeration values, chain to
8126         DoConstantNumericPromotions again, so we can promote things to the
8127         fundamental types (takes care of enums that are bytes, sbytes).
8128
8129         Fixes bug #62054.
8130
8131 2004-12-01  Raja R Harinath  <rharinath@novell.com>
8132
8133         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
8134         Fix long-standing bug in type-lookup.  Use FindType instead of
8135         LookupType when ec.ResolvingTypeTree.
8136         (Attribute.ResolveType, Attribute.Resolve)
8137         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
8138         Update to changes.
8139         (Attributes.Search): Remove internal version.  Update.
8140         (Attributes.SearchMulti): Update.
8141         (Attributes.GetClsCompliantAttribute): Remove.
8142         (Attributes.GetIndexerNameAttribute): Remove.
8143         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
8144         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
8145         * class.cs (Indexer.Define): Likewise.
8146
8147 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
8148
8149         Fix bug #68790
8150         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
8151         MarshallByReference members access.
8152
8153         * expression.cs: Use CheckMarshallByRefAccess;
8154         Better error CS0197 message.
8155
8156         * report.cs: Print whole related error message.
8157
8158 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
8159
8160         * class (GetClassBases): Better error 60 report.
8161         (EventProperty): Disabled warning 67 detection.
8162
8163 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
8164
8165         Fix bug #60324
8166         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
8167
8168         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
8169         precise values.
8170
8171 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
8172
8173         Fix bug #49488
8174         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
8175
8176         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
8177
8178 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
8179
8180         * attribute.cs (Attribute.Resolve): Refine error reporting and
8181         report a cs0117 if the identifier does not exist, to distinguish
8182         from 0617 which is a miss-use of the actual identifier.
8183
8184         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
8185         between cs0070 and cs0079.
8186
8187         * class.cs (MemberBase.DoDefine): When reporting a wrong
8188         accessibility level, we use MethodCore to compare instead of
8189         Method (this was a regression in some refactoring effort).
8190
8191         So now we correctly report cs0056 again.
8192
8193         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
8194         testing the target_type (which was known to be object_type) and
8195         not the source type (which is anonymous_method).
8196
8197         Fixed reporting of error cs1660.
8198
8199         * expression.cs (UserCast.Source): Expose the underlying cast.
8200
8201         * statement.cs (Switch.SwitchGoverningType): Sort the list of
8202         allowed types to find a match to int32 first (most common).
8203
8204         In addition, it ignores any ImplicitUserConversions that did an
8205         internal implicit conversion (as the switch statement allows only
8206         one integral conversion to exist).
8207
8208         * class.cs (PartialContainer.Create): rename `name' to
8209         `member_name' for clarity.  Then replace the string calls with a
8210         call to MemberName.GetPartialName, as now using
8211         MemberName.ToString is an error (this is due to the side effects
8212         it had, that were fixed in the past).
8213
8214         This will restore the error reporting on a number of partial class
8215         errors that were missusing this (and getting an exception as a
8216         results, which is now just a plain textual warning, because
8217         yyparse debug output would crash otherwise).
8218
8219 2004-11-26  Raja R Harinath  <rharinath@novell.com>
8220
8221         * Makefile (PROGRAM_INSTALL_DIR): Remove.
8222
8223 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
8224
8225         * rootcontext.cs (LookupType): Make sure to cache lookups that
8226         don't give us a negative result. This saves about 5% of corlib
8227         compilation time.
8228
8229 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
8230
8231         * report.cs (AbstractMessage.Print): messages are sent to stderr
8232
8233         * class.cs (TypeContainer.GetClassBases): It is an error to have a
8234         non-interface in the list of interfaces (at this point, either
8235         parent was properly set, or a base class is being listed in the
8236         interfaces section).
8237
8238         This flags error 1722, and resolves the crash from bug 69259.
8239
8240 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
8241
8242         * statement.cs (Using.EmitExpressionFinally): make this work right
8243         for valuetypes. Fixes 69926.
8244
8245 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
8246
8247         * const.cs (Const.ChangeType): Cope with the "0 literal can be
8248         converted to an enum" here, before we try to change the underlying
8249         type.  This code exists, but it is a different code path than the
8250         one used while encoding constants.
8251
8252         (ImplicitReferenceConversionExists): In addition, resynchronized
8253         the code here, so it matches the same code in
8254         ImplicitReferenceConversionExists for the `from any class-type S
8255         to any interface-type T'.       
8256
8257 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
8258
8259         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
8260
8261 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
8262
8263         * cs-parser.jay: Use verbosity accordingly. 
8264
8265 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
8266
8267         * expression.cs (Unary.ResolveOperator): Do not report warning;
8268         AddressOf reads from variable.
8269         
8270         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
8271
8272 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
8273
8274         Fix bug #69462
8275
8276         * attribute.cs (Attributable): Removed CheckTargets.
8277         (Attributes.Emit): Explicit attribute targets are tested here.
8278
8279         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
8280         not enabled for interfaces.
8281
8282         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
8283         (GetAssemblyName): Ouch next bug there.
8284
8285 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
8286
8287         * expression.cs: Error 275 added.
8288         
8289 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
8290
8291         Fix bug #69177 (Implemented decimal constant support)
8292
8293         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
8294         (BinaryFold): Add DecimalConstant.
8295
8296         * const.cs (Define): Decimal constant 
8297         (is not constant.
8298         (ChangeType): Add decimal type handling.
8299         (LookupConstantValue): Don't set value for decimal type but
8300         emit DecimalConstantAttribute. Needed for constant optimization.
8301
8302         * constant.cs (ToDecimal): New method.
8303         (ConvertToDecimal): New method.
8304         (IntConstant): Implemented ConvertToDecimal.
8305         (DecimalConstant.Emit): Emit optimized version for decimals in
8306         int range.
8307
8308         * expression.cs (ResolveOperator): Changed order of constant
8309         reduction to work correctly with native types which have
8310         overloaded operators.
8311         (ResolveMemberAccess): Extract constant value from attribute
8312         for decimal type.
8313
8314         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
8315
8316         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
8317         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
8318         (ChangeType): Decimal is special.
8319         (TypeToCoreType): Add decimal type.
8320
8321 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
8322
8323         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
8324         decimal types.
8325
8326 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
8327
8328         * class.cs (EventField.ApplyAttributeBuilder): Fix error
8329         test cs1667-5.cs.
8330
8331 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
8332
8333         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
8334
8335         * pending.cs (PendingImplementation): Grab only interfaces.
8336
8337 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
8338
8339         * statement.cs (ForeachHelperMethods): Add location member and
8340         error 202 detection.
8341
8342 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
8343
8344         * expression.cs (DoResolveBase): Fixed wrong warning for out
8345         variables.
8346
8347 2004-12-04  Martin Baulig  <martin@ximian.com>
8348
8349         * convert.cs (Convert.TypeParameter_to_Null): Use the constraints
8350         to check whether the conversion is ok.
8351
8352         * typemanager.cs (TypeManager.GetTypeArguments): Just return
8353         `Type.EmptyTypes' if we're not a generic TypeContainer.
8354
8355 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
8356
8357         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
8358         old bug: when converting from the null literal to a pointer,
8359         return an EmptyCast, not the NullLiteral.
8360
8361         This fixes #69921, the recent null_type changes probably made this
8362         bug more prominent.
8363
8364 2004-12-03  Martin Baulig  <martin@ximian.com>
8365
8366         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
8367         method as our child, call AnonymousMethod.Compatible() on it.
8368
8369 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
8370
8371         * class.cs (FieldBase): Use an unused bit field from the field to
8372         encode the `has_offset' property from the FieldMember.  This saves
8373         a couple of Ks on bootstrap compilation.
8374
8375         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
8376         method as our child, return the AnonymousMethod resolved
8377         expression.
8378
8379         * expression.cs (New.DoResolve): Allow return values from
8380         NewDelegate to also include AnonymousMethods.
8381
8382         Fixes #70150.
8383
8384 2004-11-29  Raja R Harinath  <rharinath@novell.com>
8385
8386         * decl.cs (MemberCore.MemberName): Remove readonly to fix an error
8387         cs1648 report.
8388         * rootcontext.cs (ResolveCore::interfaces_first_stage): Add
8389         System.Runtime.InteropServices._Exception, since it's a base
8390         interface of the core type System.Exception in the net_2_0 profile.
8391
8392 2004-11-27  Martin Baulig  <martin@ximian.com>
8393
8394         * ecore.cs (Expression.StoreFromPtr): Use `stobj' for generic parameters.
8395
8396 2004-11-26  Raja R Harinath  <rharinath@novell.com>
8397
8398         * Makefile: Convert to use executable.make.
8399         * gmcs.exe.sources: New.
8400
8401 2004-11-25  Martin Baulig  <martin@ximian.com>
8402
8403         * expression.cs (Invocation.InferType): Added support for byref types.
8404
8405 2004-11-25  Martin Baulig  <martin@ximian.com>
8406
8407         * statement.cs (Foreach.FetchMethodMoveNext): Wrap `mi.ReturnType'
8408         in TypeManager.TypeToCoreType().
8409
8410 2004-11-25  Martin Baulig  <martin@ximian.com>
8411
8412         * iterators.cs (Iterator.DoDefineMembers): Override and lookup the
8413         "Dispose" method from the `current_type'.
8414         (Iterator.EmitMoveNext): Use the `dispose_method' we looked up in
8415         DoDefineMembers() instead of using the MethodBuilder; this is
8416         required for generic iterators.
8417
8418         * class.cs (TypeContainer.DoDefineMembers): Make this virtual.
8419
8420 2004-11-24  Martin Baulig  <martin@ximian.com>
8421
8422         * ecore.cs (Expression.LoadFromPtr): Use `ldobj' for generic parameters.
8423
8424 2004-11-20  Martin Baulig  <martin@ximian.com>
8425
8426         * expression.cs (Invocation.InferType): Correctly infer generic
8427         instances; see gen-103.cs.
8428         (Invocation.InferTypeArguments): If a generic method doesn't have
8429         any unbound type parameters, we don't need to infer anything.
8430
8431 2004-11-19  Raja R Harinath  <rharinath@novell.com>
8432
8433         * Makefile (gmcs.exe): Update to new location of bootstrap mcs.exe.
8434
8435 2004-11-17  Raja R Harinath  <rharinath@novell.com>
8436
8437         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
8438         (TypeHandle.GetMemberCache): New.
8439         (TypeHandle.TypeHandle): Update.
8440         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
8441         (TypeManager.LookupParentInterfacesCache):
8442         Rename from LookupInterfaceCache.  Optimize slightly.
8443         (TypeManager.MemberLookup_FindMembers): Update.
8444         * decl.cs (MemberCache.MemberCache): Set Container to null in the
8445         multi-type variant.
8446         (AddCacheContents): Rename from AddHashtable.
8447         * class.cs (TypeContainer.parent_container): Remove.
8448         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
8449         (TypeContainer.DoDefineMembers): Don't initialize it.
8450         Update to name changes.
8451         
8452 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
8453
8454         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
8455         that factors the code to check access modifiers on override.  
8456
8457         (PropertyBase): Use the code here.
8458
8459         Patch from Lluis S'anchez, fixes bug #69361.
8460
8461 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
8462
8463         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
8464         routine that is used to report the use of a captured variable
8465         whose address has been taken.
8466
8467         There are two checks: one when variables are being captured and
8468         the other check is when the address of a variable is taken. 
8469         
8470         (because an anonymous methods might be resolved before *or* after
8471         the address has been taken) and 
8472
8473         * expression.cs (Conditional.DoResolve): Remove the special
8474         casing that Martin added to trueExpr and falseExpr being both
8475         NullLiteral.  We get the right behavior now just by introducing
8476         the null_type into the compiler. 
8477
8478         * convert.cs (ExplicitConversion): Change the code to use
8479         null_type instead of testing `expr is NullLiteral'.
8480         (ImplicitConversionStandard): use null_type too.
8481         (ImplicitReferenceConversionExists): use null_type too.
8482         (ImplicitReferenceConversion): use null_type too.
8483
8484         * literal.cs: The type of `NullLiteral' is now null_type instead
8485         of object_type. 
8486         (Resolve): Set the type here.
8487
8488         * typemanager.cs: Introduce null_type.
8489
8490 2004-11-18  Martin Baulig  <martin@ximian.com>
8491
8492         * rootcontext.cs
8493         (RootContext.LookupType): Return a `Type', not a `TypeExpr'.
8494
8495 2004-11-18  Martin Baulig  <martin@ximian.com>
8496
8497         * ecore.cs (TypeExpr.DoResolveAsTypeStep): Make this protected.
8498
8499 2004-11-18  Martin Baulig  <martin@ximian.com>
8500
8501         * generic.cs (Constraints.Resolve): Take an `EmitContext' instead
8502         of a `DeclSpace'.  If one of our constraints is a `ConstructedType',
8503         call ResolveConstructedType() on it to resolve it without checking
8504         constraints.
8505         (Constraints.ResolveTypes): Check them here.
8506         (ConstructedType.DoResolveAsTypeStep): Fully resolve ourselves,
8507         but don't check constraints.
8508         (ConstructedType.ResolveAsTypeTerminal): Override this and also
8509         check constraints here.
8510         (ConstructedType.ResolveConstructedType): New public method.  This
8511         is called from DoResolveAsTypeStep() and Constraints.Resolve() to
8512         resolve ourselves without checking constraints.
8513
8514         * ecore.cs (Expression.ResolveAsTypeTerminal): Make this virtual.
8515
8516 2004-11-18  Martin Baulig  <martin@ximian.com>
8517
8518         * decl.cs
8519         (DeclSpace.CurrentType): Changed type from `TypeExpr' to `Type'.
8520
8521         * delegate.cs (Delegate.DefineType): Always create the EmitContext.
8522
8523 2004-11-18  Martin Baulig  <martin@ximian.com>
8524
8525         * ecore.cs (TypeExpr.ResolveType): Removed.
8526         (Expression.ResolveAsTypeTerminal): We always return a fully
8527         resolved `TypeExpr', so we can just access its `Type'.
8528
8529         * class.cs (TypeContainer.DefineType): Resolve `CurrentType' here.
8530
8531 2004-11-17  Martin Baulig  <martin@ximian.com>
8532
8533         * ecore.cs (IAlias.Type): Replaced with ResolveAsType() to make
8534         sure we don't return any unresolved TypeExpr's.
8535         (TypeAliasExpression): The .ctor now takes an `IAlias' instead of
8536         a `TypeExpr'.
8537         (Expression.ResolveAsTypeTerminal): Make sure `te.Type != null'.
8538
8539         * expression.cs (MemberAccess.ResolveAsTypeStep): Don't return any
8540         unresolved `ConstructedType's.
8541
8542 2004-11-17  Martin Baulig  <martin@ximian.com>
8543
8544         * ecore.cs (TypeExpr.ResolveType): Don't make this virtual.
8545
8546 2004-11-17  Martin Baulig  <martin@ximian.com>
8547
8548         * ecore.cs
8549         (Expression.ResolveAsTypeTerminal): Removed the `bool silent' argument.
8550
8551         * decl.cs (DeclSpace.ResolveType): Removed.
8552         (DeclSpace.ResolveTypeExpr): Removed the `bool silent' argument.
8553
8554 2004-11-17  Martin Baulig  <martin@ximian.com>
8555
8556         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
8557         direction, like FindMembers() does.  Fixes #69546, testcase is in
8558         test-315.cs.    
8559
8560 2004-11-16  Martin Baulig  <martin@ximian.com>
8561
8562         This is based on a patch from Marek Safar, see bug #69082.
8563         Fixes bugs #63705 and #67130.
8564
8565         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
8566         method; create a MemberCache for an interface type and cache the
8567         result.
8568
8569         * decl.cs (IMemberContainer.ParentContainer): Removed.
8570         (IMemberContainer.ParentCache): New property.
8571         (MemberCache.SetupCacheForInterface): Removed.
8572         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
8573         to create a cache for an interface's "parent".
8574
8575         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
8576         interfaces too.
8577
8578 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
8579
8580         * statement.cs: Avoid adding bools to a hashtable.
8581
8582 2004-11-15  Martin Baulig  <martin@ximian.com>
8583
8584         * decl.cs (MemberName.GetPartialName): Removed, use GetTypeName() instead.
8585
8586 2004-11-11  Martin Baulig  <martin@ximian.com>
8587
8588         * typemanager.cs (TypeManager.GetMethodName): New method.
8589
8590         * class.cs (MethodData.Define): Include the generic arity in the
8591         name of an explicit interface; also add it to the method name.
8592
8593         * pending.cs (PendingImplementation.InterfaceMethod): The method
8594         name now includes the generic arity.
8595
8596 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
8597
8598         * expression.cs (Invocation.OverloadResolve): Flag error if we are
8599         calling an unsafe method from a safe location.
8600
8601 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
8602
8603         Fix #69167
8604         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
8605
8606 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
8607
8608         * namespace.cs (VerifyUsing): use GetPartialName instead of
8609         ToString. 
8610
8611 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
8612
8613         * statement.cs (Return.Resolve): Fix regression in typo: if
8614         `in_exc', we have to request a NeedReturnLabel, this was a typo
8615         introduced in the anonymous method check-in.  Fixes #69131.
8616
8617         * Indexers were using the ShortName when defining themselves,
8618         causing a regression in the compiler bootstrap when applying the
8619         patch from 2004-11-02 (first part), now they use their full name
8620         and the bug is gone.
8621
8622 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
8623
8624         * driver.cs: Strip the path from the names of embedded resources. Fixes
8625         #68519.
8626
8627 2004-11-04  Raja R Harinath  <rharinath@novell.com>
8628
8629         Fix error message regression: cs0104-2.cs.
8630         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
8631         (AliasEntry.Resolve): Update.
8632         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
8633         'silent' flag.
8634         (RootContext.LookupType): Update.
8635
8636 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
8637
8638         * cs-parser.jay: Add support for handling accessor modifiers
8639         * class: Add support port accessor modifiers and error checking,
8640         define PropertyMethod.Define as virtual (not abstract anymore)
8641         * ecore.cs: Add checking for proeprties access with access modifiers
8642         * iterators.cs: Modify Accessor constructor call based in the modified
8643         constructor
8644 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
8645
8646         * expression.cs (StringConcat): Handle being called twice,
8647         as when we have a concat in a field init with more than two
8648         ctors in the class
8649
8650 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
8651
8652         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
8653         special case explicit implementations, we should always produce
8654         the .property or .event declaration.
8655         
8656         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
8657         since it will not return correct data if people use this
8658         unresolved in the presence of using statements (see test-313).
8659
8660         * class.cs (MethodData.Define): If we are an explicit interface
8661         implementation, set the method name to the full name of the
8662         interface plus the name of the method.  
8663
8664         Notice that using the method.MethodName.GetFullName() does not
8665         work, as it will only contain the name as declared on the source
8666         file (it can be a shorthand in the presence of using statements)
8667         and not the fully qualifed type name, for example:
8668
8669         using System;
8670
8671         class D : ICloneable {
8672                 object ICloneable.Clone ()  {
8673                 }
8674         }
8675
8676         Would produce a method called `ICloneable.Clone' instead of
8677         `System.ICloneable.Clone'.
8678
8679         * namespace.cs (Alias.Resolve): Use GetPartialName.
8680         
8681 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8682
8683         * cs-parser.jay: Add error 1055 report.
8684
8685 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
8686
8687         * assign.cs (Assign.DoResolve): Only do the transform of
8688         assignment into a New if the types are compatible, if not, fall
8689         through and let the implicit code deal with the errors and with
8690         the necessary conversions. 
8691
8692 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8693
8694         * cs-parser.jay: Add error 1031 report.
8695
8696         * cs-tokenizer.cs: Add location for error 1038.
8697
8698 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8699
8700         * cs-parser.jay: Add error 1016 report.
8701
8702 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8703
8704         * cs-parser.jay: Add errors 1575,1611 report.
8705
8706 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8707
8708         * cs-parser.jay: Add error 1001 report.
8709
8710 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8711
8712         Fix #68850
8713         * attribute.cs (GetMarshal): Add method argument for
8714         caller identification.
8715
8716         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
8717         agument for GetMarshal and RuntimeMissingSupport.
8718
8719 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8720
8721         * attribute.cs (ExtractSecurityPermissionSet): Removed
8722         TypeManager.code_access_permission_type.
8723
8724         * typemanager.cs: Removed TypeManager.code_access_permission_type.
8725
8726 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
8727
8728         * expression.cs (LocalVariableReference.DoResolveLValue): Check
8729         for obsolete use of a variable here.   Fixes regression on errors
8730         cs0619-25 and cs0619-26.
8731
8732 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
8733
8734         Fix #62358, implemented security attribute encoding.
8735
8736         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
8737         Tests permitted SecurityAction for assembly or other types.
8738         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
8739         data from SecurityPermissionAttribute to PermisionSet class.
8740
8741         * class.cs (ApplyAttributeBuilder): Added special handling
8742         for System.Security.Permissions.SecurityAttribute based types.
8743
8744         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
8745         special handling for System.Security.Permissions.SecurityAttribute
8746         based types.
8747
8748         * enum.cs (ApplyAttributeBuilder): Added special handling
8749         for System.Security.Permissions.SecurityAttribute based types.
8750
8751         * parameter.cs (ApplyAttributeBuilder): Added special handling
8752         for System.Security.Permissions.SecurityAttribute based types.
8753
8754         * rootcontext.cs: Next 2 core types.
8755
8756         * typemanager.cs (TypeManager.security_permission_attr_type):
8757         Built in type for the SecurityPermission Attribute.
8758         (code_access_permission_type): Build in type.
8759
8760 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
8761
8762         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
8763         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
8764         all of this information into
8765         EmitContext.EmitCapturedVariableInstance.
8766         
8767         * codegen.cs (EmitCapturedVariableInstance): move here the
8768         funcionality of emitting an ldarg.0 in the presence of a
8769         remapping.   This centralizes the instance emit code.
8770
8771         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
8772         then emit a load of this: it means that we have reached the
8773         topmost ScopeInfo: the one that contains the pointer to the
8774         instance of the class hosting the anonymous method.
8775
8776         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
8777         captures to the topmost CaptureContext.
8778
8779 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
8780
8781         * expression.cs (LocalVariableReference): Move the knowledge about
8782         the iterators into codegen's EmitCapturedVariableInstance.
8783
8784 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
8785
8786         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
8787         all code paths return a value from an anonymous method (it is the
8788         same as the 161 error, but for anonymous methods).
8789
8790 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
8791
8792         The introduction of anonymous methods in the compiler changed
8793         various ways of doing things in the compiler.  The most
8794         significant one is the hard split between the resolution phase
8795         and the emission phases of the compiler.
8796
8797         For instance, routines that referenced local variables no
8798         longer can safely create temporary variables during the
8799         resolution phase: they must do so from the emission phase,
8800         since the variable might have been "captured", hence access to
8801         it can not be done with the local-variable operations from the runtime.
8802         
8803         * statement.cs 
8804
8805         (Block.Flags): New flag `IsTopLevel' to indicate that this block
8806         is a toplevel block.
8807
8808         (ToplevelBlock): A new kind of Block, these are the blocks that
8809         are created by the parser for all toplevel method bodies.  These
8810         include methods, accessors and anonymous methods.
8811
8812         These contain some extra information not found in regular blocks:
8813         A pointer to an optional CaptureContext (for tracking captured
8814         local variables and parameters).  A pointer to the parent
8815         ToplevelBlock.
8816         
8817         (Return.Resolve): Catch missmatches when returning a value from an
8818         anonymous method (error 1662).
8819         Invoke NeedReturnLabel from the Resolve phase instead of the emit
8820         phase.
8821
8822         (Break.Resolve): ditto.
8823
8824         (SwitchLabel): instead of defining the labels during the
8825         resolution phase, we now turned the public ILLabel and ILLabelCode
8826         labels into methods called GetILLabelCode() and GetILLabel() that
8827         only define the label during the Emit phase.
8828
8829         (GotoCase): Track the SwitchLabel instead of the computed label
8830         (its contained therein).  Emit the code by using
8831         SwitchLabel.GetILLabelCode ().
8832
8833         (LocalInfo.Flags.Captured): A new flag has been introduce to track
8834         whether the Local has been captured or not.
8835
8836         (LocalInfo.IsCaptured): New property, used to tell whether the
8837         local has been captured.
8838         
8839         * anonymous.cs: Vastly updated to contain the anonymous method
8840         support.
8841
8842         The main classes here are: CaptureContext which tracks any
8843         captured information for a toplevel block and ScopeInfo used to
8844         track the activation frames for various local variables.   
8845
8846         Each toplevel block has an optional capture context associated
8847         with it.  When a method contains an anonymous method both the
8848         toplevel method and the anonymous method will create a capture
8849         context.   When variables or parameters are captured, they are
8850         recorded on the CaptureContext that owns them, for example:
8851
8852         void Demo () {
8853              int a;
8854              MyDelegate d = delegate {
8855                  a = 1;
8856              }
8857         }
8858
8859         Here `a' will be recorded as captured on the toplevel
8860         CapturedContext, the inner captured context will not have anything
8861         (it will only have data if local variables or parameters from it
8862         are captured in a nested anonymous method.
8863
8864         The ScopeInfo is used to track the activation frames for local
8865         variables, for example:
8866
8867         for (int i = 0; i < 10; i++)
8868                 for (int j = 0; j < 10; j++){
8869                    MyDelegate d = delegate {
8870                         call (i, j);
8871                    }
8872                 }
8873
8874         At runtime this captures a single captured variable `i', but it
8875         captures 10 different versions of the variable `j'.  The variable
8876         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
8877         recorded on a child.  
8878
8879         The toplevel ScopeInfo will also track information like the `this'
8880         pointer if instance variables were referenced (this is necessary
8881         as the anonymous method lives inside a nested class in the host
8882         type of the method). 
8883
8884         (AnonymousMethod): Expanded to track the Toplevel, implement
8885         `AnonymousMethod.Compatible' to tell whether an anonymous method
8886         can be converted to a target delegate type. 
8887
8888         The routine now also produces the anonymous method content
8889
8890         (AnonymousDelegate): A helper class that derives from
8891         DelegateCreation, this is used to generate the code necessary to
8892         produce the delegate for the anonymous method that was created. 
8893
8894         * assign.cs: API adjustments for new changes in
8895         Convert.ImplicitStandardConversionExists.
8896
8897         * class.cs: Adjustments to cope with the fact that now toplevel
8898         blocks are of type `ToplevelBlock'. 
8899
8900         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
8901         insteda of standard blocks.
8902
8903         Flag errors if params arguments are passed to anonymous methods.
8904
8905         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
8906         `CurrentAnonymousMethod' which points to the current Anonymous
8907         Method.  The variable points to the AnonymousMethod class that
8908         holds the code being compiled.  It is set in the new EmitContext
8909         created for the anonymous method.
8910
8911         (EmitContext.Phase): Introduce a variable and an enumeration to
8912         assist in enforcing some rules about when and where we are allowed
8913         to invoke certain methods (EmitContext.NeedsReturnLabel is the
8914         only one that enfonces this right now).
8915
8916         (EmitContext.HaveCaptureInfo): new helper method that returns
8917         whether we have a CapturedContext initialized.
8918
8919         (EmitContext.CaptureVariable): New method used to register that a
8920         LocalInfo must be flagged for capturing. 
8921
8922         (EmitContext.CapturedParameter): New method used to register that a
8923         parameters must be flagged for capturing. 
8924         
8925         (EmitContext.CapturedField): New method used to register that a
8926         field must be flagged for capturing. 
8927
8928         (EmitContext.HaveCapturedVariables,
8929         EmitContext.HaveCapturedFields): Return whether there are captured
8930         variables or fields. 
8931
8932         (EmitContext.EmitMethodHostInstance): This is used to emit the
8933         instance for the anonymous method.  The instance might be null
8934         (static methods), this (for anonymous methods that capture nothing
8935         and happen to live side-by-side with the current method body) or a
8936         more complicated expression if the method has a CaptureContext.
8937
8938         (EmitContext.EmitTopBlock): Routine that drives the emission of
8939         code: it will first resolve the top block, then emit any metadata
8940         and then emit the code.  The split is done so that we can extract
8941         any anonymous methods and flag any captured variables/parameters.
8942         
8943         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
8944         during this phase, the ILGenerator should not be used as labels
8945         and local variables declared here might not be accessible to any
8946         code that is part of an anonymous method.  
8947
8948         Exceptions to this include the temporary variables that are
8949         created by some statements internally for holding temporary
8950         variables. 
8951         
8952         (EmitContext.EmitMeta): New routine, in charge of emitting all the
8953         metadata for a cb
8954
8955         (EmitContext.TemporaryReturn): This method is typically called
8956         from the Emit phase, and its the only place where we allow the
8957         ReturnLabel to be defined other than the EmitMeta.  The reason is
8958         that otherwise we would have to duplicate a lot of logic in the
8959         Resolve phases of various methods that today is on the Emit
8960         phase. 
8961
8962         (EmitContext.NeedReturnLabel): This no longer creates the label,
8963         as the ILGenerator is not valid during the resolve phase.
8964
8965         (EmitContext.EmitThis): Extended the knowledge in this class to
8966         work in anonymous methods in addition to iterators. 
8967
8968         (EmitContext.EmitCapturedVariableInstance): This emits whatever
8969         code is necessary on the stack to access the instance to a local
8970         variable (the variable will be accessed as a field).
8971
8972         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
8973         EmitContext.EmitAddressOfParameter): Routines to support
8974         parameters (not completed at this point). 
8975         
8976         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
8977         will also remove the parameters.
8978
8979         * convert.cs (Convert): Define a `ConstantEC' which points to a
8980         null.  This is just to prefity some code that uses
8981         ImplicitStandardConversion code and do not have an EmitContext
8982         handy.
8983
8984         The idea is to flag explicitly that at that point in time, it is
8985         known that the conversion will not trigger the delegate checking
8986         code in implicit conversions (which requires a valid
8987         EmitContext). 
8988
8989         Everywhere: pass new EmitContext parameter since
8990         ImplicitStandardConversionExists now requires it to check for
8991         anonymous method conversions. 
8992
8993         (Convert.ImplicitStandardConversionExists): If the type of an
8994         expression is the anonymous_method_type, and the type is a
8995         delegate, we invoke the AnonymousMethod.Compatible method to check
8996         whether an implicit conversion is possible. 
8997
8998         (Convert.ImplicitConversionStandard): Only do implicit method
8999         group conversions if the language level is not ISO_1.
9000
9001         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
9002         MethodInfo for the Invoke method.  used by Delegate and
9003         AnonymousDelegate.
9004
9005         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
9006         method conversions if the target type is a delegate.
9007
9008         Removed extra debugging nops.
9009
9010         (LocalVariableReference): Turn the `local_info' into a public
9011         field. 
9012
9013         Add `prepared' field, the same hack used for FieldExprs to cope
9014         with composed assignments, as Local variables do not necessarily
9015         operate purely on the stack as they used to: they can be captured
9016         fields. 
9017
9018         Add `temp' for a temporary result, like fields.
9019
9020         Refactor DoResolve and DoResolveLValue into DoResolveBase.
9021
9022         It now copes with Local variables that are captured and emits the
9023         proper instance variable to load it from a field in the captured
9024         case. 
9025
9026         (ParameterReference.DoResolveBase): During the resolve phase,
9027         capture parameters if we are in an anonymous method.
9028
9029         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
9030         anonymous method, use the EmitContext helper routines to emit the
9031         parameter reference.
9032
9033         * iterators.cs: Set RemapToProxy to true/false during the
9034         EmitDispose class.
9035
9036         * parameters.cs (GetParameterByName): New helper method. 
9037
9038         * typemanager.cs (anonymous_method_type) a new type that
9039         represents an anonyous method.  This is always an internal type,
9040         used as a fencepost to test against the anonymous-methodness of an
9041         expression. 
9042         
9043 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
9044
9045         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
9046         561 report.
9047         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
9048
9049 2004-11-10  Martin Baulig  <martin@ximian.com>
9050
9051         * expression.cs (Invocation.BetterFunction): If two methods have
9052         equal parameter types, but only one of them is generic, the
9053         non-generic one wins.
9054         (New.DoResolve): Don't set `is_struct' to false if we're a generic
9055         instance; just use `Type.IsValueType' to determine whether
9056         something is a struct or not.
9057         (MemberAccess.DoResolveAsTypeStep): Don't modify the `args' field,
9058         so we can be called multiple times.
9059
9060 2004-11-10  Martin Baulig  <martin@ximian.com>
9061
9062         * generic.cs (TypeParameter.DefineConstraints): New public method.
9063         (TypeParameter.CheckAccessLevel): Override this and return true.
9064         (ConstructedType.ResolveType): Renamed to DoResolveType(), don't
9065         override ResolveType() anymore.
9066         (ConstructedType.DoResolveAsTypeStep): Call DoResolveType() here.
9067
9068 2004-11-10  Martin Baulig  <martin@ximian.com>
9069
9070         * rootcontext.cs (RootContext.LookupType): If we're a nested type,
9071         call DeclSpace.ResolveNestedType() on it.
9072
9073 2004-11-10  Martin Baulig  <martin@ximian.com>
9074
9075         * support.cs (ReflectionParameters.ParameterModifier): If `gpd' is
9076         non-null, call ParameterModifier() on it.
9077
9078 2004-11-10  Martin Baulig  <martin@ximian.com>
9079
9080         * iterators.cs
9081         (Iterators): Added `current_type' and `this_type' fields.
9082         (Iterators.DefineIterator): Create a new EmitContext and store it
9083         in `ec'; compute `this_type'.
9084
9085 2004-11-10  Martin Baulig  <martin@ximian.com>
9086
9087         * typemanager.cs
9088         (TypeManager.IsPrivateAccessible): New public method.
9089         (Closure.Filter): Use IsPrivateAccessible() instead of IsEqual().
9090
9091 2004-11-10  Martin Baulig  <martin@ximian.com>
9092
9093         * class.cs (TypeContainer.DefineType): Call
9094         TypeBuilder.DefineGenericParameters() before resolving the type
9095         parameters.
9096         (MethodData.parent_method): New protected field.
9097         (MethodData..ctor): Added `MethodInfo parent_method' argument.
9098         (MethodData.Define): Compute `parent_method'.
9099
9100         * decl.cs
9101         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
9102         (MemberCore.GetClsCompliantAttributeValue): Likewise.
9103         (DeclSpace.ec): New protected field; store the EmitContext here.
9104         (DeclSpace.EmitContext): New public property.
9105         (DeclSpace.ResolveType): Un-comment from the [Obsolte] attribute.
9106         (DeclSpace.ResolveNestedType): New public method.
9107         (DeclSpace.ResolveTypeExpr): Just call ResolveAsTypeTerminal() here.
9108         (DeclSpace.NestedAccessible): Added `Type tb' argument.
9109         (DeclSpace.FamilyAccessible): Likewise.
9110         (DeclSpace.FindType): Call ResolveNestedType() for nested types.
9111         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
9112         EmitContext.
9113
9114         * delegate.cs (Delegate.Define): Store the EmitContext in the `ec'
9115         field.
9116
9117         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
9118         (Enum.Emit): Don't create a new EmitContext.
9119
9120 2004-10-18  Martin Baulig  <martin@ximian.com>
9121
9122         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
9123         `Type' directly, but call ResolveType() on it.
9124         (Catch.Resolve): Likewise.
9125         (Foreach.Resolve): Likewise.
9126
9127 2004-10-18  Martin Baulig  <martin@ximian.com>
9128
9129         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
9130         `Type' directly, but call ResolveType() on it.
9131         (Probe.DoResolve): Likewise.
9132         (ArrayCreation.LookupType): Likewise.
9133         (TypeOf.DoResolve): Likewise.
9134         (SizeOf.DoResolve): Likewise.
9135
9136 2004-10-18  Raja R Harinath  <rharinath@novell.com>
9137
9138         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
9139         the ResolveType.
9140
9141 2004-10-17  John Luke  <john.luke@gmail.com>
9142
9143         * class.cs (Operator.GetSignatureForError): use CSharpName
9144
9145         * parameter.cs (Parameter.GetSignatureForError): Returns
9146         correct name even if was not defined.
9147
9148 2004-10-13  Raja R Harinath  <rharinath@novell.com>
9149
9150         Fix #65816.
9151         * class.cs (TypeContainer.EmitContext): New property.
9152         (DefineNestedTypes): Create an emitcontext for each part.
9153         (MethodCore.DoDefineParameters): Use container's emitcontext.
9154         Pass type array to InternalParameters.
9155         (MemberBase.DoDefine): Use container's emitcontext.
9156         (FieldMember.Define): Likewise.
9157         (Event.Define): Likewise.
9158         (SetMethod.GetParameterInfo): Change argument to EmitContext.
9159         Pass type array to InternalParameters.
9160         (SetIndexerMethod.GetParameterInfo): Likewise.
9161         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
9162         * delegate.cs (Define): Pass emitcontext to
9163         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
9164         array to InternalParameters.
9165         * expression.cs (ParameterReference.DoResolveBase): Pass
9166         emitcontext to GetParameterInfo.
9167         (ComposedCast.DoResolveAsTypeStep): Remove check on
9168         ec.ResolvingTypeTree.
9169         * parameter.cs (Parameter.Resolve): Change argument to
9170         EmitContext.  Use ResolveAsTypeTerminal.
9171         (Parameter.GetSignature): Change argument to EmitContext.
9172         (Parameters.ComputeSignature): Likewise.
9173         (Parameters.ComputeParameterTypes): Likewise.
9174         (Parameters.GetParameterInfo): Likewise.
9175         (Parameters.ComputeAndDefineParameterTypes): Likewise.
9176         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
9177         * support.cs (InternalParameters..ctor): Remove variant that takes
9178         a DeclSpace.
9179         * typemanager.cs (system_intptr_expr): New.
9180         (InitExpressionTypes): Initialize it.
9181
9182 2004-10-12  Chris Toshok  <toshok@ximian.com>
9183
9184         * cs-parser.jay: fix location for try_statement and catch_clause.
9185
9186 2004-10-18  Martin Baulig  <martin@ximian.com>
9187
9188         * class.cs (FieldMember.Define): Don't access the TypeExpr's
9189         `Type' directly, but call ResolveType() on it.
9190         (MemberBase.DoDefine): Likewise.
9191
9192         * expression.cs (New.DoResolve): Don't access the TypeExpr's
9193         `Type' directly, but call ResolveType() on it.
9194         (ComposedCast.DoResolveAsTypeStep): Likewise.
9195
9196         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
9197         `Type' directly, but call ResolveType() on it.
9198
9199 2004-10-17  John Luke  <john.luke@gmail.com>
9200
9201         * class.cs (Operator.GetSignatureForError): use CSharpName
9202
9203         * parameter.cs (Parameter.GetSignatureForError): Returns
9204         correct name even if was not defined.
9205
9206 2004-10-13  Raja R Harinath  <rharinath@novell.com>
9207
9208         Fix #65816.
9209         * class.cs (TypeContainer.EmitContext): New property.
9210         (DefineNestedTypes): Create an emitcontext for each part.
9211         (MethodCore.DoDefineParameters): Use container's emitcontext.
9212         Pass type array to InternalParameters.
9213         (MemberBase.DoDefine): Use container's emitcontext.
9214         (FieldMember.Define): Likewise.
9215         (Event.Define): Likewise.
9216         (SetMethod.GetParameterInfo): Change argument to EmitContext.
9217         Pass type array to InternalParameters.
9218         (SetIndexerMethod.GetParameterInfo): Likewise.
9219         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
9220         * delegate.cs (Define): Pass emitcontext to
9221         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
9222         array to InternalParameters.
9223         * expression.cs (ParameterReference.DoResolveBase): Pass
9224         emitcontext to GetParameterInfo.
9225         (ComposedCast.DoResolveAsTypeStep): Remove check on
9226         ec.ResolvingTypeTree.
9227         * parameter.cs (Parameter.Resolve): Change argument to
9228         EmitContext.  Use ResolveAsTypeTerminal.
9229         (Parameter.GetSignature): Change argument to EmitContext.
9230         (Parameters.ComputeSignature): Likewise.
9231         (Parameters.ComputeParameterTypes): Likewise.
9232         (Parameters.GetParameterInfo): Likewise.
9233         (Parameters.ComputeAndDefineParameterTypes): Likewise.
9234         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
9235         * support.cs (InternalParameters..ctor): Remove variant that takes
9236         a DeclSpace.
9237         * typemanager.cs (system_intptr_expr): New.
9238         (InitExpressionTypes): Initialize it.
9239
9240 2004-10-12  Chris Toshok  <toshok@ximian.com>
9241
9242         * cs-parser.jay: fix location for try_statement and catch_clause.
9243
9244 2004-10-07  Raja R Harinath  <rharinath@novell.com>
9245
9246         More DeclSpace.ResolveType avoidance.
9247         * decl.cs (MemberCore.InUnsafe): New property.
9248         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
9249         with newly created EmitContext.
9250         (FieldMember.Define): Likewise.
9251         * delegate.cs (Delegate.Define): Likewise.
9252         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
9253         only if normal name-lookup fails.
9254         (TypeExpr.DoResolve): Enable error-checking.
9255         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
9256         (SizeOf.DoResolve): Likewise.
9257         (ComposedCast.DoResolveAsTypeStep): Likewise.
9258         (StackAlloc.DoResolve): Likewise.
9259         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
9260         (Block.Unsafe): New property.
9261         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
9262         (Unsafe): Set 'unsafe' flag of contained block.
9263         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
9264         (Fixed.Resolve): Likewise.
9265         (Catch.Resolve): Likewise.
9266         (Using.ResolveLocalVariableDecls): Likewise.
9267         (Foreach.Resolve): Likewise.
9268
9269 2004-10-05  John Luke <john.luke@gmail.com>
9270
9271         * cs-parser.jay: add location to error CS0175
9272
9273 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
9274
9275         * ecore.cs (Expression.Constantity): Add support for turning null
9276         into a constant.
9277
9278         * const.cs (Const.Define): Allow constants to be reference types
9279         as long as the value is Null.
9280
9281 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
9282
9283         * namespace.cs (NamespaceEntry.Using): No matter which warning
9284         level is set, check if this namespace name has already been added.
9285
9286 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
9287
9288         * expression.cs: reftype [!=]= null should always use br[true,false].
9289         # 67410
9290
9291 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
9292
9293         Fix #67108
9294         * attribute.cs: Enum conversion moved to 
9295         GetAttributeArgumentExpression to be applied to the all
9296         expressions.
9297
9298 2004-10-01  Raja R Harinath  <rharinath@novell.com>
9299
9300         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
9301         * class.c (TypeContainer.DefineType): Flag error if
9302         base types aren't accessible due to access permissions.
9303         * decl.cs (DeclSpace.ResolveType): Move logic to
9304         Expression.ResolveAsTypeTerminal.
9305         (DeclSpace.ResolveTypeExpr): Thin layer over
9306         Expression.ResolveAsTypeTerminal.
9307         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
9308         Refactor code into NestedAccess.  Use it.
9309         (DeclSpace.NestedAccess): New.
9310         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
9311         argument to silence errors.  Check access permissions.
9312         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
9313         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
9314         (Cast.DoResolve): Likewise.
9315         (New.DoResolve): Likewise.
9316         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
9317         (TypeOf.DoResolve): Likewise.
9318
9319         * expression.cs (Invocation.BetterConversion): Return the Type of
9320         the better conversion.  Implement section 14.4.2.3 more faithfully.
9321         (Invocation.BetterFunction): Make boolean.  Make correspondence to
9322         section 14.4.2.2 explicit.
9323         (Invocation.OverloadResolve): Update.
9324         (Invocation): Remove is_base field.
9325         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
9326         (Invocation.Emit): Likewise.
9327
9328 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
9329
9330         * cs-parser.jay: Reverted 642 warning fix.
9331
9332 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9333
9334         Fix bug #66615
9335         * decl.cs (FindMemberWithSameName): Indexer can have more than
9336         1 argument.
9337
9338 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9339
9340         * expression.cs (LocalVariableReference.DoResolveLValue):
9341         Do not report warning 219 for out values.
9342         (EmptyExpression.Null): New member to avoid extra allocations.
9343
9344 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9345
9346         * cs-parser.jay: Fix wrong warning 642 report.
9347
9348         * cs-tokenizer.cs (CheckNextToken): New helper;
9349         Inspect next character if is same as expected.
9350
9351 2004-09-23  Martin Baulig  <martin@ximian.com>
9352
9353         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
9354         (Convert.ImplicitReferenceConversionExists): Likewise.
9355
9356 2004-11-09  Raja R Harinath  <rharinath@novell.com>
9357
9358         * Makefile (DISTFILES): Comment out a few missing files.
9359
9360 2004-10-29  Raja R Harinath  <rharinath@novell.com>
9361
9362         * Makefile (bootstrap_libs,bootstrap_libfiles): New.
9363         (bootstrap-libs): New target.  Invokes the net_2_0_bootstrap profile.
9364         (gmcs.exe): Invoke bootstrap-libs.
9365         (clean-local): Clean the net_2_0_bootstrap profile too.
9366         (PROGRAM_INSTALL_DIR): New.
9367         (install-local): Use it.
9368
9369 2004-10-13  Martin Baulig  <martin@ximian.com>
9370
9371         * generic.cs (TypeManager.InflatedConstraints): New nested class.
9372         (TypeParameter.DefineType): If we're a method type parameter and
9373         that method is overriding something, "inflate" its constraints.
9374
9375 2004-10-12  Martin Baulig  <martin@ximian.com>
9376
9377         * expression.cs (MemberAccess.DoResolve): If we're a SimpleName
9378         and have type arguments, create and resolve a ConstructedType.
9379
9380 2004-10-12  Martin Baulig  <martin@ximian.com>
9381
9382         * decl.cs (MemberCache.FindMemberToOverride): Use
9383         TypeManager.IsEqual() to compare the parameters and Type.Equals()
9384         to compare the invocationType.
9385
9386         * typemanager.cs (TypeManager.IsEqual): Added support for arrays.
9387         When comparing two type parameters, only do the signature-only
9388         comparision for method type parameters.
9389
9390 2004-10-11  Martin Baulig  <martin@ximian.com>
9391
9392         * report.cs: Don't make --fatal abort on warnings, we have
9393         -warnaserror for that.
9394
9395 2004-10-11  Martin Baulig  <martin@ximian.com>
9396
9397         * typemanager.cs
9398         (TypeManager.IsEqualGenericType): Removed, use IsEqual() instead.
9399         (TypeManager.IsEqual): Call ourself recursively instead of using
9400         Type.IsEqual(). 
9401
9402 2004-10-11  Martin Baulig  <martin@ximian.com>
9403
9404         * class.cs (TypeContainer.DefineType): Only call TypeParameter.Define()
9405         on our own type parameters, not on the ones we inherit from a containing
9406         class.
9407
9408         * expression.cs (Invocation.InferType): Use `==', not `Equals()' for
9409         the comparision.
9410
9411         * generic.cs (TypeParameter.Define): We may only be called once.
9412
9413         * pending.cs (Pending.InterfaceMethod): Call TypeManager.Real_IsEqual()
9414         instead of TypeManager.IsEqual().
9415
9416 2004-09-28  Martin Baulig  <martin@ximian.com>
9417
9418         * generic.cs
9419         (GenericConstraints.EffectiveBaseClass): New public property.
9420         (TypeParameter.GenericConstraints): New public property.
9421         (ConstructedType.CheckConstraints): Improved.
9422
9423         * convert.cs (Convert.TypeParam_EffectiveBaseType): New private method.
9424         (Convert.TypeParameterConversion): New private method; use this in
9425         ImplicitReferenceConversion() and ImplicitReferenceConversionExists()
9426         for all conversions related to type parameters.
9427
9428 2004-09-24  Martin Baulig  <martin@ximian.com>
9429
9430         * convert.cs (Convert.ImplicitReferenceConversion): Added implicit
9431         type parameter conversions for type parameters which are known to
9432         be reference types.
9433
9434 2004-09-24  Martin Baulig  <martin@ximian.com>
9435
9436         * generic.cs (GenericConstraints): Added `IsReferenceType' and
9437         `IsValueType' properties.
9438
9439         * support.cs (ReflectionConstraints): Use
9440         Type.GetGenericParameterConstraints() instead of the old hack.
9441
9442 2004-09-24  Martin Baulig  <martin@ximian.com>
9443
9444         * generic.cs (GenericConstraints): Moved here and made it an
9445         abstract class.
9446
9447         * support.cs (GenericConstraints): Moved to generic.cs.
9448
9449 2004-09-24  Martin Baulig  <martin@ximian.com>
9450
9451         * support.cs
9452         (ReflectionConstraints): Un-nested this class and made it public.
9453
9454         * typemanager.cs
9455         (TypeManager.GetTypeParameterConstraints): New public method.
9456         (TypeManager.HasConstructorConstraint): Use the attributes.
9457
9458 2004-09-24  Martin Baulig  <martin@ximian.com>
9459
9460         * support.cs (GenericConstraints): Replaced `HasConstructor',
9461         `IsReferenceType' and `IsValueType' with `Attributes'.
9462         (ReflectionParameters.ReflectionConstraints): Removed the Create()
9463         method and made the .ctor public.
9464
9465         * generic.cs (Constraints.Attributes): New public property.
9466         (Constraints): Renamed `HasConstructor' -> `HasConstructorConstraint',
9467         `IsReferenceType' -> `HasReferenceTypeConstraint' and
9468         `IsValueType' -> `HasValueTypeConstraint'.
9469
9470 2004-09-23  Martin Baulig  <martin@ximian.com>
9471
9472         * generic.cs (Constraints): Reflect latest runtime changes.
9473
9474 2004-09-23  Martin Baulig  <martin@ximian.com>
9475
9476         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
9477         (Convert.ImplicitReferenceConversionExists): Likewise.
9478
9479 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9480
9481         * class.cs (Operator.Define): Add error 448 and 559 report.
9482         
9483 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9484
9485         * class.cs (MemberBase.IsTypePermitted): New protected
9486         method for checking error CS0610.
9487
9488 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9489
9490         * class.cs (TypeContainer.HasExplicitLayout): New property
9491         Returns whether container has StructLayout attribute set Explicit.
9492         (FieldMember): New abstract class for consts and fields.
9493         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
9494         (Field): Reuse FieldMember.
9495
9496         * const.cs (Const): Reuse FieldMember.
9497
9498         * rootcontext.cs: EmitConstants call moved to class.
9499
9500 2004-09-22  Martin Baulig  <martin@ximian.com>
9501
9502         Marek and me just fixed one of our oldest bugs: #28562 :-)
9503
9504         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
9505
9506         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
9507         we're an EnumConstant, just return that.
9508         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
9509         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
9510         to get the value which'll actually be written into the attribute.
9511         However, we have to use GetValue() to access the attribute's value
9512         in the compiler.        
9513
9514 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9515
9516         * constant.cs (Constant.IsNegative): New abstract property
9517         IsNegative.
9518
9519         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
9520         (StackAlloc.DoResolve): Reused IsNegative.
9521
9522 2004-09-22  Martin Baulig  <martin@ximian.com>
9523
9524         * typemanager.cs (TypeManager.LookupGenericTypeContainer): New
9525         public method; like LookupTypeContainer, but also works for
9526         generic instances.
9527
9528         * report.cs (Report.SymbolRelatedToPreviousError): Use
9529         TypeManager.LookupGenericTypeContainer().       
9530
9531 2004-09-22  Martin Baulig  <martin@ximian.com>
9532
9533         Thanks to Peter Sestoft for this bug report.
9534
9535         * expression.cs (Conditional): If both the `trueExpr' and the
9536         `falseExpr' is a NullLiteral, return a NullLiteral.
9537
9538 2004-09-22  Martin Baulig  <martin@ximian.com>
9539
9540         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
9541         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
9542         for the "get_Current" call.
9543
9544 2004-09-21  Martin Baulig  <martin@ximian.com>
9545
9546         * convert.cs (Convert.ImplicitReferenceConversion): When
9547         converting to an interface type, first check whether we're
9548         converting from a reference type.
9549
9550 2004-09-14  Martin Baulig  <martin@ximian.com>
9551
9552         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
9553
9554 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
9555
9556         Fixed bug #61902
9557         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
9558         called and is obsolete then this member suppress message
9559         when call is inside next [Obsolete] method or type.
9560
9561         * expression.cs: Use TestObsoleteMethodUsage member.
9562
9563 2004-09-14  Martin Baulig  <martin@ximian.com>
9564
9565         * genericparser.cs: Removed.
9566
9567 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
9568
9569         * class.cs (MethodCore.CheckBase): Fix bug #65757.
9570
9571 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
9572
9573         * attribute.cs (Attribute.Resolve): Add error 653 report.
9574
9575         * class.cs (Class.ApplyAttributeBuilder): Add error 641
9576         report.
9577         (Method.ApplyAttributeBuilder): Add error 685 report.
9578         (Operator.Define): Add error 564 report.
9579
9580         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
9581
9582         * expression.cs (Invocation.DoResolve): Add error
9583         245 and 250 report.
9584
9585         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
9586         error 674 report.
9587
9588 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9589
9590         * class.cs (ConstructorInitializer.Resolve):
9591         Wrong error number (515->516).
9592
9593 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9594
9595         * class.cs (Indexer.Define): Add error 631 report.
9596
9597 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9598
9599         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
9600
9601 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9602
9603         * expression.cs (Probe.DoResolve): Add error CS0241 report.
9604
9605 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
9606
9607         * cs-parser.jay: Added error CS0241 report.
9608
9609 2004-09-10  Raja R Harinath  <rharinath@novell.com>
9610
9611         * cs-parser.jay (fixed_statement): Introduce a scope for the
9612         declaration in the 'fixed' statement.
9613
9614 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9615
9616         * cs-parser.jay: Added CS0230 error report.
9617
9618 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9619
9620         * cs-parser.jay: Added errors CS0231 and CS0257 report.
9621
9622 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9623
9624         * expression.cs (Argument.Resolve): Added error CS0192 and
9625         CS0199 report.
9626
9627 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9628
9629         C# 2.0 #pragma warning feature
9630
9631         * cs-tokenizer.cs (PreProcessPragma): New method; 
9632         Handles #pragma directive.
9633
9634         * report.cs (WarningRegions): New class; Support
9635         class for #pragma warning directive. It tests whether
9636         warning is enabled for a given line.
9637
9638 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
9639
9640         * const.cs: Add more descriptive error report, tahnks to
9641         Sebastien. 
9642
9643 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
9644
9645         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
9646
9647 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
9648
9649         * expression.cs: Apply patch from Ben: Remove dead code from
9650         ArrayCreation, and remove the TurnintoConstant call in const.cs,
9651         as that code just threw an exception anwyays.
9652
9653         * const.cs: Remove the call to the turnintoconstant, for details
9654         see bug: #63144
9655         
9656         * literal.cs: The type of the null-literal is the null type;  So
9657         we use a placeholder type (literal.cs:System.Null, defined here)
9658         for it.
9659
9660         * expression.cs (Conditional.DoResolve): Remove some old code that
9661         is no longer needed, conversions have been fixed.
9662
9663         (ArrayCreationExpression.DoResolve): Return false if we fail to
9664         resolve the inner expression.
9665
9666 2004-09-07  Raja R Harinath  <rharinath@novell.com>
9667
9668         Fix test-290.cs.
9669         * cs-parser.jay (delegate_declaration): Record a delegate
9670         declaration as a type declaration.
9671         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
9672
9673 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
9674
9675         * parameter.cs: Do not crash if the type can not be resolved. 
9676
9677         * expression.cs: Report errors with unsafe pointers, fixes #64896
9678
9679 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
9680
9681         * expression.cs: Pointer arith always needs to do a conv.i
9682         if the operand is a long. fix 65320
9683
9684 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9685
9686         Fixed cs0619-37.cs, cs0619-38.cs
9687
9688         * enum.cs (GetObsoleteAttribute): Removed.
9689
9690         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
9691         on Enum member is double staged. The first is tested member
9692         and then enum.
9693
9694 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9695
9696         Fixed #56986, #63631, #65231
9697
9698         * class.cs: (TypeContainer.AddToMemberContainer): New method,
9699         adds member to name container.
9700         (TypeContainer.AddToTypeContainer): New method, adds type to
9701         name container.
9702         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
9703         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
9704         AddOperator): Simplified by reusing AddToMemberContainer.
9705         (TypeContainer.UserDefinedStaticConstructor): Changed to property
9706         instead of field.
9707         (Method.CheckForDuplications): Fixed implementation to test all
9708         possibilities.
9709         (MemberBase): Detection whether member is explicit interface
9710         implementation is now in constructor.
9711         (MemberBase.UpdateMemberName): Handles IndexerName.
9712         (Accessor): Changed to keep also location information.
9713         (AbstractPropertyEventMethod): Is derived from MemberCore.
9714         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
9715         will be emited or not.
9716         (PropertyBase.AreAccessorsDuplicateImplementation):
9717         Tests whether accessors are not in collision with some method.
9718         (Operator): Is derived from MethodCore to simplify common
9719         operations.
9720
9721         * decl.cs (Flags.TestMethodDuplication): Test for duplication
9722         must be performed.
9723         (DeclSpace.AddToContainer): Adds the member to defined_names
9724         table. It tests for duplications and enclosing name conflicts.
9725
9726         * enum.cs (EnumMember): Clean up to reuse the base structures
9727
9728 2004-09-03  Martin Baulig  <martin@ximian.com>
9729
9730         Merged latest changes into gmcs.  Please keep this comment in
9731         here, it makes it easier for me to see what changed in MCS since
9732         the last time I merged.
9733
9734 2004-09-03  Martin Baulig  <martin@ximian.com>
9735
9736         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9737         into TypeContainer, to make partial classes work again.
9738
9739 2004-09-03  Martin Baulig  <martin@ximian.com>
9740
9741         * rootcontext.cs (RootContext.V2): Removed.
9742
9743 2004-03-23  Martin Baulig  <martin@ximian.com>
9744
9745         * expression.cs (Invocation.OverloadResolve): Added `bool
9746         may_fail' argument and use it instead of the Location.IsNull() hack.
9747
9748 2004-09-09  Martin Baulig  <martin@ximian.com>
9749
9750         * cs-parser.jay (namespace_declaration): Fixed CS0134 reporting.
9751
9752 2004-09-09  Martin Baulig  <martin@ximian.com>
9753
9754         * generic.cs (TypeParameter.DefineType): Added support for
9755         explicit interface methods.
9756
9757 2004-09-09  Martin Baulig  <martin@ximian.com>
9758
9759         * README.Changes: New document.  Started to list important changes
9760         between MCS and GMCS here.
9761
9762 2004-09-08  Martin Baulig  <martin@ximian.com>
9763
9764         * class.cs
9765         (TypeContainer.CheckRecursiveDefinition): New protected method.
9766         (TypeContainer.DefineType): Move the CS0146 check into
9767         CheckRecursiveDefinition().     
9768
9769 2004-09-06  Martin Baulig  <martin@ximian.com>
9770
9771         * generic.cs (ConstructedType.CheckConstraints): Allow builtin
9772         types for the constructor constraint.
9773
9774 2004-09-03  Martin Baulig  <martin@ximian.com>
9775
9776         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9777         into TypeContainer, to make partial classes work again.
9778
9779 2004-09-03  Martin Baulig  <martin@ximian.com>
9780
9781         * rootcontext.cs (RootContext.V2): Removed.
9782
9783 2004-03-23  Martin Baulig  <martin@ximian.com>
9784
9785         * expression.cs (Invocation.OverloadResolve): Added `bool
9786         may_fail' argument and use it instead of the Location.IsNull() hack.
9787
9788 2004-09-03  Martin Baulig  <martin@ximian.com>
9789
9790         Merged latest changes into gmcs.  Please keep this comment in
9791         here, it makes it easier for me to see what changed in MCS since
9792         the last time I merged.
9793
9794 2004-09-03  Raja R Harinath  <rharinath@novell.com>
9795
9796         Fix #61128.
9797         * expression.cs (BetterConversion): Don't allow either conversion 
9798         to be null.  Remove redundant implicit conversion test when 'q ==
9799         null' -- when this function is invoked, we already know that the
9800         implicit conversion exists.
9801         (BetterFunction): Assume that 'best' is non-null.  Remove
9802         redundant reimplementation of IsApplicable when 'best' is null.
9803         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
9804         number of arguments.
9805         (IsAncestralType): Extract from OverloadResolve.
9806         (OverloadResolve): Make robust to the MethodGroupExpr being
9807         unsorted.  Implement all the logic of Section 14.5.5.1, and
9808         support overloading of methods from multiple applicable types.
9809         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
9810
9811         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
9812         (RealError, Warning): Append type of report to related symbol.
9813
9814 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
9815
9816         * enum.cs: Fixed CLS-Compliance checks for enum members.
9817         Error tests cs3008-8.cs, cs3014-8.cs
9818
9819 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9820
9821         Fixed bug #62342, #63102
9822         * class.cs: ImplementIndexer uses member.IsExplicitImpl
9823         like ImplementMethod.
9824
9825 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9826
9827         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9828         Fixed bug #65170.
9829
9830 2004-09-02  Martin Baulig  <martin@ximian.com>
9831
9832         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9833         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9834         on the MethodBase.
9835
9836 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
9837
9838         C# 2.0 Static classes implemented
9839
9840         * class.cs (TypeContainer): instance_constructors,
9841         initialized_fields, initialized_static_fields,
9842         default_constructor, base_inteface_types are protected to be
9843         accessible from StaticClass.
9844         (TypeContainer.DefineDefaultConstructor): New virtual method
9845         for custom default constructor generating
9846         (StaticClass): New class to handle "Static classes" feature.
9847
9848         * cs-parser.jay: Handle static keyword on class like instance
9849         of StaticClass.
9850
9851         * driver.cs: Added "/langversion" command line switch with two
9852         options (iso-1, default).
9853
9854 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
9855
9856         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
9857
9858 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
9859
9860         * delegate.cs: Style.
9861
9862 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
9863
9864         * delegate.cs: Add seperate instance expr field for miguel.
9865
9866 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9867
9868         * PointerArithmetic (Resolve): make sure we are not doing
9869         pointer arith on void*. Also, make sure we are resolved
9870         by not setting eclass until resolve.
9871
9872         All callers: Make sure that PointerArithmetic gets resolved.
9873
9874 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9875
9876         * ArrayCreation (LookupType): If the type does not resolve 
9877         to an array, give an error.
9878
9879 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
9880
9881         * statement.cs (Try.Resolve): Fixed bug #64222
9882
9883 2004-08-27  Martin Baulig  <martin@ximian.com>
9884
9885         * class.cs
9886         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9887         crash here.     
9888
9889 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9890
9891         * ecore.cs (Constantify): Get underlying type via
9892         System.Enum.GetUnderlyingType to avoid StackOverflow on the
9893         Windows in special cases.
9894
9895 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9896
9897         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
9898         for obtaining also private methods.
9899         (GetRemoveMethod): Used GetRemoveMethod (true)
9900         for obtaining also private methods.
9901
9902 2004-09-02  Martin Baulig  <martin@ximian.com>
9903
9904         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9905         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9906         on the MethodBase.
9907
9908 2004-08-27  Martin Baulig  <martin@ximian.com>
9909
9910         * class.cs
9911         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9912         crash here.     
9913
9914 2004-08-25  Martin Baulig  <martin@ximian.com>
9915
9916         * support.cs (ReflectionParameters..ctor): If this is a generic
9917         method, retrieve and store its type parameters.
9918         (InternalParameters..ctor): Added `TypeParameter[]' argument.
9919         (ReflectionParameters.GenericConstraints): The argument specifies
9920         the type parameter, not the method parameter.
9921         (InternalParameters.GenericConstraints): Likewise.
9922
9923         * generic.cs (TypeParameter.DefineType): Correctly handle
9924         constraints wrt. generic methods in interfaces and their
9925         implementations.        
9926
9927 2004-08-24  Martin Baulig  <martin@ximian.com>
9928
9929         * generic.cs (TypeParameter.IsSubclassOf): New public method.
9930         (Constraints.IsSubclassOf): New internal method.
9931
9932         * typemanager.cs (TypeManager.FindMembers): Added special support
9933         for GenericTypeParameterBuilder's.      
9934         (TypeManager.IsSubclassOf, IsFamilyAccessible): Added support for
9935         type parameters.
9936
9937 2004-08-24  Martin Baulig  <martin@ximian.com>
9938
9939         * typemanager.cs
9940         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
9941         this for accessibility checks.
9942         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
9943         IsNestedFamilyAccessible.
9944         (TypeManager.IsSubclassOf): New method, do what the name actually
9945         says.   
9946
9947 2004-08-24  Martin Baulig  <martin@ximian.com>
9948
9949         * expression.cs (MemberAccess.DoResolve): When resolving ourselves
9950         as a SimpleName, include the generic arity.
9951
9952 2004-08-24  Martin Baulig  <martin@ximian.com>
9953
9954         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
9955         MethodAttributes.HideBySig for operators.
9956
9957 2004-08-23  Martin Baulig  <martin@ximian.com>
9958
9959         Back to the old error reporting system :-)
9960
9961         * report.cs (Message): Removed.
9962         (Report.MessageData, ErrorData, WarningData): Removed.
9963         (Report.Error, Warning): Back to the old system.
9964
9965 2004-08-23  Martin Baulig  <martin@ximian.com>
9966
9967         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
9968
9969         * class.cs (TypeContainer.ParentContainer): New public virtual
9970         method; replaces the explicit interface implementation.
9971         (ClassPart.ParentContainer): Override.
9972
9973 2004-08-23  Martin Baulig  <martin@ximian.com>
9974
9975         * statement.cs (Switch): Added support for constant switches; see
9976         #59428 or test-285.cs.
9977
9978 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9979
9980         Fixed bug #62740.
9981         * statement.cs (GetEnumeratorFilter): Removed useless
9982         logic because C# specs is strict. GetEnumerator must be
9983         public.
9984
9985 2004-08-22  Martin Baulig  <martin@ximian.com>
9986
9987         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
9988         a switch and may break, reset the barrier.  Fixes #59867.
9989
9990 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9991
9992         CLS-Compliance speed up (~5% for corlib)
9993
9994         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
9995         New method. Tests container for CLS-Compliant names
9996
9997         * class.cs (TypeContainer.VerifyClsName): New method.
9998         Checks whether container name is CLS Compliant.
9999         (Constructor): Implements IMethodData.
10000
10001         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
10002         low-case table for CLS Compliance test.
10003         (MemberCache.VerifyClsParameterConflict): New method.
10004         Checks method parameters for CS3006 error.
10005
10006         * enum.cs (EnumMember): Is derived from MemberCore.
10007         (Enum.VerifyClsName): Optimized for better performance.
10008
10009 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
10010
10011         * report.cs: Renamed Error_T to Error and changed all
10012         references.
10013
10014 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
10015
10016         * class.cs (TypeContainer.IndexerArrayList): New inner class
10017         container for indexers.
10018         (TypeContainer.DefaultIndexerName): New constant for default
10019         indexer name. Replaced all "Item" with this constant.
10020         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
10021
10022         * typemanager.cs (TypeManager.default_member_ctor): Cache here
10023         DefaultMemberAttribute constructor.
10024
10025 2004-08-05  Martin Baulig  <martin@ximian.com>
10026
10027         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
10028         Fix bug #59429.
10029
10030 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
10031
10032         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
10033         multi platforms problem.
10034
10035         * compiler.csproj: Included shared files.
10036
10037 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
10038
10039         Fix bug 60333, 55971 in the more general way
10040         * attribute.cs (Attribute.GetAttributeArgumentExpression):
10041         Added arg_type argument for constant conversion.
10042         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
10043
10044 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
10045
10046         Fix bug #59760
10047         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
10048         OperatorArrayList, MethodCoreArrayList for typecontainer
10049         containers. Changed class member types to these new types.
10050         (MethodArrayList.DefineMembers): Added test for CS0659.
10051
10052 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
10053
10054         * cfold.cs: Synchronize the folding with the code in expression.cs
10055         Binary.DoNumericPromotions for uint operands.
10056
10057         * attribute.cs: Revert patch from Raja, it introduced a regression
10058         while building Blam-1.2.1 (hard to isolate a test case).
10059
10060 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
10061
10062         Fix for #55382
10063         * class.cs:
10064         (TypeContainer.Define): Renamed to DefineContainerMembers because of
10065         name collision.
10066         (MethodCore.parent_method): New member. The method we're overriding
10067         if this is an override method.
10068         (MethodCore.CheckBase): Moved from Method class and made common.
10069         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
10070         private.
10071         (MethodCore.CheckForDuplications): New abstract method. For custom
10072         member duplication search in a container
10073         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
10074         method and its return type.
10075         (Event.conflict_symbol): New member. Symbol with same name in the
10076         parent class.
10077
10078         * decl.cs:
10079         (MemberCache.FindMemberWithSameName): New method. The method
10080         is looking for conflict with inherited symbols.
10081
10082 2004-08-04  Martin Baulig  <martin@ximian.com>
10083
10084         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
10085
10086         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
10087
10088 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
10089
10090         * report.cs (Message): New enum for better error, warning reference in
10091         the code.
10092         (MessageData): New inner abstract class. It generally handles printing of
10093         error and warning messages.
10094         Removed unused Error, Warning, Message methods.
10095
10096 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
10097
10098         Fix for cs0592-8.cs test
10099         * attribute.cs
10100         (Attributable.ValidAttributeTargets): Made public.
10101         (Attribute.ExplicitTarget): New member for explicit target value.
10102         (Attribute.CheckTargets): Now we translate explicit attribute
10103         target to Target here.
10104
10105 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
10106
10107         * ecore.cs (MethodGroupExpr): new IsBase property.
10108
10109         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
10110
10111         * delegate.cs (DelegateCreation): store a MethodGroupExpr
10112         rather than an instance expr.
10113
10114         (DelegateCreation.Emit): Use the method group rather than
10115         the instance expression. Also, if you have base.Foo as the
10116         method for a delegate, make sure to emit ldftn, not ldftnvirt.
10117
10118         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
10119
10120         (NewDelegate.DoResolve): Only check for the existance of Invoke
10121         if the method is going to be needed. Use MethodGroupExpr.
10122
10123         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
10124
10125         * expression.cs: For pointer arith., make sure to use
10126         the size of the type, not the size of the pointer to
10127         the type.
10128
10129 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
10130
10131         Fix for #60722
10132         * class.cs (Class): Added error CS0502 test.
10133
10134 2004-08-03  John Luke  <jluke@cfl.rr.com>
10135             Raja R Harinath  <rharinath@novell.com>
10136
10137         Fix for #60997.
10138         * attribute.cs (Attribute.complained_before): New flag.
10139         (Attribute.ResolveType, Attribute.Resolve),
10140         (Attribute.DefinePInvokeMethod): Set it.
10141         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
10142         
10143 2004-08-03  Martin Baulig  <martin@ximian.com>
10144
10145         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
10146         use a user-defined operator; we still need to do numeric
10147         promotions in case one argument is a builtin type and the other
10148         one has an implicit conversion to that type.  Fixes #62322.
10149
10150 2004-08-18  Martin Baulig  <martin@ximian.com>
10151
10152         * class.cs (Method.Define): Use the correct method name when
10153         creating the MethodBuilder for a generic method.
10154
10155 2004-08-17  Martin Baulig  <martin@ximian.com>
10156
10157         * generic.cs (Constraints): Support type parameter constraints.
10158
10159 2004-08-16  Martin Baulig  <martin@ximian.com>
10160
10161         * cs-tokenizer.cs (Tokenizer.TypeOfParsing): New public property.
10162         (Token.GENERIC_DIMENSION): New token; this is returned if we
10163         encounter an unbound generic type in a typeof() expression.
10164
10165         * cs-parser.jay (opt_type_argument_list): Added GENERIC_DIMENSION;
10166         this token is only generated while parsing a typeof() expression.
10167         (typeof_expression): Removed the old unbound_type hack.
10168
10169         * generic.cs (TypeArguments.IsUnbound): New public property.
10170
10171         * decl.cs (MemberName): Added support for unbound types.
10172
10173 2004-08-14  Martin Baulig  <martin@ximian.com>
10174
10175         * typemanager.cs
10176         (TypeManager.IsEqualGenericInstance): New static method.
10177         (TypeManager.IsSubclassOrNestedChildOf, IsSubclassOf): This is
10178         just used to check accessibility, so follow the rules of 26.1.6.        
10179
10180         * expression.cs (MemberAccess.ResolveAsTypeStep): Return a
10181         ConstructedType instead of a TypeExpression if we have type arguments.
10182
10183         * cs-parser.jay (typeof_expression): Support unbound generic types.
10184
10185         * ecore.cs (UnboundTypeExpression): New public class.
10186
10187 2004-08-12  Martin Baulig  <martin@ximian.com>
10188
10189         * typemanager.cs (TypeManager.IsNestedChildOf): Use
10190         TypeManager.IsEqual() rather than `=='.
10191
10192         * decl.cs (DeclSpace.CheckAccessLevel): Use `tb.FullName' for
10193         generic instances as well.
10194
10195 2004-08-12  Martin Baulig  <martin@ximian.com>
10196
10197         * expression.cs (Invocation.InferType): We can only infer method
10198         type parameters.  Fixes #62647.
10199
10200 2004-08-11  Martin Baulig  <martin@ximian.com>
10201
10202         * class.cs (TypeContainer.DefineType): Create the TypeBuilder
10203         before resolving the base classes.
10204
10205 2004-08-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
10206
10207         * Makefile: install .mdb file too.
10208
10209 2004-08-05  Martin Baulig  <martin@ximian.com>
10210
10211         * ecore.cs (FieldExpr.DoResolveLValue): If we're resolving a field
10212         initializer, the current type is just the TypeBuilder, not the
10213         instantiated generic type.
10214         (FieldExpr.IsFieldInitializer): New public property.
10215
10216 2004-08-04  Martin Baulig  <martin@ximian.com>
10217
10218         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
10219
10220         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
10221
10222 2004-08-03  Martin Baulig  <martin@ximian.com>
10223
10224         * class.cs (MethodData.Define): If we're an explicit
10225         implementation, remove the generic arity from the type name.
10226
10227 2004-08-03  Martin Baulig  <martin@ximian.com>
10228
10229         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
10230         use a user-defined operator; we still need to do numeric
10231         promotions in case one argument is a builtin type and the other
10232         one has an implicit conversion to that type.  Fixes #62322.
10233
10234 2004-08-02  Martin Baulig  <martin@ximian.com>
10235
10236         * class.cs (TypeContainer.ifaces): Make this a `Type[]', not a
10237         `TypeExpr[]' array.
10238         (TypeContainer.GetClassBases): Return the unexpanded list of
10239         interfaces; we expand them later.
10240         (TypeContainer.DefineType): After creating the TypeBuilder, call
10241         TypeManager.ExpandInterfaces() to get an expanded and resolved
10242         list of interfaces.
10243
10244         * ecore.cs (TypeExpr.GetInterfaces): Removed
10245
10246         * generics.cs (Constraints.InterfaceConstraints): Remove.
10247         (TypeParameter.DefineType): Call TypeManager.RegisterBuilder() to
10248         register the interface constraints.
10249
10250         * typemanager.cs
10251         (TypeManager.AddUserType): Removed the `ifaces' argument.
10252         (TypeManager.AddTypeParameter): Likewise.
10253         (TypeManager.AddUserInterface): Removed, was unused.
10254         (TypeManager.RegisterBuilder): Take a `Type[]' instead of a
10255         `TypeExpr[]' array for the interfaces.
10256         (TypeManager.ExpandInterfaces): Call this after the TypeBuilder
10257         has been defined, returns a list of the resolved interfaces types.
10258         (TypeManager.GetInterfaces): Return a `Type[]', not a `TypeExpr[]'.
10259         (TypeManager.GetExplicitInterfaces): Likewise.  
10260
10261 2004-08-02  Martin Baulig  <martin@ximian.com>
10262
10263         * expression.cs (Invocation.EmitCall): If we're invoking a method
10264         on a type parameter, use the new `Constrained' prefix opcode.
10265
10266 2004-08-02  Martin Baulig  <martin@ximian.com>
10267
10268         * statement.cs (LocalInfo.Flags): Added `IsThis'.
10269         (LocalInfo.IsThis): New public property.
10270         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
10271
10272 2004-08-01  Martin Baulig  <martin@ximian.com>
10273
10274         * class.cs (TypeContainer.GetClassBases): Don't set the default
10275         here since we may get called from GetPartialBases().
10276         (TypeContainer.DefineType): If GetClassBases() didn't return a
10277         parent, use the default one.
10278
10279 2004-07-30  Martin Baulig  <martin@ximian.com>
10280
10281         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
10282
10283         * class.cs (SourceMethod): New public class, derive from the
10284         symbol writer's ISourceMethod.
10285         (Method): Use the new symbol writer API.
10286
10287         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
10288         as argument and use the new symbol writer.
10289
10290         * location.cs
10291         (SourceFile): Implement the symbol writer's ISourceFile.
10292         (Location.SymbolDocument): Removed.
10293         (Location.SourceFile): New public property.
10294
10295         * symbolwriter.cs: Use the new symbol writer API.
10296
10297 2004-07-30  Raja R Harinath  <rharinath@novell.com>
10298
10299         * Makefile (install-local): Remove.  Functionality moved to
10300         executable.make.
10301
10302 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
10303
10304         * Makefile: Install mcs.exe.config file together with mcs.exe.
10305         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
10306         correct runtime version.
10307         
10308 2004-07-25  Martin Baulig  <martin@ximian.com>
10309
10310         * class.cs
10311         (TypeContainer.RegisterOrder): Removed, this was unused.
10312         (TypeContainer, interface_order): Removed.
10313         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
10314         TypeContainer as argument since we can also be called with a
10315         `PartialContainer' for a partial class/struct/interface.
10316         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
10317         of checking whether we're an `Interface' - we could be a
10318         `PartialContainer'.
10319         (PartialContainer.Register): Override; call
10320         AddClass()/AddStruct()/AddInterface() on our parent.
10321
10322         * cs-parser.jay (interface_member_declaration): Add things to the
10323         `current_container', not the `current_class'.
10324
10325         * rootcontext.cs (RegisterOrder): The overloaded version which
10326         takes an `Interface' was unused, removed.
10327
10328         * typemanager.cs (TypeManager.LookupInterface): Return a
10329         `TypeContainer', not an `Interface'.
10330         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
10331         contain a `PartialContainer' for an interface, so check it's
10332         `Kind' to figure out what it is.
10333
10334 2004-07-25  Martin Baulig  <martin@ximian.com>
10335
10336         * class.cs (Class.DefaultTypeAttributes): New public constant.
10337         (Struct.DefaultTypeAttributes): Likewise.
10338         (Interface.DefaultTypeAttributes): Likewise.
10339         (PartialContainer.TypeAttr): Override this and add the
10340         DefaultTypeAttributes.
10341
10342 2004-07-25  Martin Baulig  <martin@ximian.com>
10343
10344         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
10345         we can just use the `Parent' field instead.
10346
10347 2004-07-25  Martin Baulig  <martin@ximian.com>
10348
10349         * class.cs (TypeContainer.Emit): Renamed to EmitType().
10350
10351 2004-07-25  Martin Baulig  <martin@ximian.com>
10352
10353         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
10354         our parts before defining any methods.
10355         (TypeContainer.VerifyImplements): Make this virtual.
10356         (ClassPart.VerifyImplements): Override and call VerifyImplements()
10357         on our PartialContainer.
10358
10359 2004-07-25  Martin Baulig  <martin@ximian.com>
10360
10361         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
10362
10363         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
10364         argument, we can just use the `Parent' field instead.
10365
10366         * class.cs
10367         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
10368         (MemberBase.DoDefine): Likewise.
10369
10370 2004-07-24  Martin Baulig  <martin@ximian.com>
10371
10372         * decl.cs (MemberCore.Parent): New public field.
10373         (DeclSpace.Parent): Moved to MemberCore.
10374
10375         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
10376         (MemberBase.ctor): Added TypeContainer argument, pass it to our
10377         parent's .ctor.
10378         (FieldBase, Field, Operator): Likewise.
10379         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
10380         (EventField, Event): Likewise.
10381
10382 2004-07-23  Martin Baulig  <martin@ximian.com>
10383
10384         * class.cs (PartialContainer): New public class.
10385         (ClassPart): New public class.
10386         (TypeContainer): Added support for partial classes.
10387         (TypeContainer.GetClassBases): Splitted some of the functionality
10388         out into GetNormalBases() and GetPartialBases().
10389
10390         * cs-tokenizer.cs (Token.PARTIAL): New token.
10391         (Tokenizer.consume_identifier): Added some hacks to recognize
10392         `partial', but only if it's immediately followed by `class',
10393         `struct' or `interface'.
10394
10395         * cs-parser.jay: Added support for partial clases.
10396
10397 2004-07-23  Martin Baulig  <martin@ximian.com>
10398
10399         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
10400         a `DeclSpace' and also made it readonly.
10401         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
10402         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
10403         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
10404
10405         * cs-parser.jay: Pass the `current_class', not the
10406         `current_container' (at the moment, this is still the same thing)
10407         to a new Method, Property, Event, Indexer or Constructor.
10408
10409 2004-07-23  Martin Baulig  <martin@ximian.com>
10410
10411         * cs-parser.jay (CSharpParser): Added a new `current_class' field
10412         and removed the `current_interface' one.
10413         (struct_declaration, class_declaration, interface_declaration):
10414         Set `current_class' to the newly created class/struct/interface;
10415         set their `Bases' and call Register() before parsing their body.
10416
10417 2004-07-23  Martin Baulig  <martin@ximian.com>
10418
10419         * class.cs (Kind): New public enum.
10420         (TypeContainer): Made this class abstract.
10421         (TypeContainer.Kind): New public readonly field.
10422         (TypeContainer.CheckDef): New public method; moved here from
10423         cs-parser.jay.
10424         (TypeContainer.Register): New public abstract method.
10425         (TypeContainer.GetPendingImplementations): New public abstract
10426         method.
10427         (TypeContainer.GetClassBases): Removed the `is_class' and
10428         `is_iface' parameters.
10429         (TypeContainer.DefineNestedTypes): Formerly known as
10430         DoDefineType().
10431         (ClassOrStruct): Made this class abstract.
10432
10433         * tree.cs (RootTypes): New public type. 
10434
10435 2004-07-20  Martin Baulig  <martin@ximian.com>
10436
10437         * tree.cs (Tree.RecordNamespace): Removed.
10438         (Tree.Namespaces): Removed.
10439
10440         * rootcontext.cs (RootContext.IsNamespace): Removed.
10441
10442         * cs-parser.jay (namespace_declaration): Just create a new
10443         NamespaceEntry here.
10444
10445 2004-07-21  Lluis Sanchez Gual  <lluis@novell.com>
10446
10447         * Makefile: Install gmcs.exe.config file together with gmcs.exe.
10448         * gmcs.exe.config: Renamed from mcs.exe.config. Added supportedRuntime
10449         entry to make sure it runs in the correct runtime version.
10450         
10451 2004-07-18  Martin Baulig  <martin@ximian.com>
10452
10453         * generic.cs (ConstructedType.CheckConstraints): Improved
10454         constraints checking.
10455
10456 2004-07-18  Martin Baulig  <martin@ximian.com>
10457
10458         * expression.cs (Invocation.BetterMethod): Call
10459         TypeManager.TypeToCoreType() on all types and removed my previous
10460         hack; we're already doig the right thing here.
10461
10462 2004-07-17  Martin Baulig  <martin@ximian.com>
10463
10464         * decl.cs (MemberName.MakeName): Create the "class`1" names here.
10465
10466 2004-07-16  Martin Baulig  <martin@ximian.com>
10467
10468         * iterators.cs: Added generics support.
10469
10470 2004-07-16  Martin Baulig  <martin@ximian.com>
10471
10472         * iterators.cs: Rewrote this.  We're now using one single Proxy
10473         class for both the IEnumerable and the IEnumerator interface and
10474         `Iterator' derives from Class so we can use the high-level API.
10475
10476         * class.cs (TypeContainer.AddIterator): New method.
10477         (TypeContainer.DoDefineType): New protected virtual method, which
10478         is called from DefineType().
10479         (TypeContainer.DoDefineMembers): Call DefineType() and
10480         DefineMembers() on all our iterators.
10481         (TypeContainer.Emit): Call Emit() on all our iterators.
10482         (TypeContainer.CloseType): Call CloseType() on all our iterators.
10483
10484         * codegen.cs (EmitContext.CurrentIterator): New public field.
10485
10486 2004-07-15  Martin Baulig  <martin@ximian.com>
10487
10488         * typemanager.cs
10489         (TypeManager.not_supported_exception_type): New type.   
10490
10491 2004-07-14  Martin Baulig  <martin@ximian.com>
10492
10493         * typemanager.cs
10494         (TypeManager.generic_ienumerable_type): New type.
10495         (TypeManager.generic_ienumerator_type): New type.
10496
10497         * rootcontext.cs
10498         (RootContext.interfaces_first_stage): Added
10499         "System.Collections.Generic.IEnumerator`1" and
10500         "System.Collections.Generic.IEnumerable`1".     
10501
10502 2004-07-14  Martin Baulig  <martin@ximian.com>
10503
10504         * iterators.cs: Use real error numbers.
10505
10506 2004-07-14  Martin Baulig  <martin@ximian.com>
10507
10508         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
10509         requires this to be a System.Collection.IEnumerable and not a
10510         class implementing that interface.
10511         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
10512
10513 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
10514
10515         * class.cs: Fixed previous fix, it broke some error tests.
10516
10517 2004-07-12  Martin Baulig  <martin@ximian.com>
10518
10519         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
10520         Fixes #61293.
10521
10522 2004-07-14  Martin Baulig  <martin@ximian.com>
10523
10524         * decl.cs, expression.cs, generic.cs: Use a backqoute (`) and not
10525         an exclamation mark (!) for the generic arity to reflect the
10526         latest spec changes; ie. use "System.Collections.Generic.IList`1".
10527
10528 2004-07-13  Martin Baulig  <martin@ximian.com>
10529
10530         * cs-tokenizer.cs (Tokenizer.parse_less_than): Allow array rank
10531         specifiers being part of a type argument.
10532
10533 2004-07-13  Martin Baulig  <martin@ximian.com>
10534
10535         * expression.cs (MemberAccess.ResolveAsTypeStep): Use the full `!'
10536         name for generic types.
10537
10538 2004-07-13  Martin Baulig  <martin@ximian.com>
10539
10540         * assign.cs (Assign.DoResolve): Moved the CS0131 check up a little
10541         bit to fix #60119.
10542
10543 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
10544
10545         * assign.cs (LocalTemporary): Add new argument: is_address,If
10546         `is_address' is true, then the value that we store is the address
10547         to the real value, and not the value itself.
10548         
10549         * ecore.cs (PropertyExpr): use the new local temporary
10550         stuff to allow us to handle X.Y += z (where X is a struct)
10551
10552 2004-07-08  Martin Baulig  <martin@ximian.com>
10553
10554         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
10555         not always return, just like we're doing in Using.Resolve().
10556
10557 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
10558
10559         * cs-parser.jay (fixed_statement): flag this as Pinned.
10560
10561 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
10562
10563         * typemanager.cs (TypeManager): Removed MakePinned method, this
10564         mechanism is replaced with the .NET 2.x compatible mechanism of
10565         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
10566
10567         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
10568         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
10569         `IsFixed' property which has a different meaning.
10570
10571 2004-07-02  Raja R Harinath  <rharinath@novell.com>
10572
10573         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
10574         visible from inside a nested class, not just the names of the
10575         immediately enclosing class.
10576         Fix for bug #60730.
10577
10578 2004-06-24  Raja R Harinath  <rharinath@novell.com>
10579
10580         * expression.cs (BetterConversion): Remove buggy special-case
10581         handling of "implicit constant expression conversions".  At this
10582         point, we already know that the conversion is possible -- we're
10583         only checking to see which is better.
10584
10585 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10586
10587         * cs-parser.jay: Added error CS0210 test.
10588
10589 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10590
10591         * cs-parser.jay: Added error CS0134 test.
10592
10593 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10594
10595         Fix bug #52507
10596         * cs-parser.jay: Added error CS0145 test.
10597
10598 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10599
10600         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
10601
10602 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
10603         
10604         * expression.cs (StackAlloc.Resolve): The argument may not
10605         be a constant; deal with this case.
10606         
10607 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
10608
10609         * attribute.cs (IndexerName_GetIndexerName): Renamed to
10610         GetIndexerAttributeValue.
10611         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
10612
10613         * class.cs (Indexer.Define): Added error tests for CS0415,
10614         CS0609.
10615
10616 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
10617
10618         * attribute.cs (Attribute.Resolve): Keep field code in sync with
10619         property code.
10620
10621 2004-06-23  Martin Baulig  <martin@ximian.com>
10622
10623         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
10624         neither return nor throw, reset the barrier as well.  Fixes #60457.
10625
10626 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
10627
10628         * class.cs : EventAttributes is now set to None by default.
10629           This fixes bug #60459.
10630
10631 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10632
10633         Fix bug #60219
10634         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10635         Don't throw exception but return null (it's sufficient now).
10636
10637 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10638
10639         * typemanager.cs (GetArgumentTypes): Faster implementation.
10640
10641 2004-06-18  Martin Baulig  <martin@ximian.com>
10642
10643         * attribute.cs (Attribute.Resolve): Check whether we're an
10644         EmptyCast which a Constant child.  Fixes #60333.
10645
10646 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
10647
10648         * statement.cs (EmitCollectionForeach): Account for the fact that
10649         not all valuetypes are in areas which we can take the address of.
10650         For these variables, we store to a temporary variable. Also, make
10651         sure that we dont emit a `callvirt' on a valuetype method.
10652
10653 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10654
10655         * expression.cs (StackAlloc.DoReSolve): Added test for
10656         negative parameter (CS0247).
10657
10658 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10659
10660         Fix bug #59792
10661         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
10662
10663 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10664
10665         Fix bug #59781
10666         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
10667         ulong.
10668
10669 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10670
10671         Fix bug #58254 & cs1555.cs, cs1556.cs
10672         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
10673
10674 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10675
10676         * cs-parser.jay: Added error CS1669 test for indexers.
10677
10678 2004-06-18  Martin Baulig  <martin@ximian.com>
10679
10680         * generics.cs (GenericMethod.ctor): Don't take an Attributes
10681         argument.  Fixes #60441.
10682
10683 2004-06-16  Ben Maurer  <bmaurer@ximian.com>
10684         * ecore.cs (MethodGroupExpr.Name): Revert Martin's patch.
10685         The name needs to have the actual name of the method in order
10686         for other tests (such as the one in OverloadResolve for Invoke
10687         on a delegate) to work. As well, it does not really help
10688         error reporting because the method group had multiple methods.
10689         * Makefile: Remove MCS_DEBUG, you can enable with the DEBUG_FLAGS.
10690         Make profiling work.
10691         
10692 2004-06-13  Martin Baulig  <martin@ximian.com>
10693
10694         * cs-parser.jay: Don't allow generic attributes.
10695
10696 2004-06-13  Martin Baulig  <martin@ximian.com>
10697
10698         * class.cs (MemberBase.DoDefineBase): New protected method.
10699         (MemberBase.DoDefine): Compute the `flags' in the new
10700         DoDefineBase() which must be called first.
10701         (Method.Define): Call DoDefineBase() first so we have the flags
10702         when defining the generic method.
10703
10704         * cs-parser.jay (interface_method_declaration): Support generic methods.
10705
10706 2004-06-13  Martin Baulig  <martin@ximian.com>
10707
10708         * decl.cs (TypeName): Removed.
10709         (MemberName): Removed TypeName and MemberNow; now we just have
10710         MemberName.
10711
10712         * cs-parser.jay: Don't distinguish between type arguments and type
10713         parameters in the grammar and simplified the rules a bit.  The
10714         reduce/reduce conflicts are now gone (except the one we inherited
10715         from mcs).
10716
10717 2004-06-11  Martin Baulig  <martin@ximian.com>
10718
10719         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
10720         call this twice: for params and varargs methods.
10721
10722 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10723
10724         * class.cs:
10725         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
10726
10727 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10728
10729         * attribute.cs (Attribute.GetValidTargets): Made public.
10730
10731         * class.cs: 
10732         (AbstractPropertyEventMethod): New class for better code sharing.
10733         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
10734         CS1667 report.
10735         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
10736
10737 2004-06-09  Martin Baulig  <martin@ximian.com>
10738
10739         * cs-parser.jay: Removed a reduce/reduce conflict.
10740
10741 2004-06-03  Martin Baulig  <martin@ximian.com>
10742
10743         * generic.cs (ConstructedType.GetMemberAccess): Renamed to
10744         GetSimpleName() and return a SimpleName.
10745
10746         * ecore.cs (SimpleName.Arguments): New public field.
10747         (SimpleName): Added overloaded ctor which takes an additional
10748         TypeArguments argument.
10749         (SimpleName.SimpleNameResolve): Added support for generic methods.
10750         (MethodGroupExpr.ResolveGeneric): New public method.  The code was
10751         formerly in MemberAccess.DoResolve(), but we also need it in
10752         SimpleNameResolve().
10753
10754         * expression.cs (MemberAccess.DoResolve): Use the new
10755         MethodGroupExpr.ResolveGeneric().       
10756
10757 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10758
10759         * decl.cs: If possible, use lookuptypedirect here. We can only do
10760         this if there is no `.' after the namespace. Avoids using
10761         LookupType, which does lots of slow processing.
10762         (FindNestedType) New method, does what it says :-).
10763         * namespace.cs: use LookupTypeDirect.
10764         * rootcontext.cs: use membercache, if possible.
10765         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10766
10767 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10768
10769         * expression.cs:
10770         According to the spec, 
10771
10772         In a member access of the form E.I, if E is a single identifier,
10773         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10774         field, property, localvariable, or parameter with the same type as
10775         the meaning of E as a type-name (§3.8), then both possible
10776         meanings of E are permitted.
10777
10778         We did not check that E as a simple-name had the same type as E as
10779         a type name.
10780
10781         This trivial check gives us 5-7% on bootstrap time.
10782
10783 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10784
10785         * expression.cs (Invocation.OverloadResolve): Avoid the
10786         use of hashtables and boxing here by allocating on demand.
10787
10788 2004-05-30  Martin Baulig  <martin@ximian.com>
10789
10790         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10791         we're doing a silent lookup.  Don't try to lookup nested types in
10792         TypeManager.object_type (thanks to Ben Maurer).
10793
10794 2004-05-30  Martin Baulig  <martin@ximian.com>
10795
10796         Committing a patch from Ben Maurer.
10797
10798         * rootcontext.cs (RootContext.LookupType): Cache negative results.
10799
10800 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10801
10802         * convert.cs: add a trivial cache for overload operator resolution.
10803
10804 2004-05-31  Marek Safar  <marek.safar@seznam.cz>
10805
10806         * attribute.cs
10807         (AttributeTester.GetObsoleteAttribute): Returns instance of
10808         ObsoleteAttribute when type is obsolete.
10809
10810         * class.cs
10811         (TypeContainer.VerifyObsoleteAttribute): Override.
10812         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
10813         (MethodCode.VerifyObsoleteAttribute): Override.
10814         (MemberBase.VerifyObsoleteAttribute): Override.
10815
10816         * decl.cs
10817         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
10818         and report proper error.
10819
10820         *delegate.cs
10821         (Delegate.VerifyObsoleteAttribute): Override.
10822
10823         * ecore.cs
10824         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
10825         and report proper error.
10826         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
10827
10828         * enum.cs
10829         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
10830         and enum member.
10831
10832         * expression.cs
10833         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
10834         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
10835         Added test for ObsoleteAttribute.
10836
10837         * statement.cs
10838         (Catch): Derived from Statement.
10839
10840 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10841
10842         * decl.cs: If possible, use lookuptypedirect here. We can only do
10843         this if there is no `.' after the namespace. Avoids using
10844         LookupType, which does lots of slow processing.
10845         (FindNestedType) New method, does what it says :-).
10846         * namespace.cs: use LookupTypeDirect.
10847         * rootcontext.cs: use membercache, if possible.
10848         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10849
10850 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10851
10852         * expression.cs:
10853         According to the spec, 
10854
10855         In a member access of the form E.I, if E is a single identifier,
10856         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10857         field, property, localvariable, or parameter with the same type as
10858         the meaning of E as a type-name (§3.8), then both possible
10859         meanings of E are permitted.
10860
10861         We did not check that E as a simple-name had the same type as E as
10862         a type name.
10863
10864         This trivial check gives us 5-7% on bootstrap time.
10865
10866 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10867
10868         Fixed bug #59071 & cs0160.cs
10869         * statement.cs (Try.Resolve): Check here whether order of catch
10870         clauses matches their dependencies.
10871
10872 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10873
10874         Fixed bug #58624
10875         * ecore.cs (SimpleName.SimpleNameResolve): Added test for
10876         unsafe type.
10877
10878 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10879
10880         * expression.cs (Invocation.OverloadResolve): Avoid the
10881         use of hashtables and boxing here by allocating on demand.
10882
10883 2004-05-30  Martin Baulig  <martin@ximian.com>
10884
10885         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10886         we're doing a silent lookup.  Don't try to lookup nested types in
10887         TypeManager.object_type (thanks to Ben Maurer).
10888
10889 2004-05-30  Martin Baulig  <martin@ximian.com>
10890
10891         Committing a patch from Ben Maurer.
10892
10893         * rootcontext.cs (RootContext.LookupType): Cache negative results.      
10894
10895 2004-05-29  Martin Baulig  <martin@ximian.com>
10896
10897         * class.cs (IMethodData.ShouldIgnore): New method.
10898
10899         * typemanager.cs (TypeManager.MethodFlags): Don't take a
10900         `Location' argument, we don't need it anywhere.  Use
10901         `IMethodData.ShouldIgnore ()' instead of
10902         `MethodData.GetMethodFlags ()'.
10903         (TypeManager.AddMethod): Removed.
10904         (TypeManager.AddMethod2): Renamed to AddMethod.
10905
10906 2004-05-29  Martin Baulig  <martin@ximian.com>
10907
10908         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
10909
10910         * convert.cs (Convert.ImplicitReferenceConversion): If we're
10911         converting from a class type S to an interface type and we already
10912         have an object on the stack, don't box it again.  Fixes #52578.
10913
10914 2004-05-29  Martin Baulig  <martin@ximian.com>
10915
10916         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10917         Added support for `params' parameters.  Fixes #59267.
10918
10919 2004-05-29  Martin Baulig  <martin@ximian.com>
10920
10921         * literal.cs (NullPointer): Provide a private .ctor which sets
10922         `type' to TypeManager.object_type.  Fixes #59048.
10923
10924 2004-05-29  Martin Baulig  <martin@ximian.com>
10925
10926         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
10927         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
10928
10929         * ecore.cs (EventExpr.instance_expr): Make the field private.
10930
10931 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
10932
10933         Fixed bug #50080 & cs0214-2.cs
10934         * expression.cs (Cast.DoResolve): Check unsafe context here.
10935         
10936         * statement.cs (Resolve.DoResolve): Likewise.
10937
10938 2004-05-26  Martin Baulig  <martin@ximian.com>
10939
10940         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
10941
10942         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
10943         (RootContext.LookupType): Pass down the `silent' flag.
10944
10945 2004-05-25  Martin Baulig  <martin@ximian.com>
10946
10947         * expression.cs
10948         (MethodGroupExpr.IdenticalTypeName): New public property.
10949         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
10950         expression actually refers to a type.
10951
10952 2004-05-25  Martin Baulig  <martin@ximian.com>
10953
10954         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
10955         for #56176 and made it actually work.
10956
10957 2004-05-25  Martin Baulig  <martin@ximian.com>
10958
10959         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
10960         (FieldExpr, PropertyExpr): Override and implement
10961         CacheTemporaries.  Fixes #52279.
10962
10963 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
10964
10965         * location.cs: In the new compiler listing a file twice is a
10966         warning, not an error.
10967
10968 2004-05-24  Martin Baulig  <martin@ximian.com>
10969
10970         * enum.cs (Enum.DefineType): For the `BaseType' to be a
10971         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
10972
10973 2004-05-24  Martin Baulig  <martin@ximian.com>
10974
10975         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
10976         walking the `using' list.  Fixes #53921.
10977
10978 2004-05-24  Martin Baulig  <martin@ximian.com>
10979
10980         * const.cs (Const.LookupConstantValue): Added support for
10981         EmptyCast's; fixes #55251.
10982
10983 2004-05-24  Martin Baulig  <martin@ximian.com>
10984
10985         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
10986         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
10987         which does the CS0135 check.  The reason is that we first need to
10988         check whether the variable actually exists.
10989
10990 2004-05-24  Martin Baulig  <martin@ximian.com>
10991
10992         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
10993         than RootContext.LookupType() to find the explicit interface
10994         type.  Fixes #58584.
10995
10996 2004-05-24  Raja R Harinath  <rharinath@novell.com>
10997
10998         * Makefile: Simplify.  Use executable.make.
10999         * mcs.exe.sources: New file.  List of sources of mcs.exe.
11000
11001 2004-05-24  Anders Carlsson  <andersca@gnome.org>
11002
11003         * decl.cs:
11004         * enum.cs:
11005         Use the invariant culture when doing String.Compare for CLS case
11006         sensitivity.
11007         
11008 2004-05-23  Martin Baulig  <martin@ximian.com>
11009
11010         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
11011         don't have any dots.  Fixes #52622, added cs0246-8.cs.
11012
11013         * namespace.cs (NamespaceEntry.Lookup): Likewise.
11014
11015 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
11016
11017         * class.cs (MemberBase.Define): Reuse MemberType member for 
11018         resolved type. Other methods can use it too.
11019
11020 2004-05-23  Martin Baulig  <martin@ximian.com>
11021
11022         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
11023         the variable also exists in the current block (otherwise, we need
11024         to report a CS0103).  Fixes #58670.
11025
11026 2004-05-23  Martin Baulig  <martin@ximian.com>
11027
11028         * flowanalysis.cs (Reachability.Reachable): Compute this
11029         on-the-fly rather than storing it as a field.
11030
11031 2004-05-23  Martin Baulig  <martin@ximian.com>
11032
11033         * flowanalysis.cs (Reachability.And): Manually compute the
11034         resulting `barrier' from the reachability.      
11035        
11036 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
11037
11038         Fix bug #57835
11039         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
11040         instance of ObsoleteAttribute when symbol is obsolete.
11041
11042         * class.cs
11043         (IMethodData): Extended interface for ObsoleteAttribute support.
11044
11045 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
11046
11047         * attribute.cs: Fix bug #55970
11048
11049 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
11050
11051         Fix bug #52705
11052         * attribute.cs
11053         (GetObsoleteAttribute): New method. Creates the instance of
11054         ObsoleteAttribute.
11055         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
11056         ObsoleteAttribute when member is obsolete.
11057         (AttributeTester.Report_ObsoleteMessage): Common method for
11058         Obsolete error/warning reporting.
11059
11060         * class.cs
11061         (TypeContainer.base_classs_type): New member for storing parent type.
11062
11063         * decl.cs
11064         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
11065         for this MemberCore.
11066
11067 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
11068
11069         * attribute.cs, const.cs: Fix bug #58590
11070
11071 2004-05-21  Martin Baulig  <martin@ximian.com>
11072
11073         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
11074         out parameters if the end of the method is unreachable.  Fixes
11075         #58098. 
11076
11077 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
11078
11079         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
11080         Hari was right, why extra method.
11081
11082 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
11083
11084         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
11085
11086 2004-05-20  Martin Baulig  <martin@ximian.com>
11087
11088         * delegate.cs: Convert this file to Unix mode - like the original
11089         version in mcs is.
11090
11091 2004-05-20  Martin Baulig  <martin@ximian.com>
11092
11093         * attribute.cs: Convert this file to Unix mode - like the original
11094         version in mcs is.
11095
11096 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
11097
11098        Fix bug #58688 (MCS does not report error when the same attribute
11099        is assigned twice)
11100
11101        * attribute.cs (Attribute.Emit): Distinction between null and default.
11102
11103 2004-05-19  Raja R Harinath  <rharinath@novell.com>
11104
11105        * cs-parser.jay (attribute): Create a GlobalAttribute for the case
11106        of a top-level attribute without an attribute target.
11107        * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
11108        Make non-static.
11109        (Attribute.Conditional_GetConditionName), 
11110        (Attribute.Obsolete_GetObsoleteMessage): Update.
11111        (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
11112        part of ScanForIndexerName.
11113        (Attribute.CanIgnoreInvalidAttribute): New function.
11114        (Attribute.ScanForIndexerName): Move to ...
11115        (Attributes.ScanForIndexerName): ... here.
11116        (Attributes.Attrs): Rename from now-misnamed AttributeSections.
11117        (Attributes.Search): New internal variant that can choose not to
11118        complain if types aren't resolved.  The original signature now
11119        complains.
11120        (Attributes.GetClsCompliantAttribute): Use internal variant, with
11121        complaints suppressed.
11122        (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
11123        only if it not useful.
11124        (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
11125        top-level for attributes that are shared between the assembly
11126        and a top-level class.
11127        * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
11128        * class.cs: Update to reflect changes.
11129        (DefineIndexers): Fuse loops.
11130        * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
11131        a couple more variants of attribute names.
11132
11133 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
11134
11135         Fix bug #52585 (Implemented explicit attribute declaration)
11136
11137         * attribute.cs:
11138         (Attributable.ValidAttributeTargets): New abstract method. It gets
11139         list of valid attribute targets for explicit target declaration.
11140         (Attribute.Target): It holds target itself.
11141         (AttributeSection): Removed.
11142         (Attribute.CheckTargets): New method. It checks whether attribute
11143         target is valid for the current element.
11144
11145         * class.cs:
11146         (EventProperty): New class. For events that are declared like
11147         property (with add and remove accessors).
11148         (EventField): New class. For events that are declared like field.
11149         class.cs
11150
11151         * cs-parser.jay: Implemented explicit attribute target declaration.
11152
11153         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
11154         Override ValidAttributeTargets.
11155
11156         * parameter.cs:
11157         (ReturnParameter): Class for applying custom attributes on 
11158         the return type.
11159         (ParameterAtribute): New class. Class for applying custom
11160         attributes on the parameter type.
11161
11162 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
11163
11164         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
11165         definitions. 
11166
11167         (Method): Allow UNSAFE here.
11168
11169         * modifiers.cs: Support unsafe reporting.
11170
11171 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
11172
11173         * decl.cs: Fix bug #58478.
11174
11175 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11176
11177         * statement.cs: When checking for unreachable code on an EmptyStatement,
11178         set the location. Fixes bug #58488.
11179
11180 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
11181
11182         * driver.cs: Add -pkg handling.
11183
11184         From Gonzalo: UseShelLExecute=false
11185
11186 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
11187
11188         * attribute.cs:
11189         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
11190         for attribute.
11191         (Attribute.IsClsCompliaceRequired): Moved to base for better
11192         accesibility.
11193         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
11194         when attribute is AttributeUsageAttribute.
11195         (Attribute.GetValidTargets): Simplified.
11196         (Attribute.GetAttributeUsage): New method returns AttributeUsage
11197         attribute for this type.
11198         (Attribute.ApplyAttributes): Method renamed to Emit and make
11199         non-static.
11200         (GlobalAttributeSection): New class for special handling of global
11201         attributes (assembly, module).
11202         (AttributeSection.Emit): New method.
11203
11204         * class.cs: Implemented Attributable abstract methods.
11205         (MethodCore.LabelParameters): Moved to Parameter class.
11206         (Accessor): Is back simple class.
11207         (PropertyMethod): Implemented Attributable abstract class.
11208         (DelegateMethod): Implemented Attributable abstract class.
11209         (Event): New constructor for disctintion between normal Event
11210         and Event with accessors.
11211
11212         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
11213
11214         * codegen.cs, const.cs, decl.cs, delegate.cs:
11215         (CommonAssemblyModulClass): Implemented Attributable abstract class
11216         and simplified.
11217
11218         * enum.cs: Implement IAttributeSupport interface.
11219         (EnumMember): New class for emum members. Implemented Attributable
11220         abstract class
11221
11222         * parameter.cs:
11223         (ParameterBase): Is abstract.
11224         (ReturnParameter): New class for easier [return:] attribute handling.
11225
11226         * typemanager.cs: Removed builder_to_attr.
11227
11228 2004-05-11  Raja R Harinath  <rharinath@novell.com>
11229
11230         Fix bug #57151.
11231         * attribute.cs (Attribute.GetPositionalValue): New function.
11232         * class.cs (TypeContainer.VerifyMembers): New function.
11233         (TypeContainer.Emit): Use it.
11234         (ClassOrStruct): New base class for Class and Struct.
11235         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
11236         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
11237         class.
11238         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
11239         then each non-static field should have a FieldOffset attribute.
11240         Otherwise, none of the fields should have a FieldOffset attribute.
11241         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
11242         and FieldOffset attributes.
11243         * typemanager.cs (TypeManager.struct_layout_attribute_type)
11244         (TypeManager.field_offset_attribute_type): New core types.
11245         (TypeManager.InitCoreTypes): Initialize them.
11246
11247 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
11248
11249         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
11250         Return correct type.
11251         From bug #58270.
11252
11253 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
11254
11255         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
11256         be implicitly converted to ulong.
11257         
11258         * expression.cs: The logic for allowing operator &, | and ^ worked
11259         was wrong, it worked before because we did not report an error in
11260         an else branch.  Fixes 57895.
11261
11262         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
11263         allow volatile fields to be reference types.
11264
11265 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
11266
11267         * driver.cs: Add support for /debug-
11268
11269 2004-05-07  Raja R Harinath  <rharinath@novell.com>
11270
11271         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
11272         Add a 'complain' parameter to silence errors.
11273         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
11274         silently overlooked type-resolutions.
11275         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
11276         to reflect changes.
11277         (Attributes.Search): New function.
11278         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
11279         (Attributes.GetAttributeFullName): Remove hack.
11280         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
11281         Update to reflect changes.
11282         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
11283         Use Attributes.Search instead of nested loops.
11284
11285 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
11286
11287         * decl.cs:
11288         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
11289         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
11290         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
11291
11292         * report.cs: (Report.Warning): Renamed to Warning_T because of
11293         parameter collision.
11294
11295 2004-05-05  Raja R Harinath  <rharinath@novell.com>
11296
11297         * expression.cs (MemberAccess.ResolveMemberAccess):
11298         Exit with non-zero status after Report.Error.
11299         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
11300         Likewise.
11301         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
11302
11303 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
11304
11305         * support.cs: Don't hang when the file is empty.
11306
11307 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
11308
11309         * support.cs: In SeekableStreamReader, compute the preamble size of the
11310           underlying stream. Position changes should take into account that initial
11311           count of bytes.
11312
11313 2004-05-03  Todd Berman  <tberman@sevenl.net>
11314
11315         * driver.cs: remove unused GetSysVersion function.
11316
11317 2004-05-03  Todd Berman  <tberman@sevenl.net>
11318
11319         * driver.cs: Remove the hack from saturday, as well as the hack
11320         from jackson (LoadAssemblyFromGac), also adds the CWD to the
11321         link_paths to get that bit proper.
11322
11323 2004-05-01  Todd Berman  <tberman@sevenl.net>
11324
11325         * driver.cs: Try a LoadFrom before a Load, this checks the current
11326         path. This is currently a bug in mono that is be fixed, however, this
11327         provides a workaround for now. This will be removed when the bug
11328         is fixed.
11329
11330 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
11331
11332         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11333         incomplete key pairs (#57941).
11334
11335 2004-05-01  Todd Berman  <tberman@sevenl.net>
11336
11337         * driver.cs: Remove '.' from path_chars, now System.* loads properly
11338         from the GAC
11339
11340 2004-04-30  Jackson Harper  <jackson@ximian.com>
11341
11342         * codegen.cs: Open keys readonly.
11343         
11344 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11345
11346         * typemanager.cs: don't report cyclic struct layout when a struct
11347         contains 2 or more fields of the same type. Failed for Pango.AttrShape
11348         which has 2 Pango.Rectangle fields.
11349
11350 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11351
11352         * expression.cs: Handle IntPtr comparisons with IL code
11353         rather than a method call.
11354
11355 2004-04-29  Martin Baulig  <martin@ximian.com>
11356
11357         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
11358         the list of PropertyInfo's in class hierarchy and find the
11359         accessor.  Fixes #56013.
11360
11361 2004-04-29  Martin Baulig  <martin@ximian.com>
11362
11363         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
11364
11365 2004-04-29  Martin Baulig  <martin@ximian.com>
11366
11367         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
11368
11369         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
11370
11371 2004-04-29  Martin Baulig  <martin@ximian.com>
11372
11373         * class.cs (ConstructorInitializer.Resolve): Check whether the
11374         parent .ctor is accessible.  Fixes #52146.
11375
11376 2004-04-29  Martin Baulig  <martin@ximian.com>
11377
11378         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
11379
11380         * statement.cs (Using.EmitLocalVariableDecls): Use
11381         TypeManager.idisposable_type, not typeof (IDisposable).
11382         (Foreach.EmitCollectionForeach): Added support for valuetypes.
11383
11384 2004-04-29  Martin Baulig  <martin@ximian.com>
11385
11386         * class.cs (Event.Define): Don't emit the field and don't set
11387         RTSpecialName and SpecialName for events on interfaces.  Fixes
11388         #57703. 
11389
11390 2004-04-29  Raja R Harinath  <rharinath@novell.com>
11391
11392         Refactor Attribute.ApplyAttributes.
11393         * attribute.cs (Attributable): New base class for objects that can
11394         have Attributes applied on them.
11395         (Attribute): Make AttributeUsage fields public.
11396         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
11397         (Attribute.IsInternalCall): New property.
11398         (Attribute.UsageAttr): Convert to a public read-only property.
11399         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
11400         (Attribute.ResolveType, Attribute.Resolve)
11401         (Attribute.ScanForIndexerName): Update to reflect changes.
11402         (Attribute.CheckAttributeTarget): Re-format.
11403         (Attribute.ApplyAttributes): Refactor, to various
11404         Attributable.ApplyAttributeBuilder methods.
11405         * decl.cs (MemberCore): Make Attributable.
11406         * class.cs (Accessor): Make Attributable.
11407         (MethodData.ApplyAttributes): Use proper attribute types, not
11408         attribute names.
11409         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
11410         (TypeContainer.ApplyAttributeBuilder)
11411         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
11412         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
11413         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
11414         (Operator.ApplyAttributeBuilder): New factored-out methods.
11415         * const.cs (Const.ApplyAttributeBuilder): Likewise.
11416         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
11417         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
11418         * parameter.cs (ParameterBase): New Attributable base class
11419         that can also represent Return types.
11420         (Parameter): Update to the changes.
11421
11422 2004-04-29  Jackson Harper  <jackson@ximian.com>
11423
11424         * driver.cs: Prefer the corlib system version when looking for
11425         assemblies in the GAC. This is still a hack, but its a better hack
11426         now.
11427         
11428 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
11429
11430         * decl.cs, enum.cs: Improved error 3005 reporting.
11431   
11432         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
11433         (related_symbols): New private member for list of symbols
11434         related to reported error/warning.
11435         
11436         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
11437
11438 2004-04-29  Martin Baulig  <martin@ximian.com>
11439
11440         * ecore.cs (Expression.Constantify): If we're an enum and
11441         TypeManager.TypeToCoreType() doesn't give us another type, use
11442         t.UnderlyingSystemType.  Fixes #56178.  
11443
11444 2004-04-29  Martin Baulig  <martin@ximian.com>
11445
11446         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
11447         interfaces and for each interface, only add members directly
11448         declared in that interface.  Fixes #53255.
11449
11450 2004-04-28  Martin Baulig  <martin@ximian.com>
11451
11452         * expression.cs (ConditionalLogicalOperator): Use a temporary
11453         variable for `left' to avoid that we evaluate it more than once;
11454         bug #52588.
11455
11456 2004-04-28  Martin Baulig  <martin@ximian.com>
11457
11458         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
11459         `void[]' (CS1547).
11460
11461 2004-04-28  Martin Baulig  <martin@ximian.com>
11462
11463         * statement.cs (LocalInfo.Resolve): Check whether the type is not
11464         void (CS1547).
11465
11466         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
11467         whether the type is not void (CS1547).
11468
11469 2004-04-28  Martin Baulig  <martin@ximian.com>
11470
11471         * expression.cs (Unary.DoResolveLValue): Override this and report
11472         CS0131 for anything but Operator.Indirection.
11473
11474 2004-04-28  Martin Baulig  <martin@ximian.com>
11475
11476         Committing a patch from Ben Maurer; see bug #50820.
11477
11478         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11479         check for classes.
11480
11481         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11482         classes.        
11483
11484 2004-04-28  Martin Baulig  <martin@ximian.com>
11485
11486         Committing a patch from Ben Maurer; see bug #50820.
11487
11488         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11489         check for classes.
11490
11491         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11492         classes.        
11493
11494 2004-04-28  Martin Baulig  <martin@ximian.com>
11495
11496         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
11497         (Block.AddLabel): Call DoLookupLabel() to only search in the
11498         current block.
11499
11500 2004-04-28  Martin Baulig  <martin@ximian.com>
11501
11502         * cfold.cs (ConstantFold.BinaryFold): Added special support for
11503         comparing StringConstants and NullLiterals in Equality and Inequality.
11504
11505 2004-04-28  Jackson Harper  <jackson@ximian.com>
11506
11507         * driver.cs: Attempt to load referenced assemblies from the
11508         GAC. This is the quick and dirty version of this method that
11509         doesnt take into account versions and just takes the first
11510         canidate found. Will be good enough for now as we will not have more
11511         then one version installed into the GAC until I update this method.
11512
11513 2004-04-28  Martin Baulig  <martin@ximian.com>
11514
11515         * typemanager.cs (TypeManager.CheckStructCycles): New public
11516         static method to check for cycles in the struct layout.
11517
11518         * rootcontext.cs (RootContext.PopulateTypes): Call
11519         TypeManager.CheckStructCycles() for each TypeContainer.
11520         [Note: We only need to visit each type once.]
11521
11522 2004-04-28  Martin Baulig  <martin@ximian.com>
11523
11524         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
11525
11526         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
11527         success and added `out object value'.  Use a `bool resolved' field
11528         to check whether we've already been called rather than
11529         `ConstantValue != null' since this breaks for NullLiterals.
11530
11531 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11532
11533         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
11534         setting of this flag, since the 'set' method may be non-public.
11535
11536 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11537
11538         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
11539         check on current_vector.Block.
11540
11541 2004-04-27  Martin Baulig  <martin@ximian.com>
11542
11543         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
11544         a field initializer.  Fixes #56459.
11545
11546 2004-04-27  Martin Baulig  <martin@ximian.com>
11547
11548         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
11549         we're not attempting to use an indexer.  Fixes #52154.
11550
11551 2004-04-27  Martin Baulig  <martin@ximian.com>
11552
11553         * statement.cs (Return): Don't create a return label if we don't
11554         need it; reverts my change from January 20th.  Thanks to Ben
11555         Maurer for this.
11556
11557 2004-04-27  Martin Baulig  <martin@ximian.com>
11558
11559         According to the spec, `goto' can only leave a nested scope, but
11560         never enter it.
11561
11562         * statement.cs (Block.LookupLabel): Only lookup in the current
11563         block, don't recurse into parent or child blocks.
11564         (Block.AddLabel): Check in parent and child blocks, report
11565         CS0140/CS0158 if we find a duplicate.
11566         (Block): Removed this indexer for label lookups.
11567         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
11568         this already does the error reporting for us.
11569
11570         * flowanalysis.cs
11571         (FlowBranching.UsageVector.Block): New public variable; may be null.
11572         (FlowBranching.CreateSibling): Added `Block' argument.
11573         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
11574         label for the target of a `goto' and check whether we're not
11575         leaving a `finally'.
11576
11577 2004-04-27  Martin Baulig  <martin@ximian.com>
11578
11579         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
11580         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
11581         just for returns).
11582
11583 2004-04-27  Martin Baulig  <martin@ximian.com>
11584
11585         * statement.cs (Block.AddLabel): Also check for implicit blocks
11586         and added a CS0158 check.
11587
11588 2004-04-27  Martin Baulig  <martin@ximian.com>
11589
11590         * flowanalysis.cs (FlowBranchingLoop): New class.
11591         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
11592         UsageVector's instead of an ArrayList.
11593         (FlowBranching.Label): Likewise.
11594         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
11595         (FlowBranching.AddBreakVector): New method.
11596
11597 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
11598
11599         * attribute.cs: Small regression fix: only convert the type if we
11600         the type is different, fixes System.Drawing build.
11601
11602 2004-04-27  Martin Baulig  <martin@ximian.com>
11603
11604         * attribute.cs (Attribute.Resolve): If we have a constant value
11605         for a named field or property, implicity convert it to the correct
11606         type.
11607
11608 2004-04-27  Raja R Harinath  <rharinath@novell.com>
11609
11610         * statement.cs (Block.Block): Implicit blocks share
11611         'child_variable_names' fields with parent blocks.
11612         (Block.AddChildVariableNames): Remove.
11613         (Block.AddVariable): Mark variable as "used by a child block" in
11614         every surrounding block.
11615         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
11616         been used in a child block, complain about violation of "Invariant
11617         meaning in blocks" rule.
11618         * cs-parser.jay (declare_local_variables): Don't use
11619         AddChildVariableNames.
11620         (foreach_statement): Don't create an implicit block: 'foreach'
11621         introduces a scope.
11622
11623 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
11624
11625         * convert.cs (ImplicitNumericConversion): 0 is also positive when
11626         converting from 0L to ulong.  Fixes 57522.
11627
11628 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11629
11630         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
11631         derived class hides via 'new' keyword field from base class (test-242.cs).
11632         TODO: Handle this in the more general way.
11633         
11634         * class.cs (CheckBase): Ditto.
11635
11636 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11637
11638         * decl.cs (caching_flags): New member for storing cached values
11639         as bit flags.
11640         (MemberCore.Flags): New enum where bit flags for caching_flags
11641         are defined.
11642         (MemberCore.cls_compliance): Moved to caching_flags.
11643         (DeclSpace.Created): Moved to caching_flags.
11644
11645         * class.cs: Use caching_flags instead of DeclSpace.Created
11646         
11647 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
11648
11649         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
11650         if we are only a derived class, not a nested class.
11651
11652         * typemanager.cs: Same as above, but do this at the MemberLookup
11653         level (used by field and methods, properties are handled in
11654         PropertyExpr).   Allow for the qualified access if we are a nested
11655         method. 
11656
11657 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
11658
11659         * class.cs: Refactoring.
11660         (IMethodData): New inteface; Holds links to parent members
11661         to avoid member duplication (reduced memory allocation).
11662         (Method): Implemented IMethodData interface.
11663         (PropertyBase): New inner classes for get/set methods.
11664         (PropertyBase.PropertyMethod): Implemented IMethodData interface
11665         (Event): New inner classes for add/remove methods.
11666         (Event.DelegateMethod): Implemented IMethodData interface.
11667
11668         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
11669         EmitContext (related to class.cs refactoring).
11670
11671 2004-04-21  Raja R Harinath  <rharinath@novell.com>
11672
11673         * delegate.cs (Delegate.VerifyApplicability): If the number of
11674         arguments are the same as the number of parameters, first try to
11675         verify applicability ignoring  any 'params' modifier on the last
11676         parameter.
11677         Fixes #56442.
11678
11679 2004-04-08  Martin Baulig  <martin@ximian.com>
11680
11681         Merged latest changes into gmcs.  Please keep this comment in
11682         here, it makes it easier for me to see what changed in MCS since
11683         the last time I merged.
11684
11685 2004-04-16  Raja R Harinath  <rharinath@novell.com>
11686
11687         * class.cs (TypeContainer.AddIndexer): Use
11688         'ExplicitInterfaceName' to determine if interface name was
11689         explicitly specified.  'InterfaceType' is not initialized at this time.
11690         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
11691         Indexers array is already in the required order.  Initialize
11692         'IndexerName' only if there are normal indexers.
11693         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
11694         (TypeContainer.Emit): Emit DefaultMember attribute only if
11695         IndexerName is initialized.
11696         Fixes #56300.
11697
11698 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
11699
11700         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
11701         Fixes #57007
11702
11703 2004-04-15  Raja R Harinath  <rharinath@novell.com>
11704
11705         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
11706         attributes.
11707         Fix for #56456.
11708
11709         * attribute.cs (Attribute.Resolve): Check for duplicate named
11710         attributes.
11711         Fix for #56463.
11712
11713 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
11714
11715         * iterators.cs (MarkYield): track whether we are in an exception,
11716         and generate code accordingly.  Use a temporary value to store the
11717         result for our state.
11718
11719         I had ignored a bit the interaction of try/catch with iterators
11720         since their behavior was not entirely obvious, but now it is
11721         possible to verify that our behavior is the same as MS .NET 2.0
11722
11723         Fixes 54814
11724
11725 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
11726
11727         * iterators.cs: Avoid creating temporaries if there is no work to
11728         do. 
11729
11730         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
11731         Enumerations, use TypeManager.EnumToUnderlying and call
11732         recursively. 
11733
11734         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
11735         bug #57013
11736
11737         (This.Emit): Use EmitContext.EmitThis to emit our
11738         instance variable.
11739
11740         (This.EmitAssign): Ditto.
11741
11742         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
11743         codepaths, we will move all the functionality into
11744         Mono.CSharp.This 
11745
11746         (FieldExpr.EmitAssign): Ditto.
11747
11748         This fixes several hidden bugs that I uncovered while doing a code
11749         review of this today.
11750
11751         * codegen.cs (EmitThis): reworked so the semantics are more clear
11752         and also support value types "this" instances.
11753
11754         * iterators.cs: Changed so that for iterators in value types, we
11755         do not pass the value type as a parameter.  
11756
11757         Initialization of the enumerator helpers is now done in the caller
11758         instead of passing the parameters to the constructors and having
11759         the constructor set the fields.
11760
11761         The fields have now `assembly' visibility instead of private.
11762
11763 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
11764
11765         * expression.cs (Argument.Resolve): Check if fields passed as ref
11766         or out are contained in a MarshalByRefObject.
11767
11768         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
11769         another compiler type.
11770
11771 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
11772
11773         * class.cs (Indexer.Define): use the new name checking method.
11774         Also, return false on an error.
11775         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
11776         (is_identifier_[start/part]_character): make static.
11777
11778 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
11779
11780         * expression.cs (Binary.ResolveOperator): Do no append strings
11781         twice: since we can be invoked more than once (array evaluation)
11782         on the same concatenation, take care of this here.  Based on a fix
11783         from Ben (bug #56454)
11784
11785 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11786
11787         * codegen.cs: Fix another case where CS1548 must be reported (when 
11788         delay-sign isn't specified and no private is available #56564). Fix
11789         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11790         error when MCS is used on the MS runtime and we need to delay-sign 
11791         (which seems unsupported by AssemblyBuilder - see #56621).
11792
11793 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
11794
11795         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
11796         (TypeManager.ComputeNamespaces): Faster implementation for
11797         Microsoft runtime.
11798
11799         * compiler.csproj: Updated AssemblyName to mcs.
11800
11801 2004-05-11  Jackson Harper  <jackson@ximian.com>
11802
11803         * Makefile: Preserve MONO_PATH
11804         
11805 2004-05-11  Jackson Harper  <jackson@ximian.com>
11806
11807         * Makefile: Use mono and mcs to build gmcs
11808         
11809 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
11810
11811         * codegen.cs: Add patch from Robert Shade
11812         <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
11813         sync with mcs.
11814
11815 2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
11816
11817         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11818         incomplete key pairs (#57941).
11819
11820 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11821
11822         * codegen.cs: Fix another case where CS1548 must be reported (when 
11823         delay-sign isn't specified and no private is available #56564). Fix
11824         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11825         error when MCS is used on the MS runtime and we need to delay-sign 
11826         (which seems unsupported by AssemblyBuilder - see #56621).
11827
11828 2004-04-29  Jackson Harper  <jackson@ximian.com>
11829
11830         * Makefile: Set MONO_PATH to use the bootstrap corlib
11831         * driver.cs: Check the GAC for referenced assemblies.
11832                 
11833 2004-04-29  Martin Baulig  <martin@ximian.com>
11834
11835         * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
11836
11837 2004-04-07  Martin Baulig  <martin@ximian.com>
11838
11839         * expression.cs (Binary.ResolveOperator): Added special case for
11840         Equality/Inequality between a type parameter and a null literal.
11841
11842 2004-04-07  Martin Baulig  <martin@ximian.com>
11843
11844         * convert.cs: Check null literal -> type parameter conversions.
11845
11846 2004-04-07  Martin Baulig  <martin@ximian.com>
11847
11848         * generic.cs (ConstructedType.CheckConstraints): Enforce the
11849         `class' and `struct' constraints.
11850
11851 2004-04-07  Martin Baulig  <martin@ximian.com>
11852
11853         * generic.cs (SpecialConstraint): New public enum.
11854         (Constraints.Resolve): Added support for the `class' and `struct'
11855         constraints.
11856
11857         * cs-parser.jay (type_parameter_constraint): Added support for the
11858         `class' and `struct' constraints.
11859
11860 2004-04-07  Martin Baulig  <martin@ximian.com>
11861
11862         * support.cs (GenericConstraints): Replaced `Types' by
11863         `ClassConstraint' and `InterfaceConstraints'; added
11864         `HasClassConstraint'.   
11865
11866 2004-04-07  Martin Baulig  <martin@ximian.com>
11867
11868         * generic.cs
11869         (Constraints.InterfaceConstraints): New public property.
11870         (Constraints.Types): Make this property public
11871         (TypeParameter): Implement IMemberContainer.
11872         (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
11873         instead of a TypeBuilder/MethodBuilder; pass the interface
11874         constraints to TypeManager.AddTypeParameter().
11875         (TypeParameter.DefineType): Just take an EmitContext and no
11876         TypeBuilder/MethodBuilder.  Use the new public API.
11877
11878         * typemanager.cs (TypeManager.AddTypeParameter): Added
11879         `TypeExpr[]' argument; add the interfaces to the
11880         `builder_to_ifaces' hash.
11881         (TypeManager.LookupMemberContainer): For
11882         GenericTypeParameterBuilders, get the TypeParameter from the
11883         `builder_to_type_param'.
11884         (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
11885         the TypeParameter and call FindMembers on it.
11886
11887 2004-04-07  Martin Baulig  <martin@ximian.com>
11888
11889         * class.cs
11890         (MethodCore.GenericMethod): Moved this field here from Method.
11891         (MethodCore.IsDuplicateImplementation): Take the number of type
11892         parameters into account if we're a generic method.
11893
11894         * expression.cs (Invocation.InferTypeArguments): Don't return true
11895         if `arguments' is null; we still need to check whether we actually
11896         don't need to infer anything in this case.
11897         (MemberAccess): Merged the functionality from GenericMemberAccess
11898         into this class.
11899
11900         * generic.cs (GenericMemberAccess): Removed.
11901
11902 2004-04-05  Martin Baulig  <martin@ximian.com>
11903
11904         * decl.cs (MemberCore): For generic classes, interfaces and
11905         structs, `Name' now includes the number of type parameters
11906         ("Stack!1.Node!1").
11907         (DeclSpace.FindType): Removed the `num_type_args' argument; we now
11908         encode the number of type arguments in the type name.
11909
11910         * expression.cs (Expression.MemberLookup): Removed the
11911         `num_type_args' argument; we now encode the number of type
11912         arguments in the type name.
11913
11914         * ecore.cs (SimpleName): Encode the number of type arguments in
11915         the type name itself.
11916
11917         * generic.cs (ConstructedType): Likewise.
11918
11919         * tree.cs (Tree.RecordDecl): Take a `string' instead of a
11920         `MemberName'; we now include the number of type parameters in the
11921         type name.
11922
11923         * typemanager.cs (TypeManager.CheckGeneric): Removed.
11924         (TypeManager.MemberLookup): Removed the
11925         `num_type_args' argument; we now encode the number of type
11926         arguments in the type name.     
11927
11928 2004-04-03  Martin Baulig  <martin@ximian.com>
11929
11930         * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
11931         (MemberCore.MemberName): Moved here from MemberBase.
11932         (DeclSpace.SetParameterInfo): Just take the constraints as an
11933         ArrayList; we already have the type parameters in our
11934         `MemberName'; also do the CS0080 reporting here.
11935
11936         * cs-parser.jay (struct_declaration): Use `member_name' instead of
11937         `IDENTIFIER opt_type_parameter_list'; when constructing our
11938         `MemberName', it'll already include our type parameters.
11939         (class_declaration, interface_declaration): Likewise.
11940         (delegate_declaration): Likewise.
11941         (MakeName): Take a MemberName and return a MemberName.
11942         The following two changes are required to avoid shift/reduce conflicts:
11943         (member_name): Don't include a TypeName anymore; ie. this is now
11944         just 'IDENTIFIER opt_type_parameter_list'.
11945         (property_declaration, event_declaration): Use a
11946         `namespace_or_type_name' instead of a `member_name'.            
11947
11948 2004-04-03  Martin Baulig  <martin@ximian.com>
11949
11950         * decl.cs (MemberName): Renamed to `TypeName' and created a new
11951         `MemberName' class.
11952         (TypeName): Formerly known as MemberName.
11953
11954         * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
11955         instead of a `MemberName'.
11956
11957         * cs-parser.jay (namespace_or_type_name): Create a TypeName.
11958         (member_name): New rule; create a MemberName.
11959
11960 2004-04-02  Martin Baulig  <martin@ximian.com>
11961
11962         * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
11963         (CS0305 and CS0308).
11964
11965 2004-04-02  Martin Baulig  <martin@ximian.com>
11966
11967         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
11968         support for nested types.
11969
11970 2004-04-02  Martin Baulig  <martin@ximian.com>
11971
11972         * ecore.cs (IAlias): New public interface.
11973         (TypeExpr, TypeExpression): Implement IAlias.
11974         (TypeAliasExpression): New public class.
11975
11976         * namespace.cs (Namespace): Implement IAlias.
11977         (Namespace.Lookup): Return an IAlias instead on an object.
11978         (Namespace.DefineName): Take an IAlias instead of an object.
11979         (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
11980         an object.
11981         (NamespaceEntry.UsingAlias): Take a Membername instead of an
11982         Expression.
11983         (NamespaceEntry.LookupAlias): Return an IAlias instead on an
11984         object.
11985         (NamespaceEntry.Lookup): Likewise.
11986
11987         * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
11988         instead of a Type.      
11989
11990         * decl.cs (DeclSpace): Implement IAlias.
11991         (DeclSpace.LookupAlias): Return an IAlias instead of a string.
11992
11993         * generic.cs (ConstructedType): Improved error checking.
11994
11995 2004-04-02  Martin Baulig  <martin@ximian.com>
11996
11997         * convert.cs: Added type parameter conversions.
11998
11999         * ecore.cs
12000         (UnboxCast.Emit): Emit an `unbox.any' for type params.
12001         (ClassCast.Emit): If the source type is a type parameter, box it.
12002         If the target type is a type parameter, emit an `unbox.any'
12003         instead of a `classcast'.1      
12004
12005 2004-04-01  Martin Baulig  <martin@ximian.com>
12006
12007         * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
12008
12009 2004-04-01  Martin Baulig  <martin@ximian.com>
12010
12011         * generic.cs (ConstructedType.CheckConstraints): Use
12012         Convert.ImplicitStandardConversionExists(); user-defined implicit
12013         conversions are not allowed according to the spec.
12014
12015 2004-03-30  Martin Baulig  <martin@ximian.com>
12016
12017         * expression.cs (New): Added support for type parameters.
12018
12019         * typemanager.cs
12020         (TypeManager.activator_type): New public static field.
12021         (TypeManager.activator_create_instance): Likewise.
12022
12023 2004-03-30  Martin Baulig  <martin@ximian.com>
12024
12025         * typemanager.cs (TypeManager.HasConstructorConstraint): New
12026         public method.
12027
12028 2004-03-30  Martin Baulig  <martin@ximian.com>
12029
12030         * generic.cs (ConstructedType.CheckConstraints): Actually follow
12031         the spec here: the argument type must be convertible to the
12032         constraints.
12033
12034 2004-03-30  Martin Baulig  <martin@ximian.com>
12035
12036         * generic.cs
12037         (TypeParameter.Define, TypeParameter.DefineMethod): Call
12038         TypeManager.AddTypeParameter().
12039         (ConstructedType.CheckConstraints): Re-enable this and actually
12040         check whether we have a constructor constraint.
12041
12042         * typemanager.cs
12043         (TypeManager.builder_to_type_param): New static field.
12044         (TypeManager.AddTypeParameter): New static method.
12045         (TypeManager.LookupTypeParameter): New public method.
12046
12047 2004-03-30  Martin Baulig  <martin@ximian.com>
12048
12049         * generic.cs (TypeParameter.DefineType): Return a boolean and use
12050         the new API to actually define the constructor constraint.
12051
12052         * typemanager.cs
12053         (TypeManager.new_constraint_attr_type): New static field.
12054         (TypeManager.InitCoreTypes): Initialize it.
12055
12056 2004-03-30  Martin Baulig  <martin@ximian.com>
12057
12058         * generic.cs (Constraints): Completed error checking, use correct
12059         error numbers.
12060
12061 2004-03-29  Martin Baulig  <martin@ximian.com>
12062
12063         * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
12064
12065         * expression.cs (Invocation.InferTypeArguments): Added overloaded
12066         public version which takes a `ParameterData pd' instead of an
12067         `ArrayList args'.
12068
12069 2004-03-29  Martin Baulig  <martin@ximian.com>
12070
12071         * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
12072         not a MethodInfo.       
12073
12074 2004-03-29  Martin Baulig  <martin@ximian.com>
12075
12076         * expression.cs (Argument.ResolveMethodGroup): If we're a
12077         ConstructedType, call GetMemberAccess() on it.  
12078
12079 2004-03-29  Martin Baulig  <martin@ximian.com>
12080
12081         * class.cs (MethodBase.CheckGenericOverride): New abstract method.
12082         (MethodCore.CheckGenericOverride): When overriding a generic
12083         method, check whether the constraints match.
12084
12085         * support.cs (GenericConstraints): New public interface.
12086         (ParameterData.GenericConstraints): New public method.
12087
12088         * parameter.cs (Parameter.Resolve): Check whether we're a generic
12089         method parameter and compute our constraints if appropriate.
12090         (Parameter.GenericConstraints): New public property.
12091
12092         * generic.cs (Constraints): Implement GenericConstraints.
12093
12094 2004-03-29  Martin Baulig  <martin@ximian.com>
12095
12096         * decl.cs (MemberCache.FindMemberToOverride): Use
12097         `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
12098
12099 2004-03-29  Martin Baulig  <martin@ximian.com>
12100
12101         * generic.cs (GenericMethod.Define): Resolve our type parameters.
12102
12103 2004-03-29  Martin Baulig  <martin@ximian.com>
12104
12105         * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
12106         not allowed on non-generic declarations").
12107
12108 2004-03-29  Martin Baulig  <martin@ximian.com>
12109
12110         * expression.cs (Invocation.InferTypeArguments): Added overloaded
12111         public version of this method.
12112
12113         * class.cs (MethodCore.IsDuplicateImplementation): Use
12114         Invocation.InferTypeArguments() to check this.
12115
12116 2004-03-29  Martin Baulig  <martin@ximian.com>
12117
12118         * convert.cs: Use TypeManager.IsDelegateType() instead of
12119         comparing types correctly.
12120
12121 2004-03-29  Martin Baulig  <martin@ximian.com>
12122
12123         * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
12124         types directly to make it work for generic instances.
12125
12126         * typemanager.cs (TypeManager.IsSubclassOf): New static method.
12127
12128 2004-03-29  Martin Baulig  <martin@ximian.com>
12129
12130         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
12131         support for arrays.     
12132
12133 2004-03-24  Martin Baulig  <martin@ximian.com>
12134
12135         * decl.cs (DeclSpace.FindType): Also use
12136         TypeManager.CheckGeneric() for types from the using clauses.
12137
12138 2004-03-23  Martin Baulig  <martin@ximian.com>
12139
12140         * expression.cs (Invocation.OverloadResolve): Added `bool
12141         may_fail' argument and use it instead of the Location.IsNull() hack.
12142
12143 2004-03-23  Martin Baulig  <martin@ximian.com>
12144
12145         * expression.cs (Invocation.InferType): Use correct type inference
12146         rules here.     
12147
12148 2004-03-23  Martin Baulig  <martin@ximian.com>
12149
12150         * ecore.cs (MethodGroupExpr.Name): Use
12151         TypeManager.CSharpSignature() instead of just the name.
12152
12153         * expression.cs (Invocation.OverloadResolve): Provide better error
12154         reporting.
12155         (Invocation.DoResolve): OverloadResolve() never returns null
12156         without reporting an error, so removed the error -6 reporting here.
12157
12158 2004-03-23  Martin Baulig  <martin@ximian.com>
12159
12160         * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
12161         generic methods.
12162
12163         * cs-parser.jay (delegate_declaration): Support generic delegates.
12164
12165         * delegate.cs: Support generic delegates.
12166
12167 2004-03-22  Martin Baulig  <martin@ximian.com>
12168
12169         * expression.cs (Invocation.InferParamsTypeArguments): New static
12170         method; does type inference for params arguments.
12171
12172 2004-03-21  Martin Baulig  <martin@ximian.com>
12173
12174         * typemanager.cs (TypeManager.IsGenericMethod): New public static
12175         method; checks whether a method is a generic method.    
12176
12177         * expression.cs (Invocation.InferTypeArguments): New static method;
12178         infer type arguments for generic method invocation.
12179
12180         * ecore.cs (MethodGroupExpr.HasTypeArguments): New public
12181         property; we set this to true if we're resolving a generic method
12182         invocation and the user specified type arguments, ie. we're not
12183         doing type inference.
12184
12185 2004-03-20  Martin Baulig  <martin@ximian.com>
12186
12187         * class.cs (MethodData.DeclaringType): New public property.
12188         (MethodData.Define): Set DeclaringType here.
12189         (Operator.Define): Use OperatorMethod.MethodData.DeclaringType
12190         instead of OperatorMethodBuilder.DeclaringType.
12191
12192 2004-03-20  Martin Baulig  <martin@ximian.com>
12193
12194         * cs-tokenizer.cs (xtoken): Return a special
12195         Token.DEFAULT_OPEN_PARENS for "`default' followed by open parens".
12196
12197         * cs-parser.jay (default_value_expression): Switch to the new
12198         syntax (14.5.13).
12199
12200 2004-03-19  Martin Baulig  <martin@ximian.com>
12201
12202         * decl.cs (MemberName): New class.  We use this to "construct"
12203         namespace_or_type_name's.
12204
12205         * generics.cs (TypeArguments.GetDeclarations): New public method;
12206         returns the type arguments as a string[] and reports a CS0081 if
12207         one of them is not an identifier.
12208
12209         * class.cs (MemberBase): The .ctor now takes the name as a
12210         MemberName instead of a string.
12211         (MemberBase.ExplicitInterfaceName): Changed type from string to
12212         Expression.
12213         (MemberBase.DoDefine): If we're an explicit implementation, the
12214         InterfaceType may be a generic instance.
12215
12216         * cs-parser.jay (namespace_or_type_name): Return a MemberName.
12217         (namespace_name): Call MemberName.GetName () to transform the
12218         MemberName into a string and ensure we don't have any type
12219         arguments.
12220         (type_name): Call MemberName.GetTypeExpression() to transfrom the
12221         MemberName into an expression.
12222         (method_header): Use namespace_or_type_name instead of member_name.     
12223
12224 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
12225
12226         * rootcontext.cs: Add new types to the boot resolution.
12227
12228         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
12229         MulticastDelegate is not allowed.
12230
12231         * typemanager.cs: Add new types to lookup: System.TypedReference
12232         and ArgIterator.
12233
12234         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
12235         check for TypedReference or ArgIterator, they are not allowed. 
12236
12237         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
12238         makes us properly catch 1510 in some conditions (see bug 56016 for
12239         details). 
12240
12241 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
12242
12243         * CryptoConvert.cs: update from corlib version
12244         with endian fixes.
12245
12246 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
12247
12248         * class.cs (Indexer.Define): Check indexername declaration
12249
12250 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
12251
12252         * attribute.cs (IsClsCompliant): Fixed problem with handling
12253         all three states (compliant, not-compliant, undetected).
12254
12255 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
12256
12257         * attribute.cs (Attribute): Location is now public.
12258         (Resolve): Store resolved arguments (pos_values) in attribute class.
12259         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
12260         (GetClsCompliantAttributeValue): New method that gets
12261         CLSCompliantAttribute value.
12262         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
12263         if exists else null.
12264         (AttributeTester): New class for CLS-Compliant verification routines.
12265
12266         * class.cs (Emit): Add CLS-Compliant verification.
12267         (Method.GetSignatureForError): Implemented.
12268         (Constructor.GetSignatureForError): Implemented
12269         (Constructor.HasCompliantArgs): Returns if constructor has
12270         CLS-Compliant arguments.
12271         (Constructor.Emit): Override.
12272         (Construcor.IsIdentifierClsCompliant): New method; For constructors
12273         is needed to test only parameters.
12274         (FieldBase.GetSignatureForError): Implemented.
12275         (TypeContainer): New member for storing base interfaces.
12276         (TypeContainer.FindMembers): Search in base interfaces too.
12277
12278         * codegen.cs (GetClsComplianceAttribute): New method that gets
12279         assembly or module CLSCompliantAttribute value.
12280         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
12281         for assembly.
12282         (ModuleClass.Emit): Add error 3012 test.
12283
12284         * const.cs (Emit): Override and call base for CLS-Compliant tests.
12285
12286         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
12287         state for all decl types.
12288         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
12289         if CLS-Compliant tests are required.
12290         (IsClsCompliaceRequired): New method. Analyze whether code
12291         must be CLS-Compliant.
12292         (IsExposedFromAssembly): New method. Returns true when MemberCore
12293         is exposed from assembly.
12294         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
12295         value or gets cached value.
12296         (HasClsCompliantAttribute): New method. Returns true if MemberCore
12297         is explicitly marked with CLSCompliantAttribute.
12298         (IsIdentifierClsCompliant): New abstract method. This method is
12299         used to testing error 3005.
12300         (IsIdentifierAndParamClsCompliant): New method. Common helper method
12301         for identifier and parameters CLS-Compliant testing.
12302         (VerifyClsCompliance): New method. The main virtual method for
12303         CLS-Compliant verifications.
12304         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
12305         null. I don't know why is null (too many public members !).
12306         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
12307         and get value of first CLSCompliantAttribute that found.
12308
12309         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
12310         (VerifyClsCompliance): Override and add extra tests.
12311
12312         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
12313         clscheck- disable CLS-Compliant verification event if assembly is has
12314         CLSCompliantAttribute(true).
12315
12316         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
12317         ApllyAttribute is now called in emit section as in the other cases.
12318         Possible future Emit integration.
12319         (IsIdentifierClsCompliant): New override.
12320         (VerifyClsCompliance): New override.
12321         (GetEnumeratorName): Returns full enum name.
12322
12323         * parameter.cs (GetSignatureForError): Implemented.
12324
12325         * report.cs (WarningData): New struct for Warning message information.
12326         (LocationOfPreviousError): New method.
12327         (Warning): New method. Reports warning based on the warning table.
12328         (Error_T): New method. Reports error based on the error table.
12329
12330         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
12331         verifications are done here.
12332
12333         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
12334
12335         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
12336         CLSCompliantAttribute.
12337         (all_imported_types): New member holds all imported types from other
12338         assemblies.
12339         (LoadAllImportedTypes): New method fills static table with exported types
12340         from all referenced assemblies.
12341         (Modules): New property returns all assembly modules.
12342
12343 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
12344
12345         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
12346         throwing a parser error.
12347
12348         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
12349         which removes the hardcoded get_/set_ prefixes for properties, as
12350         IL allows for the properties to be named something else.  
12351
12352         Bug #56013
12353
12354         * expression.cs: Do not override operand before we know if it is
12355         non-null.  Fix 56207
12356
12357 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12358
12359         * typemanager.cs: support for pinned variables.
12360
12361 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12362
12363         * decl.cs, typemanager.cs: Avoid using an arraylist
12364         as a buffer if there is only one result set.
12365
12366 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12367
12368         * expression.cs: Make sure you cant call a static method
12369         with an instance expression, bug #56174.
12370
12371 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
12372
12373         * class.cs (IsDuplicateImplementation): Improve error reporting to
12374         flag 663 (method only differs in parameter modifier).
12375
12376         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
12377         in preprocessor directives.
12378
12379         * location.cs (LookupFile): Allow for the empty path.
12380
12381         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
12382         better approach for some of that patch, but its failing with the
12383         CharSet enumeration.  For now try/catch will do.
12384
12385         * typemanager.cs: Do not crash if a struct does not have fields.
12386         Fixes 56150.
12387
12388 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12389
12390         * expression.cs: cs0213, cant fix a fixed expression.
12391         fixes 50231.
12392
12393 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12394
12395         * cs-parser.jay: detect invalid embeded statements gracefully.
12396         bug #51113.
12397
12398 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12399
12400         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
12401         As a regex:
12402         s/
12403         the invocation type may not be a subclass of the tye of the item/
12404         The type of the item must be a subclass of the invocation item.
12405         /g
12406
12407         Fixes bug #50820.
12408
12409 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
12410
12411         * attribute.cs: Added methods to get a string and a bool from an
12412         attribute. Required to information from AssemblyKeyFileAttribute,
12413         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
12414         * codegen.cs: Modified AssemblyName creation to include support for
12415         strongnames. Catch additional exceptions to report them as CS1548.
12416         * compiler.csproj: Updated include CryptoConvert.cs.
12417         * compiler.csproj.user: Removed file - user specific configuration.
12418         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
12419         Mono.Security assembly. The original class is maintained and tested in
12420         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
12421         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
12422         like CSC 8.0 (C# v2) supports.
12423         * Makefile: Added CryptoConvert.cs to mcs sources.
12424         * rootcontext.cs: Added new options for strongnames.
12425
12426 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
12427
12428         * driver.cs: For --expect-error, report error code `2'
12429         if the program compiled with no errors, error code `1' if
12430         it compiled with an error other than the one expected.
12431
12432 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
12433
12434         * compiler.csproj: Updated for Visual Studio .NET 2003.
12435         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
12436         * compiler.sln: Updated for Visual Studio .NET 2003.
12437
12438 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
12439
12440         * expression.cs: Fix bug #47234. We basically need to apply the
12441         rule that we prefer the conversion of null to a reference type
12442         when faced with a conversion to 'object' (csc behaviour).
12443
12444 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12445
12446         * statement.cs: Shorter form for foreach, eliminates
12447         a local variable. r=Martin.
12448
12449 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12450
12451         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
12452         checks if we can use brtrue/brfalse to test for 0.
12453         * expression.cs: use the above in the test for using brtrue/brfalse.
12454         cleanup code a bit.
12455
12456 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12457
12458         * expression.cs: Rewrite string concat stuff. Benefits:
12459
12460         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
12461         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
12462         rather than a concat chain.
12463
12464         * typemanager.cs: Add lookups for more concat overloads.
12465
12466 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12467
12468         * expression.cs: Emit shorter il code for array init.
12469
12470         newarr
12471         dup
12472         // set 1
12473
12474         // set 2
12475
12476         newarr
12477         stloc.x
12478
12479         ldloc.x
12480         // set 1
12481
12482         ldloc.x
12483         // set 2
12484
12485 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
12486
12487         * statement.cs: Before, two switch blocks would be merged if the
12488         total size of the blocks (end_item - begin_item + 1) was less than
12489         two times the combined sizes of the blocks.
12490
12491         Now, it will only merge if after the merge at least half of the
12492         slots are filled.
12493
12494         fixes 55885.
12495
12496 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
12497
12498         * class.cs : csc build fix for GetMethods(). See bug #52503.
12499
12500 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
12501
12502         * expression.cs: Make sure fp comparisons work with NaN.
12503         This fixes bug #54303. Mig approved this patch a long
12504         time ago, but we were not able to test b/c the runtime
12505         had a related bug.
12506
12507 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
12508
12509         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
12510
12511 2004-03-19  Martin Baulig  <martin@ximian.com>
12512
12513         * class.cs (MemberCore.IsDuplicateImplementation): Check whether
12514         two overloads may unify for some type parameter substitutions and
12515         report a CS0408 if appropriate.
12516
12517 2004-03-19  Martin Baulig  <martin@ximian.com>
12518
12519         * class.cs (MemberCore.IsDuplicateImplementation): Report the
12520         error here and not in our caller.
12521
12522 2004-03-19  Martin Baulig  <martin@ximian.com>
12523
12524         * interface.cs: Completely killed this file.
12525         (Interface): We're now a TypeContainer and live in class.cs.
12526
12527         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
12528         argument; we're now also called for interfaces.
12529         (TypeContainer.DefineMembers): Allow this method being called
12530         multiple times.
12531         (TypeContainer.GetMethods): New public method; formerly known as
12532         Interface.GetMethod().  This is used by PendingImplementation.
12533         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
12534         it's now private and non-static.
12535         (Interface): Moved this here; it's now implemented similar to
12536         Class and Struct.
12537         (Method, Property, Event, Indexer): Added `bool is_interface'
12538         argument to their .ctor's.
12539         (MemberBase.IsInterface): New public field.
12540
12541         * cs-parser.jay: Create normal Method, Property, Event, Indexer
12542         instances instead of InterfaceMethod, InterfaceProperty, etc.
12543         (opt_interface_base): Removed; we now use `opt_class_base' instead.
12544         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
12545
12546 2004-03-19  Martin Baulig  <martin@ximian.com>
12547
12548         * class.cs (MethodCore.IsDuplicateImplementation): New private
12549         method which does the CS0111 checking.
12550         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
12551         Use IsDuplicateImplementation().
12552
12553 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
12554
12555         * decl.cs (FindMemberToOverride): New method to find the correct
12556         method or property to override in the base class.
12557         * class.cs
12558             - Make Method/Property use the above method to find the
12559               version in the base class.
12560             - Remove the InheritableMemberSignatureCompare as it is now
12561               dead code.
12562
12563         This patch makes large code bases much faster to compile, as it is
12564         O(n) rather than O(n^2) to do this validation.
12565
12566         Also, it fixes bug 52458 which is that nested classes are not
12567         taken into account when finding the base class member.
12568
12569         Reviewed/Approved by Martin.
12570
12571 2004-03-17  Martin Baulig  <martin@ximian.com>
12572
12573         * expression.cs (MemberAccess.DoResolve): Take the parent's number
12574         of type arguments into account; use the `real_num_type_args'
12575         approach like in DoResolveAsTypeStep().
12576
12577         * generic.cs (GenericMemberAccess.DoResolve): Make this work for
12578         nested types.
12579
12580 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
12581
12582         * interface.cs: In all interface classes removed redundant
12583         member initialization.
12584
12585 2004-03-16  Martin Baulig  <martin@ximian.com>
12586
12587         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12588
12589 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12590
12591         * decl.cs (DefineTypeAndParents): New helper method to define a
12592         type's containers before the type itself is defined;  This is a
12593         bug exposed by the recent changes to Windows.Forms when an
12594         implemented interface was defined inside a class that had not been
12595         built yet.   
12596
12597         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
12598
12599         (Check): Loop correctly to report errors modifiers
12600         (UNSAFE was not in the loop, since it was the same as TOP).
12601
12602         * interface.cs: Every interface member now takes a ModFlags,
12603         instead of a "is_new" bool, which we set on the base MemberCore. 
12604
12605         Every place where we called "UnsafeOk" in the interface, now we
12606         call the proper member (InterfaceMethod.UnsafeOK) instead to get
12607         the unsafe settings from the member declaration instead of the
12608         container interface. 
12609
12610         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
12611
12612         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12613         `set_indexer_name' to the pending bits (one per type).
12614
12615         We fixed a bug today that was picking the wrong method to
12616         override, since for properties the existing InterfaceMethod code
12617         basically ignored the method name.  Now we make sure that the
12618         method name is one of the valid indexer names.
12619
12620 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
12621  
12622         * support.cs (SeekableStreamReader): Keep track of stream byte
12623         positions and don't mix them with character offsets to the buffer.
12624
12625         Patch from Gustavo Giráldez
12626
12627 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
12628
12629         * interface.cs (InterfaceSetGetBase): Removed double member
12630         initialization, base class does it as well.
12631
12632 2004-03-13  Martin Baulig  <martin@ximian.com>
12633
12634         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
12635         when compiling corlib.
12636
12637 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
12638
12639         * convert.cs (ExplicitConversion): We were reporting an error on
12640         certain conversions (object_type source to a value type, when the
12641         expression was `null') before we had a chance to pass it through
12642         the user defined conversions.
12643
12644         * driver.cs: Replace / and \ in resource specifications to dots.
12645         Fixes 50752
12646
12647         * class.cs: Add check for duplicate operators.  Fixes 52477
12648
12649 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
12650
12651         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
12652         that are in the middle of the statements, not only at the end.
12653         Fixes #54987
12654
12655         * class.cs (TypeContainer.AddField): No longer set the
12656         `HaveStaticConstructor' flag, now we call it
12657         `UserDefineStaticConstructor' to diferentiate the slightly
12658         semantic difference.
12659
12660         The situation is that we were not adding BeforeFieldInit (from
12661         Modifiers.TypeAttr) to classes that could have it.
12662         BeforeFieldInit should be set to classes that have no static
12663         constructor. 
12664
12665         See:
12666
12667         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
12668
12669         And most importantly Zoltan's comment:
12670
12671         http://bugzilla.ximian.com/show_bug.cgi?id=44229
12672
12673         "I think beforefieldinit means 'it's ok to initialize the type sometime 
12674          before its static fields are used', i.e. initialization does not need
12675          to be triggered by the first access to the type. Setting this flag
12676          helps the JIT to compile better code, since it can run the static
12677          constructor at JIT time, and does not need to generate code to call it
12678          (possibly lots of times) at runtime. Unfortunately, mcs does not set
12679          this flag for lots of classes like String. 
12680          
12681          csc sets this flag if the type does not have an explicit static 
12682          constructor. The reasoning seems to be that if there are only static
12683          initalizers for a type, and no static constructor, then the programmer
12684          does not care when this initialization happens, so beforefieldinit
12685          can be used.
12686          
12687          This bug prevents the AOT compiler from being usable, since it 
12688          generates so many calls to mono_runtime_class_init that the AOT code
12689          is much slower than the JITted code. The JITted code is faster, 
12690          because it does not generate these calls if the vtable is type is
12691          already initialized, which is true in the majority of cases. But the
12692          AOT compiler can't do this."
12693
12694 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
12695
12696         * class.cs (MethodData.Emit): Refactor the code so symbolic
12697         information is generated for destructors;  For some reasons we
12698         were taking a code path that did not generate symbolic information
12699         before. 
12700
12701 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
12702
12703         * class.cs: Create a Constructor.CheckBase method that
12704         takes care of all validation type code. The method
12705         contains some code that was moved from Define.
12706
12707         It also includes new code that checks for duplicate ctors.
12708         This fixes bug #55148.
12709
12710 2004-03-09  Joshua Tauberer <tauberer@for.net>
12711
12712         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
12713         a { ... }-style array creation invokes EmitStaticInitializers
12714         which is not good for reference-type arrays.  String, decimal
12715         and now null constants (NullCast) are not counted toward
12716         static initializers.
12717
12718 2004-03-05  Martin Baulig  <martin@ximian.com>
12719
12720         * location.cs (SourceFile.HasLineDirective): New public field;
12721         specifies whether the file contains or is referenced by a "#line"
12722         directive.
12723         (Location.DefineSymbolDocuments): Ignore source files which
12724         either contain or are referenced by a "#line" directive.        
12725
12726 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
12727
12728         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
12729         direct access to our parent, so check the method inline there.
12730
12731 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
12732
12733         * expression.cs (Invocation.EmitCall): Miguel's last commit
12734         caused a regression. If you had:
12735
12736             T t = null;
12737             t.Foo ();
12738
12739         In Foo the implict this would be null.
12740
12741 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
12742
12743         * expression.cs (Invocation.EmitCall): If the method is not
12744         virtual, do not emit a CallVirt to it, use Call.
12745
12746         * typemanager.cs (GetFullNameSignature): Improve the method to
12747         cope with ".ctor" and replace it with the type name.
12748
12749         * class.cs (ConstructorInitializer.Resolve): Now the method takes
12750         as an argument the ConstructorBuilder where it is being defined,
12751         to catch the recursive constructor invocations.
12752
12753 2004-03-16  Martin Baulig  <martin@ximian.com>
12754
12755         * expression.cs (MemberAccess.DoResolve): If `expr' resolved to a
12756         ConstructedType, call ResolveType() on it to get the type rather
12757         than just using `expr.Type'.
12758
12759 2004-03-16  Martin Baulig  <martin@ximian.com>
12760
12761         * generics.cs (ConstructedType.GetMemberAccess): Take the
12762         EmitContext instead on the TypeExpr and use
12763         ec.TypeContainer.CurrentType/ec.ContainerType.
12764
12765 2004-03-16  Martin Baulig  <martin@ximian.com>
12766
12767         * ecore.cs (SimpleName.DoResolveAsTypeStep): Lookup type
12768         parameters before aliases.
12769
12770 2004-03-16  Martin Baulig  <martin@ximian.com>
12771
12772         * typemanager.cs (TypeManager.MayBecomeEqualGenericInstances):
12773         New oublic function; checks whether two generic instances may become
12774         equal under some instantiations (26.3.1).
12775
12776         * class.cs (TypeContainer.Define): Call
12777         TypeManager.MayBecomeEqualGenericInstances() and report CS0695 on
12778         error.
12779
12780 2004-03-16  Martin Baulig  <martin@ximian.com>
12781
12782         * class.cs (TypeContainer.GetClassBases): Moved
12783         Error_TypeParameterAsBase() here and also check whether the base
12784         class is not an attribute.
12785
12786 2004-03-16  Martin Baulig  <martin@ximian.com>
12787
12788         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12789
12790 2004-03-16  Martin Baulig  <martin@ximian.com>
12791
12792         * class.cs (Error_TypeParameterAsBase): Use correct error number
12793         here (CS0689).  
12794
12795 2004-03-16  Martin Baulig  <martin@ximian.com>
12796
12797         * decl.cs (DeclSpace.ResolveTypeExpr): Added more error checking
12798         for generics.
12799
12800         * generics.cs (ConstructedType.DoResolveAsTypeStep): Added better
12801         error reporting.
12802
12803 2004-03-15  Martin Baulig  <martin@ximian.com>
12804
12805         * typemanager.cs (TypeManager.GetFullName): New public method.
12806         (TypeManager.MemberLookup): Added `int_num_type_arguments'
12807         argument; only return members with the correct number of type
12808         arguments.
12809         (TypeManager.CheckGeneric): Allow -1 to bypass the check.
12810         (TypeManager.FilterWithClosure): Call CheckGeneric() to check
12811         whether the number of type arguments matches.
12812
12813         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Allow `expr'
12814         not being a ConstructedType; we can now do "typeof (Foo.Bar<U>)".
12815
12816         * expression.cs (MemberAccess): Added public `NumTypeArguments'
12817         field; it's set by the protected .ctor when we're actually a
12818         GenericMemberAccess.
12819         (MemberAccess.ResolveAsTypeStep): Compute the total number of type
12820         arguments and pass it to MemberLookupFinal ().
12821
12822         * ecore.cs (Expression.MemberLookup): Added `int
12823         num_type_arguments' argument; only return members with the correct
12824         number of type arguments.
12825         (Expression.MemberLookupFailed): Check whether the MemberLookup
12826         failed because we did not have the correct number of type
12827         arguments; report CS0305 in this case.
12828
12829         * decl.cs (DeclSpace.ResolveTypeExpr): Don't report an error if
12830         `e.ResolveAsTypeTerminal()' already did so.
12831
12832 2004-03-15  Martin Baulig  <martin@ximian.com>
12833
12834         * ecore.cs (Expression.ResolveLValue): Allow e.type being null if
12835         we're a ConstructedType; in this case, the caller must report an
12836         error (for instance CS0131).
12837
12838         * generic.cs (TypeArguments): Added Location argument to the .ctor.
12839         (TypeArguments.Resolve): Actually report errors here.
12840
12841 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12842
12843         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12844         `set_indexer_name' to the pending bits (one per type).
12845
12846         We fixed a bug today that was picking the wrong method to
12847         override, since for properties the existing InterfaceMethod code
12848         basically ignored the method name.  Now we make sure that the
12849         method name is one of the valid indexer names.
12850
12851 2004-03-15  Martin Baulig  <martin@ximian.com>
12852
12853         * typemanager.cs (TypeManager.IndexerPropertyName): Added support
12854         for generic instances.
12855
12856 2004-03-13  Martin Baulig  <martin@ximian.com>
12857
12858         * class.cs (TypeContainer.DefineType): Call
12859         TypeManager.AddUserType() immediately after creating the
12860         TypeBuilder; pass all type parameters when creating the
12861         CurrentType.
12862
12863         * decl.cs (DeclSpace.FindNestedType): New public method.
12864         (DeclSpace.FindType): Added `int num_type_args' argument; only
12865         return types with the correct number of type parameters.
12866         (DeclSpace.CountTypeParams): New public property.
12867
12868         * ecore.cs (SimpleName.ctor): Added overloaded version which takes
12869         the number of type parameters; defaults to zero.
12870
12871         * generic.cs (TypeArguments.Count): New public property.
12872         (ConstructedType.DoResolveAsTypeStep): First call
12873         ds.FindNestedType() to find out whether we're nested in the
12874         current generic type; in this case, we inherit all type parameters
12875         from the current class.
12876
12877         * rootcontext.cs (RootContext.NamespaceLookup): Added `int
12878         num_type_args' argument.
12879         (RootContext.LookupType): Added overloaded version which takes the
12880         number of type arguments; only return types with the correct
12881         number of type arguments.
12882
12883         * typemanager.cs (TypeManager.CheckGeneric): New public function;
12884         checks whether `Type t' has `int num_type_args'.
12885
12886 2004-03-13  Martin Baulig  <martin@ximian.com>
12887
12888         * generic.cs (GenericMethod.DefineType): New method; calls
12889         DefineType() on all the type parameters.
12890
12891         * class.cs (MethodData.ctor): Added `GenericMethod generic' argument.
12892         (MethodData.Define): If we're a generic method, call
12893         GenericMethod.DefineType() to define the type parameters.       
12894
12895 2004-03-10  Martin Baulig  <martin@ximian.com>
12896
12897         * pending.cs (Pending.InterfaceMethod): Use TypeManager.IsEqual()
12898         instead of IsAssignableFrom.    
12899
12900 2004-03-10  Martin Baulig  <martin@ximian.com>
12901
12902         * ecore.cs (FieldExpr.ctor): Use TypeManager.TypeToCoreType().
12903
12904         * support.cs (ParameterData.HasArrayParameter): New property.
12905         (ReflectionParameters.ctor): Take a MethodBase instead of a
12906         ParameterInfo[].  If we have any type parameters, get the generic
12907         method definition and ask it whether we have variable arguments.
12908
12909 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
12910
12911         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
12912         routines to check if a type is an enumerable/enumerator allow
12913         classes that implement the IEnumerable or IEnumerator interfaces.
12914
12915         * class.cs (Property, Operator): Implement IIteratorContainer, and
12916         implement SetYields.
12917
12918         (Property.Define): Do the block swapping for get_methods in the
12919         context of iterators.   We need to check if Properties also
12920         include indexers or not.
12921
12922         (Operator): Assign the Block before invoking the
12923         OperatorMethod.Define, so we can trigger the Iterator code
12924         replacement. 
12925
12926         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
12927         Property and Operator classes are not created when we parse the
12928         declarator but until we have the block completed, so we use a
12929         singleton SimpleIteratorContainer.Simple to flag whether the
12930         SetYields has been invoked.
12931
12932         We propagate this setting then to the Property or the Operator to
12933         allow the `yield' to function.
12934
12935 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
12936
12937         * codegen.cs: Implemented attribute support for modules.
12938         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
12939         Assembly/Module functionality.
12940
12941         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
12942         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
12943         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
12944
12945 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
12946
12947         * interface.cs (FindMembers): The operation is performed on all base
12948         interfaces and not only on the first. It is required for future CLS Compliance patch.
12949
12950 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
12951
12952         * statement.cs, codegen.cs:
12953         This patch deals with patterns such as:
12954
12955         public class List : IEnumerable {
12956
12957                 public MyEnumerator GetEnumerator () {
12958                         return new MyEnumerator(this);
12959                 }
12960
12961                 IEnumerator IEnumerable.GetEnumerator () {
12962                         ...
12963                 }
12964                 
12965                 public struct MyEnumerator : IEnumerator {
12966                         ...
12967                 }
12968         }
12969
12970         Before, there were a few things we did wrong:
12971         1) we would emit callvirt on a struct, which is illegal
12972         2) we emited ldarg when we needed to emit ldarga
12973         3) we would mistakenly call the interface methods on an enumerator
12974         type that derived from IEnumerator and was in another assembly. For example:
12975
12976         public class MyEnumerator : IEnumerator
12977
12978         Would have the interface methods called, even if there were public impls of the
12979         method. In a struct, this lead to invalid IL code.
12980
12981 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
12982
12983         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
12984           renamed to Emit.
12985
12986         * delegate.cs (Define): Fixed crash when delegate type is undefined.
12987
12988 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
12989
12990         * cs-parser.jay: Fix small regression: we were not testing V2
12991         compiler features correctly.
12992
12993         * interface.cs: If the emit context is null, then create one
12994
12995 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
12996
12997         * decl.cs (GetSignatureForError): New virtual method to get full name
12998           for error messages.
12999
13000         * attribute.cs (IAttributeSupport): New interface for attribute setting.
13001           Now it is possible to rewrite ApplyAttributes method to be less if/else.
13002
13003         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
13004           Duplicated members and code in these classes has been removed.
13005           Better encapsulation in these classes.
13006
13007 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
13008
13009         * assign.cs (Assign.DoResolve): When dealing with compound
13010         assignments, there is a new rule in ECMA C# 2.4 (might have been
13011         there before, but it is documented here) that states that in:
13012
13013         a op= b;
13014
13015         If b is of type int, and the `op' is a shift-operator, then the
13016         above is evaluated as:
13017
13018         a = (int) a op b 
13019
13020         * expression.cs (Binary.ResolveOperator): Instead of testing for
13021         int/uint/long/ulong, try to implicitly convert to any of those
13022         types and use that in pointer arithmetic.
13023
13024         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
13025         method to print information for from the type, not from the
13026         null-method we were given.
13027
13028 2004-02-01  Duncan Mak  <duncan@ximian.com>
13029
13030         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
13031         parsing for cmd, fixes bug #53694.
13032
13033 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
13034
13035         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
13036         in the member name duplication tests. Property and operator name duplication
13037         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
13038
13039 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
13040
13041         * interface.cs (PopulateMethod): Fixed crash when interface method
13042         returns not existing type (error test cs0246-3.cs).
13043
13044 2004-02-02  Ravi Pratap M <ravi@ximian.com>
13045
13046         * cs-parser.jay (interface_accessors): Re-write actions to also
13047         store attributes attached to get and set methods. Fix spelling
13048         while at it.
13049
13050         (inteface_property_declaration): Modify accordingly.
13051
13052         (InterfaceAccessorInfo): New helper class to store information to pass
13053         around between rules that use interface_accessors.
13054
13055         * interface.cs (Emit): Apply attributes on the get and set
13056         accessors of properties and indexers too.
13057
13058         * attribute.cs (ApplyAttributes): Modify accordingly to use the
13059         right MethodBuilder when applying attributes to the get and set accessors.
13060
13061 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
13062
13063         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
13064
13065 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
13066
13067         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
13068
13069 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
13070
13071         * cs-parser.jay: Remove YIELD token, instead use the new grammar
13072         changes that treat `yield' specially when present before `break'
13073         or `return' tokens.
13074
13075         * cs-tokenizer.cs: yield is no longer a keyword.
13076
13077 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
13078
13079         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
13080         setting for default constructors.
13081         For default constructors are almost every time set wrong Modifier. The
13082         generated IL code has been alright. But inside mcs this values was
13083         wrong and this was reason why several of my CLS Compliance tests
13084         failed.
13085
13086 2004-02-27  Martin Baulig  <martin@ximian.com>
13087
13088         * generics.cs (ConstructedType.ResolveType): Make the nested type
13089         stuff actually work.
13090
13091 2004-02-25  Martin Baulig  <martin@ximian.com>
13092
13093         * decl.cs (DeclSpace.CurrentTypeParameters): New protected
13094         property; returns the type parameters just from the current type,
13095         ie. with the ones from outer classes.
13096         (DeclSpace.LookupGeneric): First search in the current class, then
13097         in outer classes.
13098         (DeclSpace.initialize_type_params): When hiding a type parameter
13099         from an outer class, put it into the `type_param_list' anyways.
13100
13101         * expression.cs (MemberAccess.expr): Made this field protected.
13102
13103         * class.cs (TypeContainer.Define): The `CurrentType' just contains
13104         the type parameters from the current class.
13105
13106         * generic.cs (ConstructedType.ResolveType): Support nested generic
13107         types by taking the type parameters which we inherit from outer
13108         classes into account.
13109         (GenericMemberAccess.ResolveAsTypeStep): Override this and added
13110         support for nested generic types.
13111
13112 2004-02-23  Martin Baulig  <martin@ximian.com>
13113
13114         * decl.cs (DeclSpace.IsGeneric): Make this a property instead of a
13115         field and check whether we're nested inside a generic type.
13116         (DeclSpace.ResolveType): If we're resolving to a generic type
13117         definition, create a ConstructedType and return its resolved type.
13118         (DeclSpace.initialize_type_params): New private method;
13119         initializes the `type_param_list' field from the type parameters
13120         from this and all enclosing classes.
13121         (DeclSpace.TypeParameters): Call initialize_type_params() unless
13122         we're already initialized.
13123
13124 2004-02-23  Martin Baulig  <martin@ximian.com>
13125
13126         * class.cs (Method.Define): Create the generic method before
13127         calling DoDefine().
13128         (Memberbase.DoDefine): Added DeclSpace argument (in addition to
13129         the TypeContainer one); we use this for generic methods.
13130
13131         * decl.cs (CheckAccessLevel): If we're a GenericMethod, use our
13132         parent's TypeBuilder.
13133
13134 2004-02-18  Martin Baulig  <martin@ximian.com>
13135
13136         * ecore.cs (FieldExpr.DoResolveLValue): Use TypeManager.IsEqual()
13137         to check for equality.
13138
13139 2004-02-05  Martin Baulig  <martin@ximian.com>
13140
13141         * ecore.cs (FieldExpr.DoResolveLValue): If we have an
13142         `ec.TypeContainer.CurrentType', use it instead of
13143         `ec.ContainerType' to check whether we're in the type's ctor.
13144
13145 2004-01-29  Martin Baulig  <martin@ximian.com>
13146
13147         * expression.cs (Invocation.DoResolve): If we're a
13148         `ConstructedType', then we're actually a generic method, so
13149         rewrite the expr as a GenericMemberAccess.
13150
13151         * cs-parser.jay (member_name): Don't use `namespace_or_type_name'
13152         here; manually parse it into a string.
13153
13154 2004-01-28  Martin Baulig  <martin@ximian.com>
13155
13156         * typemanager.cs (TypeManager.IsEqual): New static method.
13157         (TypeManager.FilterWithClosure): Call TypeManager.IsEqual() to
13158         check for equality instead of using `=='.
13159
13160 2004-01-26  Martin Baulig  <martin@ximian.com>
13161
13162         * decl.cs (DeclSpace.CurrentType): New public field.
13163
13164         * expression.cs (This.ResolveBase): If we have an
13165         `ec.TypeContainer.CurrentType', use it instead of
13166         `ec.ContainerType'.
13167
13168         * class.cs (TypeContainer.DefineType): If we're a generic type,
13169         create the `CurrentType' (unresolved).
13170         (TypeContainer.GenericType): New private field.
13171         (TypeContainer.DefineMembers): If we have a `CurrentType', resolve
13172         it and store it in `GenericType' before creating the MemberCache.
13173         (TypeContainer.GetMembers): If we have a `GenericType', call
13174         TypeManager.FindMembers() on it.
13175
13176         * interface.cs (Interface.GenericType): New private field.
13177         (Interface.DefineType): If we're a generic type, create the
13178         `CurrentType' (unresolved).
13179         (Interface.DefineMembers): If we have a `CurrentType', resolve it
13180         and store it in `GenericType' before creating the MemberCache.
13181         (Interface.GetMembers): If we have a `GenericType', call
13182         TypeManager.FindMembers() on it.
13183
13184 2004-01-22  Martin Baulig  <martin@ximian.com>
13185
13186         * cs-parser.jay (namespace_or_type_name): Return an Expression,
13187         not a QualifiedIdentifier.  This is what `type_name_expression'
13188         was previously doing.
13189         (type_name_expression): Removed; the code is now in
13190         `namespace_or_type_name'.
13191         (qualified_identifier): Removed, use `namespace_or_type_name'
13192         instead.
13193         (QualifiedIdentifier): Removed this class.      
13194
13195 2004-01-22  Martin Baulig  <martin@ximian.com>
13196
13197         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
13198         not a string as alias name.
13199
13200 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
13201
13202         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
13203         #52730 bug, and instead compute correctly the need to use a
13204         temporary variable when requesting an address based on the
13205         static/instace modified of the field and the constructor.
13206  
13207 2004-01-21  Martin Baulig  <martin@ximian.com>
13208
13209         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
13210         class and namespace before looking up aliases.  Fixes #52517.
13211
13212 2004-01-21  Martin Baulig  <martin@ximian.com>
13213
13214         * flowanalysis.cs (UsageVector.Merge): Allow variables being
13215         assinged in a 'try'; fixes exception4.cs.
13216
13217 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13218         * class.cs : Implemented parameter-less constructor for TypeContainer
13219
13220         * decl.cs: Attributes are now stored here. New property OptAttributes
13221
13222         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
13223
13224         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
13225
13226 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13227
13228         * typemanager.cs (CSharpSignature): Now reports also inner class name.
13229           (CSharpSignature): New method for indexer and property signature.
13230
13231 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13232
13233         * pending.cs (IsVirtualFilter): Faster implementation.
13234
13235 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13236
13237         * typemanager.cs: Avoid inclusion of same assembly more than once.
13238
13239 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13240
13241         * cs-parser.jay: Fixed problem where the last assembly attribute
13242           has been applied also to following declaration (class, struct, etc.)
13243           
13244 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13245
13246         * class.cs: Added error CS0538, CS0539 reporting.
13247         Fixed crash on Microsoft runtime when field type is void.
13248
13249         * cs-parser.jay: Added error CS0537 reporting.
13250
13251         * pending.cs: Added error CS0535 reporting.
13252         Improved error report for errors CS0536, CS0534.
13253
13254 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
13255
13256         Merge a few bits from the Anonymous Method MCS tree.
13257
13258         * statement.cs (ToplevelBlock): New class for toplevel methods,
13259         will hold anonymous methods, lifted variables.
13260
13261         * cs-parser.jay: Create toplevel blocks for delegates and for
13262         regular blocks of code. 
13263
13264 2004-01-20  Martin Baulig  <martin@ximian.com>
13265
13266         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
13267         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
13268         and `NeedExplicitReturn'; added `IsLastStatement'.
13269         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
13270         have a `ReturnLabel' or we're not unreachable.
13271
13272         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
13273         child's reachability; don't just override ours with it.  Fixes
13274         #58058 (lluis's example).
13275         (FlowBranching): Added public InTryOrCatch(), InCatch(),
13276         InFinally(), InLoop(), InSwitch() and
13277         BreakCrossesTryCatchBoundary() methods.
13278
13279         * statement.cs (Return): Do all error checking in Resolve().
13280         Unless we are the last statement in a top-level block, always
13281         create a return label and jump to it.
13282         (Break, Continue): Do all error checking in Resolve(); also make
13283         sure we aren't leaving a `finally'.
13284         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
13285         statement in a top-level block.
13286         (Block.Flags): Added `IsDestructor'.
13287         (Block.IsDestructor): New public property.
13288
13289 2004-01-20  Martin Baulig  <martin@ximian.com>
13290
13291         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
13292
13293 2004-01-20  Martin Baulig  <martin@ximian.com>
13294
13295         * statement.cs (Statement.ResolveUnreachable): New public method.
13296         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
13297         (Block.Resolve): Resolve unreachable statements.
13298
13299 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
13300
13301         * expression.cs: We need to fix the case where we do
13302         not have a temp variable here.
13303
13304         * assign.cs: Only expression compound assignments need
13305         temporary variables.
13306
13307 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
13308
13309         * flowanalysis.cs: Reduce memory allocation in a few ways:
13310           - A block with no variables should not allocate a bit
13311             vector for itself.
13312           - A method with no out parameters does not need any tracking
13313             for assignment of the parameters, so we need not allocate
13314             any data for it.
13315           - The arrays:
13316                 public readonly Type[] VariableTypes;
13317                 public readonly string[] VariableNames;
13318             Are redundant. The data is already stored in the variable
13319             map, so we need not allocate another array for it.
13320           - We need to add alot of checks for if (params | locals) == null
13321             due to the first two changes.
13322
13323 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
13324
13325         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
13326         implement IMemoryLocation, we store a copy on a local variable and
13327         take the address of it.  Patch from Benjamin Jemlich
13328
13329         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
13330         to use a special "type_name_expression" rule which reduces the
13331         number of "QualifiedIdentifier" classes created, and instead
13332         directly creates MemberAccess expressions.
13333
13334 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
13335
13336         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
13337         that fixes #52853.  Null literal assignment to ValueType
13338
13339         * class.cs (MethodData.Emit): Instead of checking the name of the
13340         method to determine if its a destructor, create a new derived
13341         class from Method called Destructor, and test for that.  
13342
13343         * cs-parser.jay: Create a Destructor object instead of a Method.  
13344
13345         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
13346
13347         Fixes: 52933
13348
13349 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
13350
13351         * expression.cs (Binary.ResolveOperator): Perform an implicit
13352         conversion from MethodGroups to their delegate types on the
13353         Addition operation.
13354
13355         * delegate.cs: Introduce a new class DelegateCreation that is the
13356         base class for `NewDelegate' and `ImplicitDelegateCreation',
13357         factor some code in here.
13358
13359         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
13360         conversion from MethodGroups to compatible delegate types. 
13361
13362         * ecore.cs (Expression.Resolve): Do not flag error 654
13363         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
13364         we allow conversions from MethodGroups to delegate types now.
13365
13366         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
13367         assignments in v2 either.
13368
13369 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
13370
13371         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
13372         static read-only fields in ctors.
13373
13374         Applied patch from Benjamin Jemlich 
13375
13376         * expression.cs (UnaryMutator): Avoid leaking local variables. 
13377
13378 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
13379
13380         * cs-tokenizer.cs (IsCastToken): Allow the various native types
13381         here to return true, as they can be used like this:
13382
13383                 (XXX) int.MEMBER ()
13384
13385         Fixed 49836 and all the other dups
13386
13387 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
13388
13389         * driver.cs: Implement /win32res and /win32icon.
13390
13391 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
13392
13393         * cs-parser.jay: Add a rule to improve error handling for the
13394         common mistake of placing modifiers after the type.
13395
13396 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
13397
13398         * cs-parser.jay (interface_event_declaration): Catch
13399         initialization of events on interfaces, and report cs0068
13400
13401         * cs-parser.jay (interface_event_declaration): Catch
13402         initialization of events. 
13403
13404         * ecore.cs: Better report missing constructors.
13405
13406         * expression.cs (Binary.ResolveOperator): My previous bug fix had
13407         the error reporting done in the wrong place.  Fix.
13408
13409         * expression.cs (Binary.ResolveOperator): Catch the 
13410         operator + (E x, E y) error earlier, and later allow for implicit
13411         conversions in operator +/- (E e, U x) from U to the underlying
13412         type of E.
13413
13414         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
13415         52596, if the container class is abstract, the default constructor
13416         is protected otherwise its public (before, we were always public).
13417
13418         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
13419         fixed statement.
13420
13421         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
13422         Jemlich that fixes bug #52597, MCS was generating invalid code for
13423         idisposable structs.   Thanks to Ben for following up with this
13424         bug as well.
13425
13426 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
13427
13428         * driver.cs: Allow assemblies without code to be generated, fixes
13429         52230.
13430
13431 2004-01-07  Nick Drochak <ndrochak@gol.com>
13432
13433         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
13434
13435 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
13436
13437         * cs-parser.jay: Add rules to improve error reporting if fields or
13438         methods are declared at the namespace level (error 116)
13439
13440         * Add rules to catch event add/remove
13441
13442 2004-01-04  David Sheldon <dave-mono@earth.li>
13443
13444   * expression.cs: Added matching ")" to error message for 
13445   CS0077
13446
13447 2004-01-03 Todd Berman <tberman@gentoo.org>
13448
13449         * ecore.cs, attribute.cs:
13450         Applying fix from #52429.
13451
13452 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13453
13454         * ecore.cs, expression.cs, statement.cs:
13455         Total rewrite of how we handle branching. We
13456         now handle complex boolean expressions with fewer
13457         jumps. As well if (x == 0) no longer emits a ceq.
13458
13459         if (x is Foo) is much faster now, because we generate
13460         better code.
13461
13462         Overall, we get a pretty big improvement on our benchmark
13463         tests. The code we generate is smaller and more readable.
13464
13465         I did a full two-stage bootstrap. The patch was reviewed
13466         by Martin and Miguel.
13467
13468 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13469
13470         * cs-parser.jay: Make primary_expression not take a QI.
13471         we dont need this because the member_access rule covers
13472         us here. So we replace the rule with just IDENTIFIER.
13473
13474         This has two good effects. First, we remove a s/r conflict.
13475         Second, we allocate many fewer QualifiedIdentifier objects.
13476
13477 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13478
13479         * attribute.cs: Handle MarshalAs attributes as pseudo, and
13480         set the correct information via SRE. This prevents
13481         hanging on the MS runtime. Fixes #29374.
13482
13483 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13484
13485         * convert.cs: correctly handle conversions to value types
13486         from Enum and ValueType as unboxing conversions.
13487
13488         Fixes bug #52569. Patch by Benjamin Jemlich.
13489
13490 2004-01-02  Ravi Pratap  <ravi@ximian.com>
13491
13492         * expression.cs (BetterConversion): Prefer int -> uint
13493         over int -> ulong (csc's behaviour). This fixed bug #52046.
13494
13495 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13496
13497         * decl.cs (MemberCache.FindMembers): now returns a
13498         MemberInfo [].
13499
13500         * typemanager.cs: In general, go with with ^^.
13501         (CopyNewMethods): take an IList.
13502         (RealMemberLookup): Only allocate an arraylist
13503         if we copy from two sets of methods.
13504
13505         This change basically does two things:
13506         1) Fewer array lists allocated due to CopyNewMethods.
13507         2) the explicit cast in MemberList costed ALOT.
13508
13509 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
13510
13511         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
13512         a hashtable to avoid needless string allocations when an identifier is
13513         used more than once (the common case).
13514
13515 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13516
13517         * pending.cs: MS's TypeBuilder.GetInterfaces ()
13518         is broken, it will not return anything. So, we
13519         have to use the information we have in mcs to
13520         do the task.
13521
13522         * typemanager.cs: Add a cache for GetInterfaces,
13523         since this will now be used more often (due to ^^)
13524
13525         (GetExplicitInterfaces) New method that gets the
13526         declared, not effective, interfaces on a type
13527         builder (eg, if you have interface IFoo, interface
13528         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
13529         { IBar }.
13530
13531         This patch makes MCS able to bootstrap itself on
13532         Windows again.
13533
13534 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13535
13536         * expression.cs: Remove the Nop's that Miguel put
13537         in by mistake.
13538
13539 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13540
13541         * report.cs, codegen.cs: Give the real stack trace to
13542         the error when an exception is thrown.
13543
13544 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13545
13546         * decl.cs: only allocate hashtables for ifaces if 
13547         it is an iface!
13548
13549 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13550
13551         * expression.cs: fix the error from cs0121-2.cs
13552         (a parent interface has two child interfaces that
13553         have a function with the same name and 0 params
13554         and the function is called through the parent).
13555
13556 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13557
13558         * class.cs, rootcontext.cs, typmanager.cs: do not
13559         leak pointers.
13560
13561 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
13562
13563         * codegen.cs: remove stack for the ec flow branching.
13564         It is already a linked list, so no need.
13565
13566 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
13567
13568         * Makefile: Allow custom profiler here.
13569
13570 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13571
13572         * typemanager.cs (LookupType):
13573           - Use a static char [], because split takes
13574             a param array for args, so it was allocating
13575             every time.
13576           - Do not store true in a hashtable, it boxes.
13577
13578 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13579
13580         * flowanalysis.cs: bytify common enums.
13581
13582 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13583
13584         * modifiers.cs: Add a new set of flags for the
13585         flags allowed on explicit interface impls.
13586         * cs-parser.jay: catch the use of modifiers in
13587         interfaces correctly.
13588         * class.cs: catch private void IFoo.Blah ().
13589
13590         All related to bug #50572.
13591
13592 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13593
13594         * decl.cs: Rewrite the consistant accessability checking.
13595         Accessability is not linear, it must be implemented in
13596         a tableish way. Fixes #49704.
13597
13598 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13599
13600         * expression.cs: Handle negation in a checked context.
13601         We must use subtraction from zero. Fixes #38674.
13602
13603 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13604
13605         * class.cs: Ignore static void main in DLLs.
13606         * rootcontext.cs: Handle the target type here,
13607         since we are have to access it from class.cs
13608         * driver.cs: account for the above.
13609
13610 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13611
13612         * report.cs: Give line numbers and files if available.
13613
13614 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
13615
13616         * driver.cs: Implement /addmodule.
13617
13618         * typemanager.cs:  Change 'modules' field so it now contains Modules not
13619         ModuleBuilders.
13620
13621 2003-12-20  Martin Baulig  <martin@ximian.com>
13622
13623         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
13624         (FieldBase.IsAssigned): Removed this field.
13625         (FieldBase.SetAssigned): New public method.
13626         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
13627
13628 2003-12-20  Martin Baulig  <martin@ximian.com>
13629
13630         * expression.cs (LocalVariableReference.DoResolve): Don't set
13631         `vi.Used' if we're called from DoResolveLValue().
13632
13633         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
13634         returns the usage vector it just merged into the current one -
13635         pass this one to UsageWarning().
13636         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
13637         of the `EmitContext', don't call this recursively on our children.
13638
13639 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
13640
13641         * driver.cs: Implement /target:module.
13642
13643 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
13644
13645         * support.cs (CharArrayHashtable): New helper class.
13646
13647         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
13648         char arrays, not strings, so we can avoid creating a string in
13649         consume_identifier if the identifier is a keyword.
13650
13651 2003-12-16  Martin Baulig  <martin@ximian.com>
13652
13653         * statement.cs (LocalInfo.Assigned): Removed this property.
13654         (LocalInfo.Flags): Removed `Assigned'.
13655         (LocalInfo.IsAssigned): New public method; takes the EmitContext
13656         and uses flow analysis.
13657         (Block.UsageWarning): Made this method private.
13658         (Block.Resolve): Call UsageWarning() if appropriate.
13659
13660         * expression.cs (LocalVariableReference.DoResolve): Always set
13661         LocalInfo.Used here.
13662
13663 2003-12-13  Martin Baulig  <martin@ximian.com>
13664
13665         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
13666         any value here; we're now using flow analysis to figure out
13667         whether a statement/block returns a value.
13668
13669 2003-12-13  Martin Baulig  <martin@ximian.com>
13670
13671         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
13672         working again.
13673         (FlowBranching.MergeFinally): Don't call
13674         `branching.CheckOutParameters()' here, this is called in
13675         MergeTopBlock().
13676         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
13677         when adding the `finally' vector.       
13678
13679 2003-12-13  Martin Baulig  <martin@ximian.com>
13680
13681         * flowanalysis.cs
13682         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
13683         actually work and also fix #48962.
13684
13685 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
13686
13687         * decl.cs: Do not check System.Object for nested types,
13688         since we know it does not have any. Big bang for buck:
13689
13690         BEFORE:
13691            Run 1:   8.35 seconds
13692            Run 2:   8.32 seconds
13693            corlib:  17.99 seconds
13694         AFTER:
13695            Run 1:   8.17 seconds
13696            Run 2:   8.17 seconds
13697            corlib:  17.39 seconds
13698
13699 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
13700
13701         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
13702         time we are returning 0 members, so we save alot here.
13703
13704 2003-12-11  Martin Baulig  <martin@ximian.com>
13705
13706         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
13707         `MergeChild()', also just take the `FlowBranching' as argument;
13708         call Merge() on it and return the result.
13709         (FlowBranching.Merge): We don't need to do anything if we just
13710         have one sibling.
13711
13712 2003-12-11  Martin Baulig  <martin@ximian.com>
13713
13714         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
13715         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
13716         Maurer for this idea.
13717
13718 2003-12-11  Martin Baulig  <martin@ximian.com>
13719
13720         * flowanalysis.cs (MergeResult): This class is now gone; we now
13721         use the `UsageVector' for this.  The reason for this is that if a
13722         branching just has one sibling, we don't need to "merge" them at
13723         all - that's the next step to do.
13724         (FlowBranching.Merge): We now return a `UsageVector' instead of a
13725         `MergeResult'.
13726
13727 2003-12-11  Martin Baulig  <martin@ximian.com>
13728
13729         Reworked flow analyis and made it more precise and bug-free.  The
13730         most important change is that we're now using a special `Reachability'
13731         class instead of having "magic" meanings of `FlowReturns'.  I'll
13732         do some more cleanups and optimizations and also add some more
13733         documentation this week.
13734
13735         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
13736         largely reworked this class.
13737         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
13738         the new `Reachability' class instead of having "magic" values here.
13739         (FlowBranching): We're now using an instance of `Reachability'
13740         instead of having separate `Returns', `Breaks' etc. fields.
13741
13742         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
13743         based on flow analysis; ignore the return value of block.Emit ().
13744
13745 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
13746
13747         * driver.cs typemanager.cs: Find the mono extensions to corlib even
13748         if they are private.
13749
13750 2003-12-09  Martin Baulig  <martin@ximian.com>
13751
13752         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
13753         call them directly on the UsageVector.
13754
13755 2003-12-09  Martin Baulig  <martin@ximian.com>
13756
13757         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
13758         Changed return type from `FlowReturns' to `Reachability'.
13759
13760 2003-12-09  Martin Baulig  <martin@ximian.com>
13761
13762         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
13763         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
13764         `Reachable' fields with a single `Reachability' one.
13765
13766 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13767
13768         * class.cs (FindMembers): Remove foreach's.
13769
13770         Bootstrap times:
13771
13772         BEFORE
13773                 Run 1:   8.74 seconds
13774                 Run 2:   8.71 seconds
13775
13776         AFTER
13777                 Run 1:   8.64 seconds
13778                 Run 2:   8.58 seconds
13779
13780
13781 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13782
13783         * cs-parser.jay:
13784         * gen-treedump.cs:
13785         * statement.cs:
13786         This patch does a few things:
13787                 1. EmptyStatement is now a singleton, so it is never reallocated.
13788                 2. All blah is EmptyStatement constructs have been changed to
13789                    blah == EmptyStatement.Value, which is much faster and valid
13790                    now that EmptyStatement is a singleton.
13791                 3. When resolving a block, rather than allocating a new array for
13792                    the non-empty statements, empty statements are replaced with
13793                    EmptyStatement.Value
13794                 4. Some recursive functions have been made non-recursive.
13795         Mainly the performance impact is from (3), however (1) and (2) are needed for
13796         this to work. (4) does not make a big difference in normal situations, however
13797         it makes the profile look saner.
13798
13799         Bootstrap times:
13800
13801         BEFORE
13802         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13803         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13804         Total memory allocated: 56397 KB
13805
13806         AFTER
13807         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
13808         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
13809         Total memory allocated: 55666 KB
13810
13811 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13812
13813         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
13814         than the hashtable in a hashtable version
13815
13816         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
13817         we always end up concating a string. This results in a huge perf
13818         loss, because many strings have to be tracked by the GC. In this
13819         patch, we first use a hashtable that works with two keys, so that
13820         the strings do not need to be concat'ed.
13821
13822         Bootstrap times:
13823         BEFORE
13824                 Run 1:   8.74 seconds
13825                 Run 2:   8.71 seconds
13826
13827         AFTER
13828                 Run 1:   8.65 seconds
13829                 Run 2:   8.56 seconds
13830
13831 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13832
13833         * Makefile: Add a new target `do-time' that does a quick and simple
13834         profile, leaving easy to parse output.
13835
13836 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
13837
13838         * codegen.cs (Init): Create the dynamic assembly with 
13839         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
13840
13841 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13842
13843         * support.cs: Make the PtrHashtable use only one
13844         instance of its comparer.
13845
13846 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
13847
13848         * typemanager.cs: Fix lookup of GetNamespaces.
13849
13850 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
13851
13852         * expression.cs: Removed redundant line.
13853
13854         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
13855         ArrayLists, use for loops with bounds.  
13856
13857         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
13858         arraylist.
13859
13860         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
13861         arraylists, use for loop with bounds.
13862
13863         The above three changes give us a 0.071 second performance
13864         improvement out of 3.294 seconds down to 3.223.  On my machine
13865         the above changes reduced the memory usage by 1,387 KB during
13866         compiler bootstrap.
13867
13868         * cs-parser.jay (QualifiedIdentifier): New class used to represent
13869         QualifiedIdentifiers.  Before we created a new string through
13870         concatenation, and mostly later on, the result would be
13871         manipulated by DecomposeQI through string manipulation.
13872
13873         This reduced the compiler memory usage for bootstrapping from
13874         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
13875         compile times in 0.05 seconds.
13876
13877 2003-11-28  Dick Porter  <dick@ximian.com>
13878
13879         * support.cs: Do string compares with the Invariant culture.
13880
13881         * rootcontext.cs: 
13882         * gen-treedump.cs: 
13883         * expression.cs: 
13884         * driver.cs: 
13885         * decl.cs: 
13886         * codegen.cs: 
13887         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
13888         the comparison is done with the Invariant culture.
13889
13890 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
13891
13892         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
13893         GetEnumerator method.
13894
13895         (ProbeCollectionType): Iterate starting at the most specific type
13896         upwards looking for a GetEnumerator
13897
13898         * expression.cs: Shift count can be up to 31 for int/uint and 63
13899         for long/ulong.
13900
13901 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
13902
13903         * statement.cs (Block.LookupLabel): Also look for the label on the
13904         children blocks.  Use a hash table to keep track of visited
13905         nodes. 
13906
13907         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
13908         we actually did transform the other operand, otherwise fall back
13909         to the common codepath that casts to long.
13910
13911         * cs-tokenizer.cs: Use the same code pattern as the int case.
13912         Maybe I should do the parsing myself, and avoid depending on the
13913         Parse routines to get this done.
13914
13915 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
13916
13917         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13918         which fixes bug 51347.  This time test it.
13919
13920         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
13921         attributes for example can not tell the difference between these.
13922         The difference was only a syntax feature of the language. 
13923
13924         * attribute.cs: Apply attributes to delegates.
13925
13926         * delegate.cs: Call the apply attributes method.
13927
13928 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
13929
13930         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
13931         comparing 0 vs Byte.MinValue, not the value
13932
13933         (ImplicitConversionRequired): When reporting a conversion error,
13934         use error 31 to print out the constant error instead of the
13935         simpler 29.
13936
13937         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13938         which fixes bug 51347.
13939
13940 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
13941
13942         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
13943         which fixes the -warnaserror command line option.
13944
13945 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
13946
13947         * cfold.cs (DoNumericPromotions): During constant folding of
13948         additions on UIntConstant, special case intconstants with
13949         IntConstants like we do on the expression binary operator. 
13950
13951 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
13952
13953         * convert.cs (ImplicitReferenceConversion): We were missing a case
13954         (System.Enum are not value types or class types, so we need to
13955         classify them separatedly).
13956
13957         * driver.cs: We do not support error 2007.
13958
13959 2003-11-12 Jackson Harper <jackson@ximian.com>
13960
13961         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
13962         system directory. Also use the full file name so users can
13963         libraries names mscorlib-o-tron.dll in a non system dir.
13964         
13965 2004-01-04  David Sheldon <dave-mono@earth.li>
13966
13967         * expression.cs: Added matching ")" to error message for CS0077.
13968
13969 2003-12-19  Martin Baulig  <martin@ximian.com>
13970
13971         * typemanager.cs (TypeManager.IsEqualGenericType): New public
13972         static method; see documentation in the method.
13973         (TypeManager.IsSubclassOrNestedChild): Allow IsEqualGenericType().
13974
13975         * convert.cs (Convert.ImplicitReferenceConversion,
13976         Convert.ImplicitReferenceConversionExists): Add support for
13977         generic type declarations; see gen-36.cs.
13978
13979 2003-12-19  Martin Baulig  <martin@ximian.com>
13980
13981         * pending.cs (Pending.InterfaceMethod): Use
13982         `Type.IsAssignableFrom()' instead of `=='.
13983
13984 2003-12-18  Martin Baulig  <martin@ximian.com>
13985
13986         * decl.cs (DeclSpace.AsAccessible): Check for array, pointer and
13987         byref types first.
13988
13989         * convert.cs (Convert.ImplicitStandardConversionExists): Use
13990         `expr_type.Equals (target_type)' instead of `=='.
13991
13992 2003-12-08  Martin Baulig  <martin@ximian.com>
13993
13994         * generics.cs (Constraints.Types): Removed.
13995         (Constraints.Resolve): Just resolve everything to TypeExpr's, not
13996         to Type's.
13997         (Constraints.ResolveTypes): New public method; resolves the
13998         TypeExpr's to Type's.
13999         (TypeParameter.Define): TypeBuilder.DefineGenericParameter() no
14000         longer takes the constraints.
14001         (TypeParameter.DefineMethod): Likewise.
14002         (TypeParameter.DefineType): New public method.  Calls
14003         `TypeBuilder/MethodBuilder.SetGenericParameterConstraints()' to set
14004         the constraints.
14005
14006 2003-12-08  Martin Baulig  <martin@ximian.com>
14007
14008         * convert.cs (Convert.ImplicitConversionStandard): Use
14009         `expr_type.Equals (target_type)' instead of `=='.
14010
14011 2003-12-08  Martin Baulig  <martin@ximian.com>
14012
14013         * typemanager.cs (TypeManager.GetReferenceType): Call
14014         `Type.MakeByRefType ()'.
14015
14016 2003-12-08  Martin Baulig  <martin@ximian.com>
14017
14018         * cs-parser.jay, cs-tokenizer.cs: `where' is not a keyword, it
14019         just has some special meaning in some situations.  For instance,
14020         it is allowed to use `where' as the name of a variable etc.
14021
14022 2003-12-04  Martin Baulig  <martin@ximian.com>
14023
14024         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
14025         `Type.MakeArrayType()' for array types.
14026
14027 2003-11-18  Miguel de Icaza  <miguel@ximian.com>
14028
14029         * expression.cs (Invocation.VerifyArgumentsCompat): Remove
14030         debugging message.
14031
14032         (SizeOf.DoResolve): assign the `type_queried' field.  This gets
14033         corlib to compile.
14034
14035 2003-11-16  Martin Baulig  <martin@ximian.com>
14036
14037         * codegen.cs (EmitContext.IsGeneric): Removed.
14038
14039         * ecore.cs (SimpleName.ResolveAsTypeStep): Always call
14040         ResolveGeneric() on the DeclSpace.
14041
14042 2003-11-16  Martin Baulig  <martin@ximian.com>
14043
14044         * generic.cs (TypeArguments.Resolve):
14045         `Expression.ResolveAsTypeTerminal()' returns a TypeExpr; call
14046         `ResolveType()' on it to get the Type.
14047
14048 2003-11-15  Martin Baulig  <martin@ximian.com>
14049
14050         * generic.cs (ConstructedType.GetInterfaces): Override this.
14051
14052 2003-11-14  Martin Baulig  <martin@ximian.com>
14053
14054         * interface.cs (Interface.DefineType): Define all type parameters
14055         before adding the interfaces we inherit.
14056
14057 2003-11-11  Martin Baulig  <martin@ximian.com>
14058
14059         * generic.cs (ConstructedType.ResolveType): Always call
14060         `gt.BindGenericParameters (atypes)'; also if `args.HasTypeArguments'.
14061
14062 2003-11-10  Martin Baulig  <martin@ximian.com>
14063
14064         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
14065         (TypeManager.InitCoreTypes): Initialize them here, but instead of
14066         calling `ResolveType()' on them, directly assign their `Type'.
14067
14068 2003-11-08  Martin Baulig  <martin@ximian.com>
14069
14070         * generic.cs (ConstructedType): Override `IsClass' etc.
14071
14072 2003-11-08  Martin Baulig  <martin@ximian.com>
14073
14074         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
14075         return value and the `out parent' parameter.
14076         (TypeContainer.DefineType): Moved the CS0644 check into
14077         GetClassBases().  Don't pass the interface types to the
14078         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
14079         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
14080
14081         * ecore.cs (TypeExpr.IsAttribute): New property.
14082         (TypeExpr.GetInterfaces): New method.
14083
14084         * interface.cs (Interface.GetInterfaceTypeByName): Return a
14085         TypeExpr instead of a Type.
14086         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
14087         (Interface.DefineType): Don't pass the interface types to the
14088         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
14089         them later and then call `TypeBulider.AddInterfaceImplementation()'.
14090
14091         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
14092         instead of a `Type[]'.
14093         (TypeManager.RegisterBuilder): Likewise.
14094         (TypeManager.AddUserInterface): Likewise.
14095         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
14096         `Type[]' and also return a `TypeExpr[]'.
14097         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
14098
14099 2003-11-08  Martin Baulig  <martin@ximian.com>
14100
14101         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
14102         Expression.     
14103
14104 2003-11-08  Martin Baulig  <martin@ximian.com>
14105
14106         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
14107         TypeManager.ResolveExpressionTypes().
14108
14109         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
14110         instead of an Expression.
14111         (TypeExpr): This is now an abstract base class for `TypeExpression'.
14112         (TypeExpression): New public class; formerly known as `TypeExpr'.
14113
14114         * expression.cs (ComposedCast): Derive from TypeExpr.
14115
14116         * typemanager.cs (TypeManager.system_*_expr): These are now
14117         TypExpr's instead of Expression's.
14118         (TypeManager.ResolveExpressionTypes): New public static function;
14119         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
14120         of them.        
14121
14122 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
14123
14124         * expression.cs (New.DoResolve): Do not dereference value that
14125         might be a null return.
14126
14127         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
14128         sure that the constant value has the right type.  Fixes an
14129         unreported bug, similar to 50425.
14130
14131         * const.cs (Const.LookupConstantValue): Call
14132         ImplicitStandardConversionExists before doing a conversion to
14133         avoid havng the TypeManager.ChangeType do conversions.
14134
14135         Reduced the number of casts used
14136
14137         (Const.ChangeType): New routine to enable reuse of the constant
14138         type changing code from statement.
14139
14140         * typemanager.cs (ChangeType): Move common initialization to
14141         static global variables.
14142
14143         Fixes #50425.
14144
14145         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
14146         every value type to go through, even if it was void.  Fix that. 
14147
14148         * cs-tokenizer.cs: Use is_identifier_start_character on the start
14149         character of the define, and the is_identifier_part_character for
14150         the rest of the string.
14151
14152 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
14153
14154         * expression.cs (UnaryMutator.EmitCode): When I updated
14155         LocalVariableReference.DoResolve, I overdid it, and dropped an
14156         optimization done on local variable references.
14157
14158 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
14159
14160         * ecore.cs: Convert the return from Ldlen into an int.
14161
14162 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
14163
14164         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
14165         the accessibility, this is a special case for toplevel non-public
14166         classes (internal for instance).
14167
14168 2003-10-20  Nick Drochak <ndrochak@gol.com>
14169
14170         * ecore.cs: Fix typo and build.  Needed another right paren.
14171
14172 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
14173
14174         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
14175         `internal' case regular and protected, but not allowing protected
14176         to be evaluated later.  Bug 49840
14177
14178 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
14179
14180         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
14181         to kb.Nlast, and not the kb.nFirst to isolate the switch
14182         statement.
14183
14184         Extract the underlying type, so enumerations of long/ulong are
14185         treated like long/ulong.
14186
14187 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
14188
14189         * expression.cs (New): Overload the meaning of RequestedType to
14190         track the possible creation of the NewDelegate type, since
14191         DoResolve is invoked more than once for new constructors on field
14192         initialization.
14193
14194         See bugs: #48800 and #37014
14195
14196         * cs-parser.jay (declare_local_constants): Take an arraylist
14197         instead of a single constant.
14198
14199         (local_constant_declaration): It should take a
14200         constant_declarators, not a constant_declarator.  Fixes 49487
14201
14202         * convert.cs: Fix error report.
14203
14204 2003-10-13 Jackson Harper <jackson@ximian.com>
14205
14206         * typemanager.cs (TypeToCoreType): Add float and double this fixes
14207         bug #49611
14208         
14209 2003-11-03  Martin Baulig  <martin@ximian.com>
14210
14211         * expression.cs (ArrayAccess.GetStoreOpcode): Added
14212         `out bool has_type_arg'; if set, we need to pass the type to
14213         ig.Emit().
14214         (ArrayAccess.GetStoreOpcode, ArrayAccess.EmitLoadOpcode): Use
14215         Stelem_Any/Ldelem_Any for generic parameters.   
14216
14217 2003-11-02  Martin Baulig  <martin@ximian.com>
14218
14219         * expression.cs (Invocation.EmitCall): Use
14220         `TypeManager.IsValueType()' to check whether it's a value type.
14221         Don't set `struct_call' when calling a method on a type parameter.
14222
14223 2003-11-02  Martin Baulig  <martin@ximian.com>
14224
14225         * generics.cs (ConstructedType.Resolve): Renamed to ResolveType()
14226         and removed the TypeBuilder argument.
14227
14228         * typemanager.cs (TypeManager.IsValueType): Return
14229         `t.IsGenericParameter || t.IsValueType'.
14230
14231 2003-10-25  Martin Baulig  <martin@ximian.com>
14232
14233         * decl.cs (DeclSpace.ResolveType): If we're a ConstructedType,
14234         call ConstructedType.Resolve() on it.
14235
14236         * generic.cs (ConstructedType.Resolve): Set `type' on success.
14237
14238 2003-10-25  Martin Baulig  <martin@ximian.com>
14239
14240         * class.cs (TypeContainer.GetClassBases): Changed
14241         `out Type parent' into `out TypeExpr parent'.  Moved CS0644 and
14242         CS8214 reporting here.
14243         (TypeContainer.DefineType): GetClassBases() gives us a `TypeExpr'
14244         instead of a `Type' for our parent.  In case of a recursive
14245         declaration (see tests/gen-23.cs for an example), our parent is a
14246         ConstructedType and it doesn't have its type set.  So, first
14247         create our own TypeBuilder, then call constructed.Resolve() to get
14248         the parent's type and finally TypeBuilder.SetParent() it.
14249
14250         * ecore.cs (TypeExpr.Name): New public virtual property.
14251
14252         * generic.cs
14253         (ConstructedType): We're now a TypeExpr and not just an Expression.
14254         (ConstructedType.ResolveAsTypeStep): Don't resolve our type
14255         arguments here; this is done later.
14256         (ConstructedType.Resolve): New public method to resolve the type
14257         arguments and bind them.
14258
14259 2003-10-21  Martin Baulig  <martin@ximian.com>
14260
14261         * convert.cs: Use `TypeManager.IsValueType' instead of
14262         'type.IsValueType' everywhere.
14263
14264         * typemanager.cs (TypeManager.IsValueType): Return true for type
14265         parameters.  The reason for this is that we need to box a type
14266         parameter when converting it to a reference type.
14267
14268         * cs-parser.jay: Added support for default value expressions.
14269
14270         * generics.cs (DefaultValueExpression): New public class.       
14271
14272 2003-10-17  Martin Baulig  <martin@ximian.com>
14273
14274         * generic.cs (Constraints.Resolve): Take a DecpSpace instead of a
14275         TypeContainer so we can also use this for Interfaces.
14276         (TypeParameter.Resolve): Likewise.
14277
14278         * interface.cs (Interface.DefineType): Added support for generic
14279         interfaces.
14280
14281         * cs-parser.jay: Added support for generic structs and interfaces.
14282
14283 2003-10-17  Martin Baulig  <martin@ximian.com>
14284
14285         * generic.cs (GenericMemberAccess.DoResolve): We can now actually
14286         call generic methods :-)
14287
14288 2003-10-16  Martin Baulig  <martin@ximian.com>
14289
14290         * cs-parser.jay (namespace_or_type_name): Only create a
14291         GenericMemberAccess if we actually have type arguments.
14292
14293 2003-10-13  Martin Baulig  <martin@ximian.com>
14294
14295         * class.cs (Method.Define): If we're a generic method, call
14296         TypeBuilder.DefineGenericMethod () before resolving
14297         the parameters.
14298         (MethodData): Added .ctor which takes an additional MethodBuilder
14299         argument; this is used for generic methods.
14300         (MethodData.Define): Call `builder.SetGenericMethodSignature()' if
14301         we already have a MethodBuilder.
14302
14303 2003-10-10  Martin Baulig  <martin@ximian.com>
14304
14305         * class.cs (Method): Added .ctor which takes a `GenericMethod'
14306         instead of a `DeclSpace'.  This is used for generic methods.
14307
14308         * cs-parser.jay (method_header): Added support for generic
14309         methods; create a `GenericMethod' instance and pass it to the
14310         `Method's .ctor; it'll be used as the `DeclSpace' to lookup
14311         parameters and locals.
14312
14313         * decl.cs (DeclSpace.SetParameterInfo): Removed Location argument
14314         since we already have the location.  Check whether we're a generic
14315         type declaration or a generic method and create the correct type
14316         parameter.
14317
14318         * generic.cs (TypeParameter.DefineMethod): New public method.
14319         (GenericMethod): New public class; derives from DeclSpace and is
14320         used for generic methods.       
14321
14322 2003-10-09  Martin Baulig  <martin@ximian.com>
14323
14324         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
14325         to the .ctor.
14326         (MethodCore.DoDefineParameters): Removed the TypeContainer
14327         argument; use the DeclSpace which was passed to the .ctor instead.
14328         (MethodCore.CheckParameter): Take a DeclSpace instead of a
14329         TypeContainer; we only need a DeclSpace here.
14330
14331 2003-10-09  Martin Baulig  <martin@ximian.com>
14332
14333         * class.cs (MethodData): Added additional `DeclSpace ds' argument
14334         to the .ctor.
14335         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
14336         EmitContext's .ctor.    
14337
14338 2003-10-09  Martin Baulig  <martin@ximian.com>
14339
14340         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
14341         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
14342         AsAccessible(), moved them as well.
14343
14344         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
14345
14346 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
14347
14348         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
14349         generation for >=, as spotted by Paolo, bug 48679.  
14350         Patch from David Waite.
14351
14352         * cs-tokenizer.cs: Add handling for #pragma.
14353
14354         * cs-parser.jay: Allow for both yield and yield return in the
14355         syntax.  The anti-cobolization of C# fight will go on!
14356
14357         * class.cs (TypeBuilder.DefineType): Catch error condition here
14358         (Parent.DefineType erroring out and returning null).
14359
14360         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
14361         coping with enumerations variables, we were mistakenly processing
14362         them as a regular value type instead of built-in types.  Fixes the
14363         bug #48063
14364
14365         * typemanager.cs (IsBuiltinOrEnum): New method.
14366
14367 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
14368
14369         * cs-parser.jay: Upgrade: yield now needs the return clause.
14370
14371 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
14372
14373         * cs-parser.jay : Renamed yyName to yyNames related to jay.
14374
14375 2003-09-29  Martin Baulig  <martin@ximian.com>
14376
14377         * typemanager.cs (TypeManager.GetMethodFlags): Added support for
14378         inflated generic methods.
14379
14380         * generics.cs (ConstructedType): Distinguish between open and
14381         closed constructed types; correctly resolve the arguments.
14382
14383 2003-09-22  Martin Baulig  <martin@ximian.com>
14384
14385         * generic.cs (ConstructedType.ResolveAsTypeCheck): Check whether
14386         all type arguments meet their constraints.
14387
14388 2003-09-19  Martin Baulig  <martin@ximian.com>
14389
14390         * decl.cs (MemberCache.SetupCacheForInterface): Take a
14391         `MemberCache parent' argument.  Normally, an interface doesn't
14392         have a parent type except System.Object, but we use this in gmcs
14393         for generic type parameters.
14394
14395 2003-09-18  Martin Baulig  <martin@ximian.com>
14396
14397         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
14398         on `type.IsInterface'; don't check whether the type has a parent
14399         to determine whether it's an interface.
14400
14401 2003-09-17  Martin Baulig  <martin@ximian.com>
14402
14403         * generic.cs (ConstructedType.ToString): Always use `name' as the
14404         type name.
14405
14406 2003-09-15  Martin Baulig  <martin@ximian.com>
14407
14408         * cs-parser.jay: Fix grammar wrt. type_parameter_constraints.
14409
14410         * generic.cs (Constraints.Resolve): New public method; this is
14411         called to resolve the constraint types and to check whether all
14412         the constraints are correct.
14413         (Constraints.Types): New public property.
14414         (TypeParameter.Resolve): New public method; resolves all the
14415         type's constraints.
14416
14417         * class.cs (TypeContainer.DefineType): Call
14418         TypeParameter.Resolve() before actually defining the type.
14419
14420 2003-09-15  Martin Baulig  <martin@ximian.com>
14421
14422         * class.cs (TypeContainer.DefineType): Added an error flag to
14423         avoid reporting duplicate CS0146's ("class definition is
14424         circular.").
14425
14426         * driver.cs (Driver.MainDriver): Abort if
14427         RootContext.ResolveTree() reported any errors.
14428
14429 2003-09-07  Martin Baulig  <martin@ximian.com>
14430
14431         * report.cs (Error, Warning): Added overloaded versions which take
14432         a `params object[] args' and call String.Format().
14433
14434 2003-09-07  Martin Baulig  <martin@ximian.com>
14435
14436         * decl.cs (DeclSpace..ctor): Don't call
14437         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
14438         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
14439         (DeclSpace.RecordDecl): New method.
14440
14441         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
14442
14443 2003-09-02  Ravi Pratap  <ravi@ximian.com>
14444
14445         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
14446         value attributes to be applied to ParameterBuilders.
14447
14448         * class.cs (MethodCore.LabelParameters): Make static and more
14449         generic so that it can be used from other places - like interface
14450         methods, for instance.
14451
14452         * interface.cs (Interface.Emit): Call LabelParameters before
14453         emitting attributes on the InterfaceMethod.
14454
14455 2003-09-07  Martin Baulig  <martin@ximian.com>
14456
14457         * generic.cs (ConstructedType.ResolveAsTypeStep): Report a CS8217
14458         if the number of type parameters doesn't match.
14459
14460 2003-09-04  Martin Baulig  <martin@ximian.com>
14461
14462         * expression.cs (ComposedCast.ResolveAsTypeStep): Added support
14463         for arrays of generic type params (ie. `!0[]').
14464
14465 2003-09-04  Martin Baulig  <martin@ximian.com>
14466
14467         * class.cs (TypeContainer.AsAccessible): Ignore generic parameters
14468         for the moment.
14469
14470 2003-09-04  Martin Baulig  <martin@ximian.com>
14471
14472         * decl.cs (DeclSpace.LookupGeneric): New method.
14473         (DeclSpace.CheckAccessLevel): Ignore generic parameters for the
14474         moment.
14475
14476         * generic.cs (TypeParameterExpr): Take a TypeParameter as
14477         argument, not just a string.
14478         (TypeParameter.Define): New public method; this is called to
14479         actually define the generic parameter; after this, you can use the
14480         new `Type' property to get the type.
14481
14482 2003-09-04  Martin Baulig  <martin@ximian.com>
14483
14484         * decl.cs (DeclSpace.SetParameterInfo): The `constraints' argument
14485         is now an ArrayList; initialize the result of the `TypeParameters'
14486         property here.
14487         (DeclSpace.GetGenericData): Removed.
14488         (DeclSpace.LookupGeneric): Temporarily removed; we need to
14489         implement this in a different way.
14490         (DeclSpace.GetTypeParameters): Removed; there's now a
14491         `TypeParameters' property.
14492         (DeclSpace.TypeParameters): New public property.
14493
14494         * generic.cs (Constraints): Make this class public.
14495         (TypeParameter): New public class.
14496
14497 2003-09-04  Martin Baulig  <martin@ximian.com>
14498
14499         * decl.cs (DeclSpace.GetTypeParameters): New method to return the
14500         generic parameters.
14501
14502         * class.cs (TypeContainer.DefineType): Call
14503         TypeBuilder.DefineGenericParameter () on all generic parameters if
14504         this is a generic type.
14505
14506 2003-08-28  Martin Baulig  <martin@ximian.com>
14507
14508         * sample-stack.il: Compile this with ilasm: "ilasm /dll
14509         sample-stack.il".
14510
14511         * sample-hello.cs: Compile this with gmcs: "gmcs
14512         /r:sample-stack.dll sample-hello.cs".
14513
14514 2003-08-28  Martin Baulig  <martin@ximian.com>
14515
14516         * generic.cs (ConstructedType.ResolveAsTypeStep): Actually bind
14517         the parameters to the generic type.
14518
14519 2003-08-28  Martin Baulig  <martin@ximian.com>
14520
14521         * cs-tokenizer.cs (parse_less_than): Also allow all builtin types.
14522
14523 2003-08-28  Martin Baulig  <martin@ximian.com>
14524
14525         * cs-parser.jay (opt_type_argument_list): Use
14526         `OP_GENERICS_LT type_arguments OP_GENERICS_GT'.
14527         (primary_expression): Replace `qualified_identifier' with `type_name'.
14528         (type_parameter_list): Use `OP_GENERICS_LT type_parameters OP_GENERICS_GT'.
14529
14530         * cs-tokenizer.cs (is_punct): When reading a `<', invoke a custom
14531         parser to check whether it is syntactically a type parameter list;
14532         return OP_GENERICS_LT/OP_GENERICS_GT instead of OP_LT/OP_GT in
14533         this case.
14534
14535 2003-08-26  Martin Baulig  <martin@ximian.com>
14536
14537         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
14538         resolving aliases; fixes #47927.
14539
14540 2003-08-26  Martin Baulig  <martin@ximian.com>
14541
14542         * statement.cs (Using.DoResolve): This is internally emitting a
14543         try/finally clause, so we need to set ec.NeedExplicitReturn if we
14544         do not always return.  Fixes #47681.
14545
14546 2003-08-26  Martin Baulig  <martin@ximian.com>
14547
14548         * decl.cs (MemberCore): Moved WarningNotHiding(),
14549         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
14550         into MemberBase.
14551         (AdditionResult): Make this nested in DeclSpace.
14552         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
14553         argument; call NamespaceEntry.Define() unless we're nested in a
14554         class or struct.
14555
14556         * namespace.cs (Namespace.DefineName): New public function.  This
14557         is called from DeclSpace's .ctor to add 
14558         (Namespace.Lookup): Include DeclSpaces in the lookup.
14559
14560         * class.cs (Operator): Derive from MemberBase, not MemberCore.
14561
14562         * const.cs (Const): Derive from MemberBase, not MemberCore.     
14563
14564 2003-08-25  Martin Baulig  <martin@ximian.com>
14565
14566         * convert.cs (Convert.ExplicitReferenceConversion): When
14567         converting from an interface type to a class, unbox if the target
14568         type is a struct type.  Fixes #47822.
14569
14570 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14571
14572         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
14573         #47854.
14574
14575 2003-08-22  Martin Baulig  <martin@ximian.com>
14576
14577         * class.cs (TypeManager.DefineType): When defining a nested type,
14578         call DefineType() on our parent; fixes #47801.
14579
14580 2003-08-22  Martin Baulig  <martin@ximian.com>
14581
14582         * class.cs (MethodData.Define): While checking if a method is an
14583         interface implementation, improve the test a bit more to fix #47654.
14584
14585 2003-08-22  Martin Baulig  <martin@ximian.com>
14586
14587         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
14588         correctly; fixes #47722.
14589
14590 2003-08-22  Martin Baulig  <martin@ximian.com>
14591
14592         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
14593         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
14594
14595         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
14596
14597 2003-08-22  Martin Baulig  <martin@ximian.com>
14598
14599         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
14600         can only be assigned in static constructors.  Fixes #47161.
14601
14602 2003-08-22  Martin Baulig  <martin@ximian.com>
14603
14604         Rewrote and improved the flow analysis code.
14605
14606         * flowbranching.cs (FlowBranching): Make this class abstract.
14607         (FlowBranching.CreateBranching): New static function to create a
14608         new flow branching.
14609         (FlowBranchingBlock, FlowBranchingException): New classes.
14610         (FlowBranching.UsageVector.Type): New public readonly field.
14611         (FlowBranching.UsageVector.Breaks): Removed the setter.
14612         (FlowBranching.UsageVector.Returns): Removed the setter.
14613         (FlowBranching.UsageVector): Added Break(), Return(),
14614         NeverReachable() and Throw() methods to modify the reachability.
14615         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
14616         done by FlowBranching.Merge().
14617         (FlowBranching.UsageVector.MergeChild): New method; merges the
14618         merge result into the current vector.
14619         (FlowBranching.Merge): New abstract method to merge a branching.
14620
14621 2003-08-12  Martin Baulig  <martin@ximian.com>
14622
14623         * expression.cs (Indirection.CacheTemporaries): Create the
14624         LocalTemporary with the pointer type, not its element type.
14625
14626 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
14627
14628         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
14629         token was a keyword or not.
14630
14631         Add `error' options where an IDENTIFIER was expected;  Provide
14632         CheckToken and CheckIdentifierToken convenience error reporting
14633         functions. 
14634
14635         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
14636
14637         * decl.cs: Rename `NamespaceEntry Namespace' public field into
14638         NameSpaceEntry NameSpaceEntry.
14639
14640         (LookupInterfaceOrClass): Avoid creating a full qualified name
14641         from namespace and name: avoid doing lookups when we know the
14642         namespace is non-existant.   Use new Tree.LookupByNamespace which
14643         looks up DeclSpaces based on their namespace, name pair.
14644
14645         * driver.cs: Provide a new `parser verbose' to display the
14646         exception thrown during parsing.  This is turned off by default
14647         now, so the output of a failure from mcs is more graceful.
14648
14649         * namespace.cs: Track all the namespaces defined in a hashtable
14650         for quick lookup.
14651
14652         (IsNamespace): New method
14653
14654 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
14655
14656         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
14657         we know that we need to concatenate (full typename can never be
14658         null). 
14659
14660         * class.cs: ditto.
14661
14662         * statement.cs: Use a bitfield;  Do not initialize to null things
14663         which are done by the constructor by default.
14664
14665         * cs-parser.jay: bug fix, parameter was 4, not 3.
14666
14667         * expression.cs: Just use the property;
14668
14669         * statement.cs: No need for GetVariableInfo method.
14670
14671 2003-08-08  Martin Baulig  <martin@ximian.com>
14672
14673         * flowanalysis.cs (FlowReturns): This is now nested in the
14674         `FlowBranching' class.
14675         (MyBitVector): Moved this here from statement.cs.
14676         (FlowBranching.SiblingType): New enum type.
14677         (FlowBranching.CreateSibling): Added `SiblingType' argument.
14678
14679 2003-08-07  Martin Baulig  <martin@ximian.com>
14680
14681         * flowanalysis.cs (FlowBranchingType): This is now nested in the
14682         `FlowBranching' class and called `BranchingType'.
14683
14684 2003-08-07  Martin Baulig  <martin@ximian.com>
14685
14686         * flowanalysis.cs: Moved all the control flow analysis code into
14687         its own file.
14688
14689 2003-08-07  Martin Baulig  <martin@ximian.com>
14690
14691         * assign.cs (Assign.DoResolve): `target' must either be an
14692         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
14693         #37319.
14694
14695 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
14696
14697         * expression.cs (BinaryMethod): This kind of expression is created by the
14698         Binary class if it determines that the operator has to be handled
14699         by a method.
14700
14701         (BinaryDelegate): This kind of expression is created if we are
14702         dealing with a + or - operator on delegates.
14703
14704         (Binary): remove method, argumetns, and DelegateOperator: when
14705         dealing with methods, 
14706
14707         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
14708
14709         * statement.cs (Block): use bitfields for the three extra booleans
14710         we had in use.   Remove unused topblock parameter.
14711
14712         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
14713
14714         * assign.cs: Drop extra unneeded tests.
14715
14716 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
14717
14718         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
14719
14720         * statement.cs (Foreach): Use VariableStorage instead of
14721         LocalBuilders.   
14722
14723         * codegen.cs (VariableStorage): New class used by clients that
14724         require a variable stored: locals or fields for variables that
14725         need to live across yield.
14726
14727         Maybe provide a convenience api for EmitThis+EmitLoad?
14728
14729         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
14730         these bad boys.
14731
14732 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
14733
14734         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
14735         RemapParameterLValue): New methods that are used to turn a
14736         precomputed FieldInfo into an expression like this:
14737
14738                 instance.FieldInfo
14739
14740         The idea is to use this instead of making LocalVariableReference
14741         have more than one meaning.
14742
14743         * cs-parser.jay: Add error production to BASE.
14744
14745         * ecore.cs: Deal with TypeManager.GetField returning null, which
14746         is now a valid return value.
14747
14748         (FieldExprNoAddress): New expression for Fields whose address can
14749         not be taken.
14750
14751         * expression.cs (LocalVariableReference): During the resolve
14752         phases, create new expressions if we are in a remapping context.
14753         Remove code that dealt with remapping here.
14754
14755         (ParameterReference): same.
14756
14757         (ProxyInstance): New expression, like the `This' expression, but
14758         it is born fully resolved.  We know what we are doing, so remove
14759         the errors that are targeted to user-provided uses of `this'.
14760
14761         * statement.cs (Foreach): our variable is now stored as an
14762         Expression;  During resolution, follow the protocol, dont just
14763         assume it will return this.
14764
14765 2003-08-06  Martin Baulig  <martin@ximian.com>
14766
14767         * support.cs (SeekableStreamReader.cs): New public class.
14768
14769         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
14770         SeekableStreamReader instead of the normal StreamReader.
14771
14772 2003-08-04  Martin Baulig  <martin@ximian.com>
14773
14774         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
14775         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
14776         deambiguate casts and delegate invocations.
14777         (parenthesized_expression): Use the new tokens to ensure this is
14778         not a cast of method invocation.
14779
14780         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
14781         when reading a `)' and Deambiguate_CloseParens () was previously
14782         called.
14783
14784         * expression.cs (ParenthesizedExpression): New class.  This is
14785         just used for the CS0075 test.
14786         (Binary.DoResolve): Check for CS0075.   
14787
14788 2003-07-29  Ravi Pratap  <ravi@ximian.com>
14789
14790         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
14791         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
14792         reference comparison.
14793
14794         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
14795         examine the ReturnType for equality - this is necessary in the
14796         cases of implicit and explicit operators whose signature also
14797         includes the return type.
14798
14799 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
14800
14801         * namespace.cs: Cache the result of the namespace computation,
14802         instead of computing it every time.
14803
14804 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14805
14806         * decl.cs: Use a global arraylist that we reuse over invocations
14807         to avoid excesive memory consumption.  Reduces memory usage on an
14808         mcs compile by one meg (45 average).
14809
14810         * typemanager.cs (LookupTypeReflection): In .NET pointers are
14811         private, work around that.
14812
14813 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
14814
14815         * literal.cs (IntLiteral): Define Zero and One static literals. 
14816
14817         * cs-parser.jay (integer_literal): use static literals to reduce
14818         memory usage for the most used literals (0, 1 and -1).  211kb
14819         reduced in memory usage.
14820
14821         Replace all calls to `new ArrayList' with `new
14822         ArrayList(4)' which is a good average number for most allocations,
14823         and also requires only 16 bytes of memory for its buffer by
14824         default. 
14825
14826         This reduced MCS memory usage in seven megabytes for the RSS after
14827         bootstrapping.
14828
14829 2003-07-28  Ravi Pratap  <ravi@ximian.com>
14830
14831         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
14832         handle params methods the correct way by forming only one
14833         applicable set with params and normal methods in them. Earlier we
14834         were looking at params methods only if we found no normal methods
14835         which was not the correct thing to do.
14836
14837         (Invocation.BetterFunction): Take separate arguments indicating
14838         when candidate and the best method are params methods in their
14839         expanded form.
14840
14841         This fixes bugs #43367 and #46199.
14842
14843         * attribute.cs: Documentation updates.
14844
14845         (CheckAttribute): Rename to CheckAttributeTarget.
14846         (GetValidPlaces): Rename to GetValidTargets.
14847
14848         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
14849         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
14850
14851         Fixes bug #44468.
14852
14853 2003-07-28  Miguel de Icaza  <miguel@ximian.com>
14854
14855         * codegen.cs: Compute IsGeneric correctly.
14856
14857         * cs-parser.jay: Introduce OP_GENERIC_LT for the grammar ambiguity
14858         resolution. 
14859
14860         Bring back (temporarily) OP_LEFT_SHIFT, OP_RIGHT_SHIFT,
14861         OP_SHIFT_RIGHT_ASSIGN, OP_SHIFT_LEFT_ASSIGN.  There were too many
14862         regressions, and I was chasing more bugs than I required.
14863
14864         * interface.cs: Use expressions for base type names (like classes
14865         and structs have been doing for a while now), and resolve that.
14866         This patch should probably go into head as well.
14867
14868         This makes it one less user of FindType.
14869
14870 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14871
14872         This compiler can not self host currently.  Need to fix that.
14873         
14874         * Makefile: compile to `gmcs.exe'
14875
14876         * driver.cs: Turn on v2 by default on gmcs.
14877
14878         * generic.cs (ConstructedType): Does no longer take a container
14879         type argument;  That will be taken care of later.
14880
14881         (ConstructedType.DoResolve, ConstructedType.ResolveAsTypeStep):
14882         Use SimpleName to resolve for now, so we can continue the work on
14883         the parser, until we get Type.GetType that understands generics.
14884
14885         (ConstructedType.ToString): Implement
14886
14887         (TypeArguments.Resolve): Resolve the child expressions as types. 
14888         
14889         * cs-parser.jay: Rename interface_constraints to
14890         type_parameter_constraints
14891
14892         (namespace_or_type_name): Only use constructed types for the basic
14893         construction, we will deal with identifier<...> later.
14894
14895         (type/type_name): No longer call DecomposeQI, as
14896         namespace_or_type_name is always decoded now.
14897         
14898 2003-07-22  Ravi Pratap  <ravi@ximian.com>
14899
14900         * expression.cs (Invocation.OverloadResolve): Follow the spec more
14901         closely: we eliminate methods in base types when we have an
14902         applicable method in a top-level type.
14903
14904         Please see section 14.5.5.1 for an exact description of what goes
14905         on. 
14906
14907         This fixes bug #45127 and a host of other related to corlib compilation.
14908
14909         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
14910         array is the method corresponding to the top-level type (this is
14911         because of the changes made to icall.c) so we change this
14912         accordingly.
14913
14914         (MethodGroupExpr.Name): This too.
14915
14916         * typemanager.cs (GetElementType): New method which does the right
14917         thing when compiling corlib. 
14918
14919         * everywhere: Make use of the above in the relevant places.
14920
14921 2003-07-22  Martin Baulig  <martin@ximian.com>
14922
14923         * cs-parser.jay (invocation_expression): Moved
14924         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
14925         `cast_expression', but create a InvocationOrCast which later
14926         resolves to either an Invocation or a Cast.
14927
14928         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
14929         method; call this before EmitStatement() to make sure that this
14930         expression can be used as a statement.
14931
14932         * expression.cs (InvocationOrCast): New class; resolves to either
14933         an Invocation or a Cast.
14934
14935         * statement.cs (StatementExpression): Call ResolveStatement() on
14936         the ExpressionStatement before emitting it.
14937
14938 2003-07-21  Martin Baulig  <martin@ximian.com>
14939
14940         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
14941         `ref' and `out' attributes match; fixes #46220.
14942         (MemberAccess.ResolveMemberAccess): You can't reference a type
14943         through an expression; fixes #33180.
14944         (Indexers.GetIndexersForType): Don't return the indexers from
14945         interfaces the class implements; fixes #46502.
14946
14947 2003-07-21  Martin Baulig  <martin@ximian.com>
14948
14949         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
14950         CS0661 checks; fixes bug #30442.
14951
14952 2003-07-21  Martin Baulig  <martin@ximian.com>
14953
14954         * decl.cs (AdditionResult): Added `Error'.
14955
14956         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
14957
14958         * typemanager.cs (TypeManager.ChangeType): Catch exceptions; makes
14959         cs0031.cs actually work.
14960
14961  2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14962  
14963         * cs-parser.jay (namespace_name): do not use
14964         namespace_or_type_name, use qualified_identifier, because
14965         namespace_or_type_name will soon return a composed expression
14966         instead of a string.
14967  
14968         (namespace_or_type_name): Instead of returning a string, now this
14969         production returns an expression.
14970  
14971         * codegen.cs (EmitContext): Setup IsGeneric property based on
14972         whether our DeclSpace is generic, our the method is generic.
14973  
14974         * modifier.cs (Modifiers.METHOD_GENERIC): New definition, use if
14975         the method is generic.
14976  
14977         * cs-parser.jay (type_arguments, opt_type_argument_list,
14978         type_parameters, type_parameter_list, opt_type_parameter_list,
14979         type_parameter,, opt_type_parameter_constraints_clauses,
14980         type_parameter_constraints_clauses,
14981         type_parameter_constraint_clause, type_parameter_constraint,
14982         interface_constraints): Add new production
14983  
14984         * decl.cs (DeclSpace): IsGeneric, flag to track whether this
14985         DeclSpace is generic or not.
14986  
14987         (DeclSpace.SetParameterInfo): New routine, used to set the
14988         parameter info for a type.
14989  
14990         (DeclSpace.LookupGeneric): Lookups a name, and if it is a generic,
14991         returns a GenericTypeExpr
14992  
14993         * ecore.cs (SimpleName.ResolveAsTypeStep): If our container is
14994         generic, lookup the generic argument.
14995  
14996         * attribute.cs: Do not allow TypeParameterExpressions in
14997         Attributes.
14998  
14999         * class.cs: Do not allow the Main method to be defined in a
15000         Generic container.
15001  
15002         * expression.cs (SizeOf): Do not allow generic types to be used as
15003         arguments to sizeof.
15004  
15005         * typemanager.cs (IsGeneric): Wrapper for Reflection when we have
15006         it: whether a type is generic or not.  Only works for types we are
15007         currently building for now.
15008         
15009 2003-07-20  Martin Baulig  <martin@ximian.com>
15010
15011         * namespace.cs: Fixed that bug which caused a crash when compiling
15012         the debugger's GUI.
15013
15014 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
15015
15016         * typemanager.cs (LookupTypeReflection): Never expose types which
15017         are NotPublic, NestedPrivate, NestedAssembly, or
15018         NestedFamANDAssem.  We used to return these, and later do a check
15019         that would report a meaningful error, but the problem is that we
15020         would not get the real match, if there was a name override.
15021
15022 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
15023
15024         * namespace.cs (Namespace, Name): Do not compute the namespace
15025         name dynamically, compute it in the constructor.  This reduced
15026         memory usage by 1697 KB.
15027
15028         * driver.cs: Use --pause to pause at the end.
15029
15030 2003-07-17  Peter Williams  <peter@newton.cx>
15031
15032         * Makefile: Change the name of the test target so that it doesn't
15033         conflict with the recursive test target.
15034
15035 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
15036
15037         * expression.cs (LocalVariableReference.Emit, EmitAssign,
15038         AddressOf): Do not use EmitThis, that was wrong, use the actual
15039         this pointer.
15040
15041 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
15042
15043         * class.cs (MethodData.Define): While checking if a method is an
15044         interface implementation, improve the test: If we are not public
15045         (use new test here: use the computed MethodAttributes directly,
15046         instead of the parsed modifier flags) check if the `implementing'
15047         method comes from an interface or not.
15048
15049         * pending.cs (VerifyPendingMethods): Slightly better error
15050         message.
15051
15052         * makefile: add test target that does the mcs bootstrap.
15053
15054 2003-07-16  Ravi Pratap  <ravi@ximian.com>
15055
15056         * interface.cs (Define): Do nothing here since there are no
15057         members to populate etc. Move the attribute emission out of here
15058         since this was just totally the wrong place to put it. Attribute
15059         application happens during the 'Emit' phase, not in the 'Define'
15060         phase.
15061
15062         (Emit): Add this method and move the attribute emission here
15063
15064         * rootcontext.cs (EmitCode): Call the Emit method on interface
15065         types too.
15066
15067 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
15068
15069         * expression.cs (OverloadResolve): Report error only if Location
15070         is not 'Null' which means that there was a probe going on.
15071
15072 2003-07-14  Martin Baulig  <martin@ximian.com>
15073
15074         * expression.cs (ConditionalLogicalOperator): New public class to
15075         implement user defined conditional logical operators.
15076         This is section 14.11.2 in the spec and bug #40505.
15077
15078 2003-07-14  Martin Baulig  <martin@ximian.com>
15079
15080         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
15081
15082 2003-07-14  Martin Baulig  <martin@ximian.com>
15083
15084         * codegen.cs (EmitContext.InFixedInitializer): New public field.
15085
15086         * ecore.cs (IVariable.VerifyFixed): New interface method.
15087
15088         * expression.cs (Unary.ResolveOperator): When resolving the `&'
15089         operator, check whether the variable is actually fixed.  Fixes bug
15090         #36055.  Set a variable definitely assigned when taking its
15091         address as required by the spec.
15092
15093         * statement.cs (LocalInfo.IsFixed): New field.
15094         (LocalInfo.MakePinned): Set `IsFixed' to true.
15095
15096 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
15097
15098         * attribute.cs (Attribute.Resolve): While doing a Member lookup
15099         for .ctors, ensure that we only ask for members declared in the
15100         attribute type (BindingFlags.DeclaredOnly).
15101
15102         Fixes bug #43632.
15103
15104         * expression.cs (Error_WrongNumArguments): Report error 1501
15105         correctly the way CSC does.
15106
15107 2003-07-13  Martin Baulig  <martin@ximian.com>
15108
15109         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
15110         lookup on the fully qualified name, to make things like "X.X" work
15111         where "X.X" is a fully qualified type name, but we also have a
15112         namespace "X" in the using list.  Fixes #41975.
15113
15114 2003-07-13  Martin Baulig  <martin@ximian.com>
15115
15116         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
15117         function. If we're a CompoundAssign, we need to create an embedded
15118         CompoundAssign, not an embedded Assign.
15119         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
15120         Fixes #45854.
15121
15122 2003-07-13  Martin Baulig  <martin@ximian.com>
15123
15124         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
15125         work to fix bug #46088.
15126
15127 2003-07-13  Ravi Pratap <ravi@ximian.com>
15128
15129         * class.cs (Operator.Emit): Do not emit attributes here - it is
15130         taken care of by the Method class that we delegate too. This takes
15131         care of bug #45876.
15132
15133 2003-07-10  Martin Baulig  <martin@ximian.com>
15134
15135         * expression.cs (TypeOfVoid): New class.
15136         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
15137
15138 2003-07-10  Martin Baulig  <martin@ximian.com>
15139
15140         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
15141         bug #35957.
15142
15143 2003-07-10  Martin Baulig  <martin@ximian.com>
15144
15145         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
15146         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
15147
15148         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
15149
15150         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
15151
15152 2003-07-10  Martin Baulig  <martin@ximian.com>
15153
15154         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
15155         of decimal.  Fixes #42850.
15156
15157         NOTE: I also fixed the created byte blob, but this doesn't work on
15158         the MS runtime and csc never produces any byte blobs for decimal
15159         arrays.
15160
15161 2003-07-10  Martin Baulig  <martin@ximian.com>
15162
15163         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
15164         structs; fixes #32068.
15165         (Block.AddChildVariableNames): Fixed #44302.
15166
15167 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15168
15169         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
15170
15171 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
15172
15173         * attribute.cs: And this test is onger needed.
15174
15175 2003-07-08  Martin Baulig  <martin@ximian.com>
15176
15177         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
15178         inaccessible types.  Fixes #36313.
15179
15180         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
15181
15182         * namespace.cs (NamespaceEntry): Create implicit entries for all
15183         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
15184         implicit entries for N1.N2 and N1.
15185
15186 2003-07-08  Martin Baulig  <martin@ximian.com>
15187
15188         Rewrote the handling of namespaces to fix a lot of the issues
15189         wrt. `using' aliases etc.
15190
15191         * namespace.cs (Namespace): Splitted this class into a
15192         per-assembly `Namespace' and a per-file `NamespaceEntry'.
15193
15194         * typemanager.cs (TypeManager.IsNamespace): Removed.
15195         (TypeManager.ComputeNamespaces): Only compute namespaces from
15196         loaded assemblies here, not the namespaces from the assembly we're
15197         currently compiling.
15198
15199 2003-07-08  Martin Baulig  <martin@ximian.com>
15200
15201         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
15202
15203 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
15204
15205         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
15206         already fixed it.  
15207
15208         I thought about the memory savings here, but LookupTypeReflection
15209         is used under already very constrained scenarios.  Compiling
15210         corlib or mcs only exposes one hit, so it would not really reduce
15211         any memory consumption.
15212
15213 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15214
15215         * typemanager.cs: fixes bug #45889 by only adding public types from
15216         other assemblies to the list of known types.
15217
15218 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
15219
15220         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
15221         on the type we resolved.
15222
15223 2003-07-05  Martin Baulig  <martin@ximian.com>
15224
15225         * pending.cs (PendingImplementation.ParentImplements): Don't
15226         create the proxy if the parent is abstract.
15227
15228         * class.cs (TypeContainer.DefineIndexers): Process explicit
15229         interface implementations first.  Fixes #37714.
15230
15231 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
15232
15233         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
15234         defined recursively;  but since we modify the input parameters
15235         (left is set to `this' temporarily), we reset this value if the
15236         left_is_explicit is false, which gives the original semantics to
15237         the code.  
15238
15239         * literal.cs (NullPointer): new class used to represent a null
15240         literal in a pointer context.
15241
15242         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
15243         type is a pointer, use a NullPointer object instead of a
15244         NullLiteral.   Closes 43687
15245
15246         (ExplicitConversion): Convert pointer values using
15247         the conv opcode to the proper type.
15248
15249         * ecore.cs (New): change ValueTypeVariable property into a method,
15250         that returns whether the valuetype is suitable for being used.
15251
15252         * expression.cs (Binary.DoNumericPromotions): Only return if we
15253         the int constant was a valid uint, and we can return both left and
15254         right as uints.  If not, we continue processing, to trigger the
15255         type conversion.  This fixes 39018.
15256
15257         * statement.cs (Block.EmitMeta): During constant resolution, set
15258         the CurrentBlock property on the emitcontext, so that we resolve
15259         constants propertly.
15260
15261 2003-07-02  Martin Baulig  <martin@ximian.com>
15262
15263         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
15264         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
15265
15266         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
15267         than emitting it here.
15268
15269         * statement.cs: Fixed some more flow analysis bugs.
15270
15271 2003-07-02  Martin Baulig  <martin@ximian.com>
15272
15273         * class.cs (MethodData.Define): When implementing interface
15274         methods, set Final unless we're Virtual.
15275
15276         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
15277         check work for interface methods.
15278
15279 2003-07-01  Martin Baulig  <martin@ximian.com>
15280
15281         * ecore.cs (EmitContext.This): Replaced this property with a
15282         GetThis() method which takes a Location argument.  This ensures
15283         that we get the correct error location for a CS0188.
15284
15285 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
15286
15287         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
15288         ImplicitStandardConversion.
15289
15290         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
15291
15292 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
15293
15294         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
15295         optimization.
15296
15297 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
15298
15299         * class.cs (Constructor.Define): Turn off initlocals for unsafe
15300         constructors.
15301
15302         (MethodData.Define): Turn off initlocals for unsafe methods.
15303
15304 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
15305
15306         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
15307         complete;  Fixes #37521.
15308
15309         * delegate.cs: Use Modifiers.TypeAttr to compute the
15310         TypeAttributes, instead of rolling our own.  This makes the flags
15311         correct for the delegates.
15312
15313 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
15314
15315         * class.cs (Constructor.Define): Set the private flag for static
15316         constructors as well.
15317
15318         * cs-parser.jay (statement_expression): Set the return value to
15319         null, to avoid a crash when we catch an error.
15320
15321 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
15322
15323         * cs-parser.jay: Applied patch from Jackson that adds support for
15324         extern and unsafe modifiers to destructor declarations.
15325
15326         * expression.cs: Report error 21 if the user is trying to index a
15327         System.Array.
15328
15329         * driver.cs: Add an error message, suggested by the bug report.
15330
15331         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
15332         if we do not have a ": this ()" constructor initializer.  Fixes 45149
15333
15334 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
15335
15336         * namespace.cs: Add some information to reduce FAQs.
15337
15338 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
15339
15340         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
15341         underlying enumeration types.  Fixes #43915.
15342
15343         * expression.cs: Treat ushort/short as legal values to be used in
15344         bitwise operations.
15345
15346 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
15347
15348         * delegate.cs: transfer custom attributes for paramenters from
15349         the delegate declaration to Invoke and BeginInvoke.
15350
15351 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
15352
15353         * attribute.cs: handle custom marshalers and emit marshal info
15354         for fields, too.
15355
15356 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
15357
15358         * makefile.gnu: Added anonymous.cs to the compiler sources.
15359
15360 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
15361
15362         * iterators.cs: Change the name of the proxy class to include two
15363         underscores.
15364
15365         * cs-parser.jay: Update grammar to include anonymous methods.
15366
15367         * anonymous.cs: new file.
15368
15369 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
15370
15371         * class.cs (Field.Define): Add missing test for pointers and
15372         safety. 
15373
15374 2003-05-27  Ravi Pratap  <ravi@ximian.com>
15375
15376         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
15377         we use the stobj opcode.
15378
15379         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
15380         since it wasn't the correct fix. 
15381
15382         It still is puzzling that we are required to use stobj for IntPtr
15383         which seems to be a ValueType.
15384
15385 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
15386
15387         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
15388         during regular simple name resolution.   Now, the trick is that
15389         instead of returning for processing the simplename, we do a
15390         TypeManager.LookupType (ie, a rooted lookup as opposed to a
15391         contextual lookup type).   If a match is found, return that, if
15392         not, return for further composition.
15393
15394         This fixes long-standing 30485.
15395
15396         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
15397         using the address to initialize an object, do an Stobj instead of
15398         using the regular Stelem.
15399
15400         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
15401         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
15402         Because if we are a BaseIndexerAccess that value will be true.
15403         Fixes 43643.
15404
15405         * statement.cs (GotoCase.Resolve): Return after reporting an
15406         error, do not attempt to continue. 
15407
15408         * expression.cs (PointerArithmetic.Emit): If our operand is a
15409         long, convert our constants to match the operand before
15410         multiplying.  Convert to I type before adding.   Fixes 43670.
15411
15412 2003-05-14  Ravi Pratap  <ravi@ximian.com>
15413
15414         * enum.cs (ImplicitConversionExists) : Rename to
15415         ImplicitEnumConversionExists to remove ambiguity. 
15416
15417         * ecore.cs (NullCast): New type of cast expression class which
15418         basically is very similar to EmptyCast with the difference being
15419         it still is a constant since it is used only to cast a null to
15420         something else
15421         (eg. (string) null)
15422
15423         * convert.cs (ImplicitReferenceConversion): When casting a null
15424         literal, we return a NullCast.
15425
15426         * literal.cs (NullLiteralTyped): Remove - I don't see why this
15427         should be around anymore.
15428
15429         The renaming (reported was slightly wrong). Corrections:
15430
15431         ConvertImplicitStandard -> ImplicitConversionStandard
15432         ConvertExplicitStandard -> ExplicitConversionStandard
15433
15434         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
15435         before passing them in !
15436
15437         * convert.cs (ImplicitConversionStandard): When comparing for
15438         equal expr and target types, ensure that expr is not a
15439         NullLiteral.
15440
15441         In general, we must not be checking (expr_type ==
15442         target_type) in the top level conversion methods
15443         (ImplicitConversion, ExplicitConversion etc). This checking is
15444         done in the methods that they delegate to.
15445
15446 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
15447
15448         * convert.cs: Move Error_CannotConvertType,
15449         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
15450         ImplicitNumericConversion, ImplicitConversionExists,
15451         ImplicitUserConversionExists, StandardConversionExists,
15452         FindMostEncompassedType, FindMostSpecificSource,
15453         FindMostSpecificTarget, ImplicitUserConversion,
15454         ExplicitUserConversion, GetConversionOperators,
15455         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
15456         TryImplicitIntConversion, Error_CannotConvertImplicit,
15457         ConvertImplicitRequired, ConvertNumericExplicit,
15458         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
15459         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
15460         its own file.
15461
15462         Perform the following renames:
15463
15464         StandardConversionExists -> ImplicitStandardConversionExists
15465         ConvertImplicit -> ImplicitConversion
15466         ConvertImplicitStandard -> ImplicitStandardConversion
15467         TryImplicitIntConversion -> ImplicitIntConversion
15468         ConvertImplicitRequired -> ImplicitConversionRequired
15469         ConvertNumericExplicit -> ExplicitNumericConversion
15470         ConvertReferenceExplicit -> ExplicitReferenceConversion
15471         ConvertExplicit -> ExplicitConversion
15472         ConvertExplicitStandard -> ExplicitStandardConversion
15473
15474 2003-05-19  Martin Baulig  <martin@ximian.com>
15475
15476         * statement.cs (TypeInfo.StructInfo): Made this type protected.
15477         (TypeInfo): Added support for structs having structs as fields.
15478
15479         * ecore.cs (FieldExpr): Implement IVariable.
15480         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
15481         VariableInfo for the field.
15482
15483 2003-05-18  Martin Baulig  <martin@ximian.com>
15484
15485         * expression.cs (This.DoResolve): Report a CS0027 if we're
15486         emitting a field initializer.
15487
15488 2003-05-18  Martin Baulig  <martin@ximian.com>
15489
15490         * expression.cs (This.ResolveBase): New public function.
15491         (This.DoResolve): Check for CS0188.
15492
15493         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
15494         This.Resolve().
15495
15496         * ecore.cs (MethodGroupExpr.DoResolve): Set the
15497         `instance_expression' to null if we don't have any non-static
15498         methods.
15499
15500 2003-05-18  Martin Baulig  <martin@ximian.com>
15501
15502         Reworked the way how local variables and parameters are handled by
15503         the flow analysis code.
15504
15505         * statement.cs (TypeInfo, VariableMap): New public classes.
15506         (VariableInfo): New public class.  This is now responsible for
15507         checking whether a variable has been assigned.  It is used for
15508         parameters and local variables.
15509         (Block.EmitMeta): Take the InternalParameters as argument; compute
15510         the layout of the flow vectors here.
15511         (Block.LocalMap, Block.ParameterMap): New public properties.
15512         (FlowBranching): The .ctor doesn't get the InternalParameters
15513         anymore since Block.EmitMeta() now computes the layout of the flow
15514         vector.
15515         (MyStructInfo): This class is now known as `StructInfo' and nested
15516         in `TypeInfo'; we don't access this directly anymore.
15517
15518         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
15519         property and removed IsAssigned(), IsFieldAssigned(),
15520         SetAssigned() and SetFieldAssigned(); we now call them on the
15521         VariableInfo so we don't need to duplicate this code everywhere.
15522
15523         * expression.cs (ParameterReference): Added `Block block' argument
15524         to the .ctor.
15525         (LocalVariableReference, ParameterReference, This): The new
15526         VariableInfo class is now responsible for all the definite
15527         assignment stuff.
15528
15529         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
15530         IsParameterAssigned, SetParameterAssigned): Removed.
15531
15532 2003-05-18  Martin Baulig  <martin@ximian.com>
15533
15534         * typemanager.cs (InitCoreTypes): Try calling
15535         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
15536         the 3-args-version.  Corlib now also needs our `void_type'.
15537         (GetMethod): Added overloaded version which takes an optional
15538         `bool report_errors' to allow lookups of optional methods.
15539
15540 2003-05-12  Martin Baulig  <martin@ximian.com>
15541
15542         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
15543         only used for locals and not for parameters.
15544
15545 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
15546
15547         * support.cs (InternalParameters.ParameterType): Return the
15548         ExternalType of the parameter.
15549
15550         * parameter.cs (Parameter.ExternalType): drop the two arguments,
15551         they were unused.
15552
15553 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
15554
15555         * class.cs (MethodData.Define): Do not set the `newslot' on
15556         interface members, if they are also flagged as "override".
15557
15558         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
15559         better code for ++i and i++.  This only works for static fields
15560         and local variables.
15561
15562         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
15563         want to pull the DeclSpace out of the builder_to_declspace instead
15564         of the TypeBuilder (like in TypeContainer.FindMembers).
15565
15566         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
15567         instead of LookupTypeContainer.  Fixes the crash on .NET for
15568         looking up interface members.
15569
15570         * const.cs: Create our own emit context during the Definition
15571         stage, so that constants are evaluated in the proper context, when
15572         a recursive definition happens.
15573
15574 2003-05-11  Martin Baulig  <martin@ximian.com>
15575
15576         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
15577         new block for a switch section.
15578         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
15579         the adding/lookup in the switch block.  Fixes #39828.
15580
15581 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
15582
15583         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
15584         functionality: I needed to convert the data after I had performed
15585         the add/sub operation into the operands type size.
15586
15587         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
15588         pass the type for the box operation, otherwise the resulting
15589         object would have been of type object.
15590
15591         (BoxedCast): Add constructor to specify the type to box as.
15592
15593 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
15594
15595         * iterators.cs: I was reusing the `count' variable inadvertently,
15596         take steps to not allow this to happen.
15597
15598 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
15599
15600         * attribute.cs (Attribute.Resolve): Params attributes are encoded
15601         by creating an array at the point where the params starts and
15602         putting all those arguments there, then adjusting the size of the
15603         array.
15604
15605 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
15606
15607         * expression.cs (New.AddressOf): Implement interface
15608         IMemoryLocation.  This is used when the `new' operator is used in
15609         the context of an invocation to a method on a value type.
15610
15611         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
15612         example. 
15613
15614         * namespace.cs: Also check the using aliases here.
15615
15616         * driver.cs: Move the test for using validity after the types have
15617         been entered, so we do a single pass that also includes the using
15618         aliases. 
15619
15620         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
15621         in the regular case.   CreateSiblingForFinally is doing extra
15622         error checking.
15623
15624         * attribute.cs (GetAttributeArgumentExpression): Store the result
15625         on an out value, and use the return value to indicate failure
15626         instead of using null (which is a valid return for Constant.GetValue).
15627
15628         * statement.cs: Perform the analysis flow for the increment
15629         portion after the statement, because this will be the real flow of
15630         execution.  Fixes #42385
15631
15632         * codegen.cs (EmitContext.EmitArgument,
15633         EmitContext.EmitStoreArgument): New helper functions when the
15634         RemapToProxy flag is set.
15635
15636         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
15637         function.
15638
15639         Add support for remapping parameters. 
15640
15641         * iterators.cs: Propagate parameter values;  Store parameter
15642         values in the proxy classes.
15643
15644 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
15645
15646         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
15647         need a proxy reference;  I do not know what I was thinking
15648
15649         * cs-parser.jay (constructor_initializer): catch another error,
15650         and display nice message.
15651
15652         (field_declaration): catch void field declaration
15653         to flag a better error. 
15654
15655         * class.cs (MemberBase.CheckBase): Report an error instead of a
15656         warning if a new protected member is declared in a struct. 
15657         (Field.Define): catch the error of readonly/volatile.
15658
15659         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
15660
15661         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
15662         volatile variable is taken
15663
15664 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
15665
15666         * statement.cs (Fixed.Resolve): Report an error if we are not in
15667         an unsafe context.
15668
15669 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
15670
15671         * typemanager.cs: reuse the code that handles type clashes for
15672         delegates and enumerations.
15673
15674         * class.cs (Report28): Always report.
15675
15676         * expression.cs (EncodeAsAttribute): Allow nulls here.
15677
15678 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
15679
15680         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
15681         the functionality for testing whether an expression is valid for
15682         an attribute here.  Also handle the case of arrays of elements
15683         being stored. 
15684
15685         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
15686         encoding a linear array into an array of objects that are suitable
15687         to be passed to an CustomAttributeBuilder.
15688
15689         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
15690
15691         * ecore.cs: (FieldExpr): Handle field remapping here.
15692
15693         * iteratators.cs: Pass the instance variable (if the method is an
15694         instance method) to the constructors, so we can access the field
15695         variables on the class.
15696
15697         TODO: Test this with structs.  I think the THIS variable on
15698         structs might have to be a pointer, and not a refenrece
15699
15700 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
15701
15702         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
15703         local variables to fields in a proxy class.
15704
15705         * iterators.cs (PopulateProxy): Rename our internal fields to
15706         <XXX>.  
15707         Create a <THIS> field if we are an instance method, so we can
15708         reference our parent container variables.
15709         (MapVariable): Called back from the EmitContext code to enter a
15710         new variable to field mapping into the proxy class (we just create
15711         a FieldBuilder).
15712
15713         * expression.cs
15714         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
15715         for using the remapped locals to fields.
15716
15717         I placed the code here, because that gives the same semantics to
15718         local variables, and only changes the Emit code.
15719
15720         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
15721         statements inside iterators.
15722         (VariableInfo): Add a FieldBuilder for the cases when we are
15723         remapping local variables to fields in a proxy class
15724
15725         * ecore.cs (SimpleNameResolve): Avoid testing two times for
15726         current_block != null.
15727
15728         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
15729         not cope with strings, as it has been moved to the
15730         TableSwitchEmit.  Fixed bug in switch generation.
15731
15732         * expression.cs (New.DoResolve): Provide more context for the user
15733         when reporting an error.
15734
15735         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
15736         pointers. 
15737
15738         * expression.cs (MemberAccess.DoResolve): When we get a type back,
15739         check the permissions for it.  Note than in a type-resolution
15740         context the check was already present in DeclSpace.ResolveType,
15741         but was missing from the MemberAccess.
15742
15743         (ArrayCreation.CheckIndices): warn if the user has
15744         more nested levels of expressions, but there are no more
15745         dimensions specified.  Avoids crash on bug 41906.
15746
15747 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
15748
15749         * statement.cs (Block): replace Implicit bool, for a generic
15750         flags.   
15751         New flag: `Unchecked'.  This is used during the EmitMeta phase
15752         (which is out-of-line with the regular Resolve/Emit process for a
15753         statement, as this is done ahead of time, but still gets a chance
15754         to call constant resolve).
15755
15756         (Block.Flags): new enum for adding a new flag.
15757
15758         (Block.EmitMeta): track the state of unchecked.
15759
15760         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
15761         to enable constant resolution to work there as well.
15762
15763 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
15764
15765         * typemanager.cs (ienumerable_type): Also look up
15766         System.Collections.IEnumerable. 
15767
15768 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
15769
15770         TODO: Test more than one conditional per method.
15771
15772         * class.cs (Indexer.Define): Report the location where the user is
15773         referencing the unsupported feature.
15774
15775         (MethodData): Overload the use of `conditionals' to
15776         minimize the creation of needless ArrayLists.   This saves roughly
15777         212kb on my machine.
15778
15779         (Method): Implement the new IIteratorContainer interface.
15780         (Method.SetYields): Implement the method by setting the ModFlags
15781         to contain METHOD_YIELDS.
15782
15783         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
15784         which just got set to null.
15785
15786         * iterators.cs: New file.
15787
15788         (Yield, YieldBreak): New statements.
15789
15790         * statement.cs (Return.Resolve): Flag an error if we are used in
15791         an iterator method.
15792
15793         * codegen.cs (InIterator): New flag set if the code is being
15794         compiled in an iterator method.
15795
15796         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
15797         internal modifier, and we just use it to avoid adding extra
15798         fields, as this is seldom used.  
15799
15800         * cs-parser.jay: Add yield_statement (yield and yield break).
15801
15802         * driver.cs: New flag -v2 to turn on version 2 features. 
15803
15804         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
15805         hashtable when v2 is enabled.
15806
15807 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
15808
15809         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
15810         there is already a namespace defined with this name.
15811
15812         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
15813         people upgraded their corlibs.
15814
15815         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
15816         always use fully qualified types, no need to use the compiler
15817         front end.
15818
15819         (TypeManager.IsNamespace): Use binarysearch.
15820
15821         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
15822         AddDelegate): I did not quite use the new IsValid API properly: I
15823         have to pass the short-name and the fullname.  I was passing only
15824         the basename instead of the fullname sometimes. 
15825
15826         (TypeContainer.DefineType): call NamespaceClash.
15827
15828         * interface.cs (Interface.DefineType): use NamespaceClash before
15829         defining the type.
15830
15831         * delegate.cs (Delegate.DefineType): use NamespaceClash before
15832         defining the type.
15833
15834         * enum.cs: (Enum.DefineType): use NamespaceClash before
15835         defining the type.
15836
15837         * typemanager.cs (: 3-line patch that gives us some tasty 11%
15838         speed increase.  First, use the negative_hits cache when we get a
15839         negative.  Second, add the type with its full original name
15840         instead of the new . and + encoded name (reflection uses + to
15841         separate type from a nested type).  Use LookupTypeReflection
15842         directly which bypasses the type->name hashtable (that we already
15843         know does not contain the type.
15844
15845         * decl.cs (DeclSpace.ResolveTypeExpr): track the
15846         location/container type. 
15847
15848         * driver.cs: When passing utf8, use directly the UTF8Encoding.
15849
15850 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
15851
15852         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
15853
15854         * delegate.cs (NewDelegate.Resolve): Test whether an instance
15855         method is being referenced in the method group from a static
15856         context, and report error 120 if so.
15857
15858         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
15859         Error118. 
15860
15861         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
15862         is created, we create the A namespace).
15863
15864         * cs-parser.jay: A namespace also introduces a DeclarationFound.
15865         Fixes #41591
15866
15867 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
15868
15869         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
15870         invocation to ModuleBuilder.GetType with the same values will
15871         return a new type instance, so we need to cache its return
15872         values. 
15873
15874         * expression.cs (Binary.ResolveOperator): Only allow the compare
15875         operators on enums if they are of the same type.
15876
15877         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
15878         types of ValueType on their own case.  Before we were giving them
15879         the same treatment as objects.
15880
15881         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
15882         fullname.  Short name is used to compare against container name.
15883         Fullname is used to check against defined namespace names.
15884
15885         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
15886         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
15887
15888         (Method.CheckBase): Call parent.
15889         (MemberBase.CheckBase): Check for protected members on sealed
15890         classes.
15891         (PropertyBase.CheckBase): Call parent.
15892         (Field.Define): Call parent.
15893
15894         * report.cs: Negative error codes are now mapped to 8000 - code,
15895         so that the display is render more nicely.
15896
15897         * typemanager.cs: Do not use try/catch, instead report a regular
15898         error. 
15899
15900         (GetPointerType, GetReferenceType): These methods provide
15901         mechanisms to obtain the T* and T& from a T.  We had the code
15902         previously scattered around the code base, and it also used
15903         TypeManager.LookupType that would go through plenty of caches.
15904         This one goes directly to the type source.
15905
15906         In some places we did the Type.GetType followed by
15907         ModuleBuilder.GetType, but not in others, so this unifies the
15908         processing as well.
15909
15910         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
15911         statements now that we have namespace information.
15912
15913         * typemanager.cs (IsNamespace): New method, returns whether the
15914         string presented is a namespace or not.
15915
15916         (ComputeNamespaces): New public entry point, computes the list of
15917         available namespaces, using the GetNamespaces API call in Mono, or
15918         the slower version in MS.NET.   
15919
15920         Now before we start the semantic analysis phase, we have a
15921         complete list of namespaces including everything that the user has
15922         provided.
15923
15924         Deleted old code to cache namespaces in .nsc files.
15925
15926 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
15927
15928         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
15929         class/struct location definition Location for the implicit
15930         constructor location.
15931
15932         (Operator.Define): Use the location of the operator for the
15933         implicit Method definition.
15934
15935         (Constructor.Emit): use the constructor location for the implicit
15936         base initializer constructor.
15937
15938         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
15939         and the Expression class now contains two new methods:
15940
15941         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
15942         isolate type lookup from the rest of the resolution process.
15943
15944         Since we use Expressions to hold type definitions due to the way
15945         we parse the input we have historically overloaded Resolve to
15946         perform the Type lookups if a special flag is passed.  Now this is
15947         eliminated and two methods take their place. 
15948
15949         The differences in the two methods between xStep and xTerminal is
15950         that xStep is involved in our current lookup system that uses
15951         SimpleNames to compose a name, while xTerminal is used just to
15952         catch the case where the simplename lookup failed.
15953
15954 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
15955
15956         * expression.cs (ResolveMemberAccess): Remove redundant code.
15957         TypeExpr expressions are always born fully resolved.
15958
15959         * interface.cs (PopulateMethod): Do not lookup the types twice.
15960         We were doing it once during SemanticAnalysis and once during
15961         PopulateMethod.
15962
15963         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
15964         in local variable type definitions, were being returned as a
15965         SimpleName (we decomposed everything into a string), that is
15966         because primary_expression was being used instead of a type in the
15967         grammar (reduce/reduce conflicts).
15968
15969         The part that was wrong is that we converted the expression into a
15970         string (an oversimplification in one hand, compounded with primary
15971         expressions doing string concatenation).
15972
15973         So things like:
15974
15975         A.B.C [] x;
15976
15977         Would return "A.B.C[]" as a SimpleName.  This stopped things like
15978         using clauses from working on this particular context.  And a type
15979         was being matched directly against "A.B.C[]".
15980
15981         We now use the correct approach, and allow for ComposedCast to be
15982         part of the unary expression.  So the "A.B.C []" become a composed
15983         cast of "A.B.C" (as a nested group of MemberAccess with a
15984         SimpleName at the end) plus the rank composition "[]". 
15985
15986         Also fixes 35567
15987
15988 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
15989
15990         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
15991         for the access level checking.
15992
15993         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
15994         `TypeContainer container', because I kept getting confused when I
15995         was debugging this code.
15996
15997         * expression.cs (Indexers): Instead of tracking getters/setters,
15998         we now track them in parallel.  We create one arraylist less, but
15999         most importantly it is possible now for the LValue code to find a
16000         matching get for a set.
16001
16002         (IndexerAccess.DoResolveLValue): Update the code.
16003         GetIndexersForType has been modified already to extract all the
16004         indexers from a type.  The code assumed it did not.
16005
16006         Also make the code set the correct return type for the indexer.
16007         This was fixed a long time ago for properties, but was missing for
16008         indexers.  It used to be void_type.
16009
16010         (Binary.Emit): Test first for doubles instead of
16011         floats, as they are more common.
16012
16013         (Binary.EmitBranchable): Use the .un version of the branch opcodes
16014         when dealing with floats and the <=, >= operators.  This fixes bug
16015         #39314 
16016
16017         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
16018         to load the array value by emitting a load on the foreach variable
16019         type.  This was incorrect.  
16020
16021         We now emit the code to load an element using the the array
16022         variable type, and then we emit the conversion operator.
16023
16024         Fixed #40176
16025
16026 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
16027
16028         * attribute.cs: Avoid allocation of ArrayLists in the common case.
16029
16030 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
16031
16032         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
16033         test for protection before we test for signatures. 
16034
16035         (MethodSignature.ToString): implement.
16036
16037         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
16038         to the case where we reduced into a LongConstant.
16039
16040         * decl.cs (CheckAccessLevel): If the type is an array, we can not
16041         depend on whether the information is acurrate, because the
16042         Microsoft runtime will always claim that the array type is public,
16043         regardless of the real state.
16044
16045         If the type is a pointer, another problem happens: the type is
16046         reported as non-public in Microsoft.  
16047
16048         In both cases we have to call CheckAccessLevel recursively with
16049         the underlying type as the argument to be tested.
16050
16051 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
16052
16053         * assign.cs (Assign.Emit): If we are dealing with a compound
16054         assignment expression, we should use the code path that stores the
16055         intermediate result in a temporary value.  This fixes #40903.
16056
16057         *expression.cs (Indirection.ToString): Provide ToString method for
16058         debugging. 
16059
16060 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
16061
16062         * class.cs: Null out fields holding references to Block objects so
16063         they can be garbage collected.
16064
16065         * expression.cs (OverloadResolve): Remove unused local.
16066
16067 2003-04-07  Martin Baulig  <martin@ximian.com>
16068
16069         * codegen.cs (EmitContext.CurrentFile): New public field.
16070         (EmitContext.Mark): Use the CurrentFile to check whether the
16071         location is in the correct file.
16072         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
16073
16074 2003-04-07  Martin Baulig  <martin@ximian.com>
16075
16076         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
16077
16078         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
16079         location.  [FIXME: The location argument which gets passed to this
16080         method is sometimes wrong!]
16081
16082 2003-04-07  Nick Drochak <ndrochak@gol.com>
16083
16084         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
16085
16086 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
16087
16088         * expression.cs (Indirection.EmitAssign): We were using the
16089         temporary, but returning immediately instead of continuing the
16090         EmitAssing flow.
16091
16092 2003-04-06  Martin Baulig  <martin@ximian.com>
16093
16094         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
16095         if it's a nested child, but also deriving from the outer class.
16096         See test 190.cs.
16097
16098         * typemanager.cs (IsNestedChildOf): Make this work if it's a
16099         nested child, but also deriving from the outer class.  See
16100         test-190.cs.
16101         (FilterWithClosure): We may access private members of the outer
16102         class if we're a nested child and deriving from the outer class.
16103         (RealMemberLookup): Only set `closure_private_ok' if the
16104         `original_bf' contained BindingFlags.NonPublic.
16105
16106 2003-04-05  Martin Baulig  <martin@ximian.com>
16107
16108         * expression.cs (SizeOf.DoResolve): Use ResolveTypeExpr, so we can
16109         probe if its a type parameter, and if so, flag an error.
16110
16111         * decl.cs: Move here the SetParameterInfo code from class.cs.
16112         Handle IsGeneric here.
16113
16114         Handle a variety of errors in the parameter info definition.
16115
16116         * ecore.cs (SimpleName.DoResolveType): Handle look ups for generic
16117         type parameters here.
16118
16119         * cs-parser.jay (class_declaration): report errors for parameters
16120         here as well.
16121
16122 2003-01-21  Miguel de Icaza  <miguel@ximian.com>
16123
16124         * generic.cs: New file, contains support code for generics.
16125
16126         * cs-parser.jay: Remove OP_SHIFT_LEFT, OP_SHIFT_RIGHT,
16127         OP_SHIFT_LEFT_ASSIGN, OP_SHIFT_RIGHT_ASSIGN.
16128
16129         Update parser for the above removals.
16130
16131         * cs-tokenizer.cs: Do not handle <<= or >>= specially.  This is
16132         now taken care of in the parser.
16133
16134 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
16135
16136         * class.cs (Event.Define): Do not allow abstract events to have
16137         initializers. 
16138
16139 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
16140
16141         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
16142         block in event declarations.
16143
16144         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
16145         value type, get its address.
16146
16147         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
16148         leaving a class on the stack instead of a boolean value (int
16149         0/1).  Change the code so we compare against null, and then the
16150         result against zero.
16151
16152         * class.cs (TypeContainer.GetClassBases): We were checking for the
16153         parent class being sealed too late.
16154
16155         * expression.cs (Binary.Emit): For <= and >= when dealing with
16156         floating point values, use cgt.un and clt.un instead of cgt and
16157         clt alone.
16158
16159 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
16160
16161         * statement.cs: Apply the same optimization as MS: skip the 
16162         GetEnumerator returning an IEnumerator, and use the one returning a 
16163         CharEnumerator instead. This allows us to avoid the try-finally block 
16164         and the boxing.
16165
16166 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
16167
16168         * cs-parser.jay: Attributes cannot be applied to
16169                          namespaces. Fixes #40473
16170
16171 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16172
16173         * class.cs:
16174         (Add*): check if the name is valid using the full name for constants,
16175         fields, properties and events.
16176
16177 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
16178
16179         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
16180         char constants to be part of the enumeration.
16181
16182         * expression.cs (Conditional.DoResolve): Add support for operator
16183         true. Implements the missing functionality from 14.12
16184
16185         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
16186         operator true/false as required by the spec.
16187
16188         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
16189         implicit conversion to boolean.
16190
16191         * statement.cs (Statement.ResolveBoolean): A boolean expression is
16192         also one where the type implements `operator true'. 
16193
16194         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
16195         get an expression that will invoke operator true based on an
16196         expression.  
16197
16198         (GetConversionOperators): Removed the hack that called op_True
16199         here.  
16200
16201         (Expression.ResolveBoolean): Move this from Statement.
16202
16203 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
16204
16205         * ecore.cs (FieldExpr): do not allow initialization of initonly
16206         fields on derived classes
16207
16208 2003-03-13  Martin Baulig  <martin@ximian.com>
16209
16210         * statement.cs (Block.Emit): Call ig.BeginScope() and
16211         ig.EndScope() when compiling with debugging info; call
16212         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
16213
16214 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
16215
16216         * expression.cs (Indexers): Do not construct immediately, allow
16217         for new members to be appended as we go.  Fixes 38143
16218
16219 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16220
16221         * expression.cs: save/restore context when resolving an unchecked
16222         expression.
16223
16224 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
16225
16226         * cfold.cs: Catch division by zero in modulus operator during
16227         constant folding.
16228
16229 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
16230
16231         * interface.cs (Interface.DefineMembers): Avoid defining members
16232         twice. 
16233
16234 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
16235
16236         * driver.cs: handle the +/- options for -noconfig
16237
16238         * statement.cs (Unckeched.Resolve): Also track the state of
16239         unchecked in the Resolve phase.
16240
16241 2003-02-27  Martin Baulig  <martin@ximian.com>
16242
16243         * ecore.cs (Expression.MemberLookup): Don't create a
16244         MethodGroupExpr for something which is not a method.  Fixes #38291.
16245
16246 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
16247
16248         * class.cs (MemberBase.CheckParameters): Also check that the type
16249         is unmanaged if it is a pointer.
16250
16251         * expression.cs (SizeOf.Resolve): Add location information.
16252
16253         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
16254         a managed type is declared.
16255
16256         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
16257         parameter modifiers as well.  Fixes bug 38606
16258
16259         * class.cs: Very sad.  Am backing out the speed up changes
16260         introduced by the ArrayList -> Array in the TypeContainer, as they
16261         were not actually that much faster, and introduced a bug (no error
16262         reports on duplicated methods).
16263
16264         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
16265         source first, this will guarantee that we have a valid expression
16266         before calling in lower levels functions that will require a
16267         resolved object.  Then use this original_source in the
16268         target.ResolveLValue instead of the original source that was
16269         passed to us.
16270
16271         Another change.  Use target.Resolve instead of LValueResolve.
16272         Although we are resolving for LValues, we will let the Assign code
16273         take care of that (it will be called again from Resolve).  This
16274         basically allows code like this:
16275
16276         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
16277         class Y { void A (X x) { x [0] += o; }
16278
16279         The problem was that the indexer was trying to resolve for
16280         set_Item (idx, object o) and never finding one.  The real set_Item
16281         was set_Item (idx, X).  By delaying the process we get the right
16282         semantics. 
16283
16284         Fixes bug 36505
16285
16286 2003-02-23  Martin Baulig  <martin@ximian.com>
16287
16288         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
16289         while calling DoEmit ().
16290
16291         * codegen.cs (EmitContext.Mark): Don't mark locations in other
16292         source files; if you use the #line directive inside a method, the
16293         compiler stops emitting line numbers for the debugger until it
16294         reaches the end of the method or another #line directive which
16295         restores the original file.
16296
16297 2003-02-23  Martin Baulig  <martin@ximian.com>
16298
16299         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
16300
16301 2003-02-23  Martin Baulig  <martin@ximian.com>
16302
16303         * statement.cs (Block.AddChildVariableNames): We need to call this
16304         recursively, not just for our immediate children.
16305
16306 2003-02-23  Martin Baulig  <martin@ximian.com>
16307
16308         * class.cs (Event.Define): Always make the field private, like csc does.
16309
16310         * typemanager.cs (TypeManager.RealMemberLookup): Make events
16311         actually work, fixes bug #37521.
16312
16313 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
16314
16315         * delegate.cs: When creating the various temporary "Parameters"
16316         classes, make sure that we call the ComputeAndDefineParameterTypes
16317         on those new parameters (just like we do with the formal ones), to
16318         allow them to be resolved in the context of the DeclSpace.
16319
16320         This fixes the bug that Dick observed in Bugzilla #38530.
16321
16322 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
16323
16324         * expression.cs (ResolveMemberAccess): When resolving a constant,
16325         do not attempt to pull a constant if the value was not able to
16326         generate a valid constant.
16327
16328         * const.cs (LookupConstantValue): Do not report more errors than required.
16329
16330 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16331
16332         * expression.cs: fixes bug #38328.
16333
16334 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
16335
16336         * class.cs: Changed all the various members that can be part of a
16337         class from being an ArrayList to be an Array of the right type.
16338         During the DefineType type_list, interface_list, delegate_list and
16339         enum_list are turned into types, interfaces, delegates and enums
16340         arrays.  
16341
16342         And during the member population, indexer_list, event_list,
16343         constant_list, field_list, instance_constructor_list, method_list,
16344         operator_list and property_list are turned into their real arrays.
16345
16346         Although we could probably perform this operation earlier, for
16347         good error reporting we need to keep the lists and remove the
16348         lists for longer than required.
16349
16350         This optimization was triggered by Paolo profiling the compiler
16351         speed on the output of `gen-sample-program.pl' perl script. 
16352
16353         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
16354         not crash in methods like MemberLookupFailed that use this field.  
16355
16356         This problem arises when the compiler fails to resolve a type
16357         during interface type definition for example.
16358
16359 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
16360
16361         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
16362         inherit from System.Object, so we have to stop at null, not only
16363         when reaching System.Object.
16364
16365 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
16366
16367         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
16368         DeclaredOnly because the parent indexer might have had a different
16369         name, but did not loop until the top of the hierarchy was reached.
16370
16371         The problem this one fixes is 35492: when a class implemented an
16372         indexer from an interface, we were getting the interface method
16373         (which was abstract) and we were flagging an error (can not invoke
16374         abstract method).
16375
16376         This also keeps bug 33089 functioning, and test-148 functioning.
16377
16378         * typemanager.cs (IsSpecialMethod): The correct way of figuring
16379         out if a method is special is to see if it is declared in a
16380         property or event, or whether it is one of the predefined operator
16381         names.   This should fix correctly #36804.
16382
16383 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
16384
16385         The goal here is to remove the dependency on EmptyCast.Peel ().
16386         Killing it completely.
16387
16388         The problem is that currently in a number of places where
16389         constants are expected, we have to "probe" for an EmptyCast, and
16390         Peel, which is not the correct thing to do, as this will be
16391         repetitive and will likely lead to errors. 
16392
16393         The idea is to remove any EmptyCasts that are used in casts that
16394         can be reduced to constants, so we only have to cope with
16395         constants. 
16396
16397         This bug hunt was triggered by Bug 37363 and the desire to remove
16398         the duplicate pattern where we were "peeling" emptycasts to check
16399         whether they were constants.  Now constants will always be
16400         constants.
16401
16402         * ecore.cs: Use an enumconstant here instead of wrapping with
16403         EmptyCast.  
16404
16405         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
16406         throwing me off.  By handling this we can get rid of a few hacks.
16407
16408         * statement.cs (Switch): Removed Peel() code.
16409
16410 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
16411
16412         * class.cs: Location information for error 508
16413
16414         * expression.cs (New.DoResolve): Add a guard against double
16415         resolution of an expression.  
16416
16417         The New DoResolve might be called twice when initializing field
16418         expressions (see EmitFieldInitializers, the call to
16419         GetInitializerExpression will perform a resolve on the expression,
16420         and later the assign will trigger another resolution
16421
16422         This leads to bugs (#37014)
16423
16424         * delegate.cs: The signature for EndInvoke should contain any ref
16425         or out parameters as well.  We were not doing this in the past. 
16426
16427         * class.cs (Field.Define): Do not overwrite the type definition
16428         inside the `volatile' group.  Turns out that volatile enumerations
16429         were changing the type here to perform a validity test, which
16430         broke conversions. 
16431
16432 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
16433
16434         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
16435         and structs, we do not want to load the instance variable
16436
16437         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
16438         enum_type has to be handled like an object reference (implicit
16439         conversions exists from this to object), but the regular IsClass
16440         and IsValueType tests will never return true for this one.
16441
16442         Also we use TypeManager.IsValueType instead of type.IsValueType,
16443         just for consistency with the rest of the code (this is only
16444         needed if we ever use the construct exposed by test-180.cs inside
16445         corlib, which we dont today).
16446
16447 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
16448
16449         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
16450         just InternalCall.
16451
16452 2003-02-09  Martin Baulig  <martin@ximian.com>
16453
16454         * namespace.cs (Namespace..ctor): Added SourceFile argument.
16455         (Namespace.DefineNamespaces): New static public method; this is
16456         called when we're compiling with debugging to add all namespaces
16457         to the symbol file.
16458
16459         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
16460         pass it to the Namespace's .ctor.
16461
16462         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
16463         and MethodBase arguments; pass the namespace ID to the symwriter;
16464         pass the MethodBase instead of the token to the symwriter.
16465         (SymbolWriter.DefineNamespace): New method to add a namespace to
16466         the symbol file.
16467
16468 2003-02-09  Martin Baulig  <martin@ximian.com>
16469
16470         * symbolwriter.cs: New file.  This is a wrapper around
16471         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
16472         methods here in near future.
16473
16474 2003-02-09  Martin Baulig  <martin@ximian.com>
16475
16476         * codegen.cs (EmitContext.Mark): Just pass the arguments to
16477         ILGenerator.MarkSequencePoint() which are actually used by the
16478         symbol writer.
16479
16480 2003-02-09  Martin Baulig  <martin@ximian.com>
16481
16482         * location.cs (SourceFile): New public sealed class.  This
16483         contains the name and an index which is used in the location's token.
16484         (Location): Reserve an appropriate number of bits in the token for
16485         the source file instead of walking over that list, this gives us a
16486         really huge performance improvement when compiling with debugging.
16487
16488         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
16489         `SourceFile' argument instead of a string.
16490         (Driver.ProcessFile): Add all the files via Location.AddFile(),
16491         but don't parse/tokenize here, we need to generate the list of all
16492         source files before we do that.
16493         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
16494         the files.
16495
16496         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
16497         instead of a string.
16498
16499         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
16500         of a string.
16501
16502 2003-02-09  Martin Baulig  <martin@ximian.com>
16503
16504         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
16505         filename on `#line default'.
16506
16507 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
16508
16509         * statement.cs: don't clear the pinned var when the fixed statement
16510         returns from the method (fixes bug#37752).
16511
16512 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
16513
16514         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
16515         to IsValueType.
16516
16517 2003-02-07  Martin Baulig  <martin@ximian.com>
16518
16519         * driver.cs: Removed the `--debug-args' command line argument.
16520
16521         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
16522         automatically by the AsssemblyBuilder.
16523         (CodeGen.InitializeSymbolWriter): We don't need to call any
16524         initialization function on the symbol writer anymore.  This method
16525         doesn't take any arguments.
16526
16527 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
16528
16529         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
16530         from referenced assemblies as well.
16531
16532 2003-02-02  Martin Baulig  <martin@ximian.com>
16533
16534         * class.cs (MethodData.Emit): Generate debugging info for external methods.
16535
16536 2003-02-02  Martin Baulig  <martin@ximian.com>
16537
16538         * class.cs (Constructor.Emit): Open the symbol writer before
16539         emitting the constructor initializer.
16540         (ConstructorInitializer.Emit): Call ec.Mark() to allow
16541         single-stepping through constructor initializers.
16542
16543 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
16544
16545         * class.cs: Handle error 549: do not allow virtual methods in
16546         sealed classes. 
16547
16548 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
16549
16550         * decl.cs: Check access levels when resolving types
16551
16552 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
16553
16554         * statement.cs: Add parameters and locals set in catch blocks that might 
16555         return to set vector
16556
16557 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
16558
16559         * class.cs (Operator): Set the SpecialName flags for operators.
16560
16561         * expression.cs (Invocation.DoResolve): Only block calls to
16562         accessors and operators on SpecialName methods.
16563
16564         (Cast.TryReduce): Handle conversions from char constants.
16565
16566
16567 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
16568
16569         * statement.cs: small memory and time optimization in FlowBranching.
16570
16571 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
16572
16573         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
16574         problem that the last fix but in the other sid (Set).
16575
16576         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
16577         access when there is no indexer in the hierarchy.
16578
16579 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
16580
16581         * class.cs: Combine some if statements.
16582
16583 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16584
16585         * driver.cs: fixed bug #37187.
16586
16587 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
16588
16589         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
16590         any indexer, it's needed to build a list with all the indexers in the
16591         hierarchy (AllGetters), else we have problems. Fixes #35653.
16592
16593 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
16594
16595         * class.cs (MethodData.Define): It is wrong for an interface
16596         implementation to be static in both cases: explicit and implicit.
16597         We were only handling this in one case.
16598
16599         Improve the if situation there to not have negations.
16600
16601         * class.cs (Field.Define): Turns out that we do not need to check
16602         the unsafe bit on field definition, only on usage.  Remove the test.
16603
16604 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16605
16606         * driver.cs: use assembly.Location instead of Codebase (the latest
16607         patch made mcs fail when using MS assemblies).
16608
16609 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
16610
16611         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
16612         get the path to *corlib.dll.
16613
16614 2003-01-21  Nick Drochak <ndrochak@gol.com>
16615
16616         * cs-tokenizer.cs:
16617         * pending.cs:
16618         * typemanager.cs: Remove compiler warnings
16619
16620 2003-01-20  Duncan Mak  <duncan@ximian.com>
16621
16622         * AssemblyInfo.cs: Bump the version number to 0.19.
16623
16624 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16625
16626         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
16627
16628 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
16629
16630         * class.cs (Constructor::Emit): Emit debugging info for constructors.
16631
16632 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
16633
16634         * cs-parser.jay: Small fix: we were not comparing the constructor
16635         name correctly.   Thanks to Zoltan for the initial pointer.
16636
16637 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
16638
16639         * cs-tokenizer.cs: Set file name when specified with #line
16640
16641 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
16642
16643         * cs-parser.jay: Only perform the constructor checks here if we
16644         are named like the class;  This will help provider a better
16645         error.  The constructor path is taken when a type definition is
16646         not found, but most likely the user forgot to add the type, so
16647         report that rather than the constructor error.
16648
16649 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
16650
16651         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
16652         allocations.
16653
16654 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16655
16656         * cs-parser.jay: Add cleanup call.
16657
16658 2003-01-13  Duncan Mak  <duncan@ximian.com>
16659
16660         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
16661         consistent with other methods.
16662
16663 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16664
16665         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
16666
16667 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
16668
16669         * attribute.cs: only set GuidAttr to true when we have a
16670         GuidAttribute.
16671
16672 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16673
16674         * ecore.cs:
16675         * expression.cs:
16676         * typemanager.cs: fixes to allow mcs compile corlib with the new
16677         Type.IsSubclassOf fix.
16678
16679 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
16680
16681         * expression.cs (LocalVariableReference.DoResolve): Classify a
16682         constant as a value, not as a variable.   Also, set the type for
16683         the variable.
16684
16685         * cs-parser.jay (fixed_statement): take a type instead of a
16686         pointer_type, so we can produce a better error message later.
16687
16688         * statement.cs (Fixed.Resolve): Flag types that are not pointers
16689         as an error.  
16690
16691         (For.DoEmit): Make inifinite loops have a
16692         non-conditional branch back.
16693
16694         (Fixed.DoEmit): First populate the pinned variables, then emit the
16695         statement, then clear the variables.  Before I was emitting the
16696         code once for each fixed piece.
16697
16698
16699 2003-01-08  Martin Baulig  <martin@ximian.com>
16700
16701         * statement.cs (FlowBranching.MergeChild): A break in a
16702         SWITCH_SECTION does not leave a loop.  Fixes #36155.
16703
16704 2003-01-08  Martin Baulig  <martin@ximian.com>
16705
16706         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
16707         lives in the same number space than `param_map'.  Fixes #36154.
16708
16709 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
16710
16711         * cs-parser.jay (constructor_declaration): Set the
16712         Constructor.ModFlags before probing for it.  This makes the
16713         compiler report 514, 515 and 132 (the code was there, but got
16714         broken). 
16715
16716         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
16717         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
16718         (GotoCase.Resolve): Set `Returns' to ALWAYS.
16719
16720 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
16721
16722         * enum.cs: create the enum static fields using the enum type.
16723
16724 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
16725
16726         * class.cs: don't try to create the ParamBuilder for the return
16727         type if it's not needed (and handle it breaking for the ms runtime
16728         anyway).
16729
16730 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
16731
16732         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
16733
16734 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
16735
16736         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
16737         the command.   This showed up while compiling the JANET source
16738         code, which used \r as its only newline separator.
16739
16740 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
16741
16742         * class.cs (Method.Define): If we are an operator (because it
16743         reuses our code), then set the SpecialName and HideBySig.  #36128
16744
16745 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
16746
16747         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
16748         exception, report error 120 `object reference required'.
16749
16750         * driver.cs: Add --pause option, used during to measure the size
16751         of the process as it goes with --timestamp.
16752
16753         * expression.cs (Invocation.DoResolve): Do not allow methods with
16754         SpecialName to be invoked.
16755
16756 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
16757
16758         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
16759         number before adding it.
16760
16761 2002-12-21  Ravi Pratap  <ravi@ximian.com>
16762
16763         * ecore.cs (StandardImplicitConversion): When in an unsafe
16764         context, we allow conversion between void * to any other pointer
16765         type. This fixes bug #35973.
16766
16767 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
16768
16769         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
16770         is not thrown when extensionless outputs are used 
16771
16772 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16773
16774         * rootcontext.cs: fixed compilation of corlib.
16775
16776 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
16777
16778         * attribute.cs (Attributes.Contains): Add new method.
16779
16780         * class.cs (MethodCore.LabelParameters): if the parameter is an
16781         `out' parameter, check that no attribute `[In]' has been passed.
16782
16783         * enum.cs: Handle the `value__' name in an enumeration.
16784
16785 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
16786
16787         * decl.cs: Added special case to allow overrides on "protected
16788         internal" methods
16789
16790 2002-12-18  Ravi Pratap  <ravi@ximian.com>
16791
16792         * attribute.cs (Attributes.AddAttributeSection): Rename to this
16793         since it makes much more sense.
16794
16795         (Attributes.ctor): Don't require a Location parameter.
16796
16797         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
16798
16799         * attribute.cs (ApplyAttributes): Remove extra Location parameters
16800         since we already have that information per attribute.
16801
16802         * everywhere : make appropriate changes.
16803
16804         * class.cs (LabelParameters): Write the code which actually
16805         applies attributes to the return type. We can't do this on the MS
16806         .NET runtime so we flag a warning in the case an exception is
16807         thrown.
16808
16809 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
16810
16811         * const.cs: Handle implicit null conversions here too.
16812
16813 2002-12-17  Ravi Pratap  <ravi@ximian.com>
16814
16815         * class.cs (MethodCore.LabelParameters): Remove the extra
16816         Type [] parameter since it is completely unnecessary. Instead
16817         pass in the method's attributes so that we can extract
16818         the "return" attribute.
16819
16820 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
16821
16822         * cs-parser.jay (parse): Use Report.Error to flag errors instead
16823         of ignoring it and letting the compile continue.
16824
16825         * typemanager.cs (ChangeType): use an extra argument to return an
16826         error condition instead of throwing an exception.
16827
16828 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
16829
16830         * expression.cs (Unary.TryReduce): mimic the code for the regular
16831         code path.  Perform an implicit cast in the cases where we can
16832         implicitly convert to one of the integral types, and then reduce
16833         based on that constant.   This fixes bug #35483.
16834
16835 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16836
16837         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
16838
16839 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16840
16841         * namespace.cs: fixed bug #35489.
16842
16843 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
16844
16845         * class.cs: Remove some dead code.
16846
16847         * cs-parser.jay: Estimate the number of methods needed
16848         (RootContext.MethodCount);
16849
16850         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
16851         numbers instead of StringBuilders.
16852
16853         * support.cs (PtrHashtable): Add constructor with initial size;
16854         We can now reduce reallocations of the method table.
16855
16856 2002-12-10  Ravi Pratap  <ravi@ximian.com>
16857
16858         * attribute.cs (ApplyAttributes): Keep track of the emitted
16859         attributes on a per-target basis. This fixes bug #35413.
16860
16861 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
16862
16863         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
16864         default to the Windows 1252 encoding.
16865
16866         (UnixParseOption): Support version, thanks to Alp for the missing
16867         pointer. 
16868
16869         * AssemblyInfo.cs: Add nice assembly information.
16870
16871         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
16872         (bug 35169).
16873
16874         * cs-parser.jay: Allow a trailing comma before the close bracked
16875         in the attribute_section production.
16876
16877         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
16878         address of the instance was being taken, I will take this out,
16879         because we take the address of the object immediately here.
16880
16881 2002-12-09  Ravi Pratap  <ravi@ximian.com>
16882
16883         * typemanager.cs (AreMultipleAllowed): Take care of the most
16884         obvious case where attribute type is not in the current assembly -
16885         stupid me ;-)
16886
16887 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
16888
16889         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
16890         definitions, instead of doing that afterwards.  
16891
16892         Also we use a nice little hack, depending on the constructor, we
16893         know if we are a "composed" name or a simple name.  Hence, we
16894         avoid the IndexOf test, and we avoid 
16895
16896         * codegen.cs: Add code to assist in a bug reporter to track down
16897         the source of a compiler crash. 
16898
16899 2002-12-07  Ravi Pratap  <ravi@ximian.com>
16900
16901         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
16902         types have been emitted for a given element and flag an error
16903         if something which does not have AllowMultiple set is used more
16904         than once.
16905
16906         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
16907         attribute types and their corresponding AllowMultiple properties
16908
16909         (AreMultipleAllowed): Check the property for a given type.
16910
16911         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
16912         property in the case we have a TypeContainer.
16913
16914         (Attributes.AddAttribute): Detect duplicates and just skip on
16915         adding them. This trivial fix catches a pretty gross error in our
16916         attribute emission - global attributes were being emitted twice!
16917
16918         Bugzilla bug #33187 is now fixed.
16919
16920 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
16921
16922         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
16923         instead of pp_and).
16924
16925         * expression.cs (Binary.ResolveOperator): I can only use the
16926         Concat (string, string, string) and Concat (string, string,
16927         string, string) if the child is actually a concatenation of
16928         strings. 
16929
16930 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
16931
16932         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
16933         context where we need a 2-character lookahead.
16934
16935         * pending.cs (PendingImplementation): Rework so we can keep track
16936         of interface types all the time, and flag those which were
16937         implemented by parents as optional.
16938
16939 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
16940
16941         * expression.cs (Binary.ResolveOperator): Use
16942         String.Concat(string,string,string) or
16943         String.Concat(string,string,string,string) when possible. 
16944
16945         * typemanager: More helper methods.
16946
16947
16948 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
16949
16950         * pending.cs: remove the bogus return from GetMissingInterfaces()
16951         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
16952
16953 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16954
16955         * namespace.cs: avoid duplicated 'using xxx' being added to
16956         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
16957         when we get more than one 'using' statement for the same namespace.
16958         Report a CS0105 warning for it.
16959
16960 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
16961
16962         * cs-tokenizer.cs (consume_identifier): use read directly, instead
16963         of calling getChar/putback, uses internal knowledge of it.    
16964
16965         (xtoken): Reorder tokenizer so most common patterns are checked
16966         first.  This reduces the compilation time in another 5% (from 8.11s
16967         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
16968
16969         The parsing time is 22% of the compilation in mcs, and from that
16970         64% is spent on the tokenization process.  
16971
16972         I tried using a binary search for keywords, but this is slower
16973         than the hashtable.  Another option would be to do a couple of
16974         things:
16975
16976                 * Not use a StringBuilder, instead use an array of chars,
16977                   with a set value.  Notice that this way we could catch
16978                   the 645 error without having to do it *afterwards*.
16979
16980                 * We could write a hand-parser to avoid the hashtable
16981                   compares altogether.
16982
16983         The identifier consumption process takes 37% of the tokenization
16984         time.  Another 15% is spent on is_number.  56% of the time spent
16985         on is_number is spent on Int64.Parse:
16986
16987                 * We could probably choose based on the string length to
16988                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
16989                   computations. 
16990
16991         Another 3% is spend on wrapping `xtoken' in the `token' function.
16992
16993         Handle 0xa0 as whitespace (#34752)
16994
16995 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
16996
16997         * typemanager.cs (IsCLRType): New routine to tell whether a type
16998         is one of the builtin types.  
16999
17000         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
17001         typecode in more places instead of doing pointer comparissions.
17002         We could leverage some knowledge about the way the typecodes are
17003         laid out.
17004
17005         New code to cache namespaces in assemblies, it is currently not
17006         invoked, to be used soon.
17007
17008         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
17009
17010         * expression.cs (Binary.ResolveOperator): specially handle
17011         strings, and do not perform user-defined operator overloading for
17012         built-in types.
17013
17014 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
17015
17016         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
17017         internalcall as it is a pretty simple operation;  Avoid whenever
17018         possible to call Char.IsLetter.
17019
17020         (consume_identifier): Cut by half the number of
17021         hashtable calls by merging the is_keyword and GetKeyword behavior.
17022
17023         Do not short-circuit, because if we do, we
17024         report errors (ie, #if false && true would produce an invalid
17025         directive error);
17026
17027
17028 2002-11-24  Martin Baulig  <martin@ximian.com>
17029
17030         * expression.cs (Cast.TryReduce): If we're in checked syntax,
17031         check constant ranges and report a CS0221.  Fixes #33186.
17032
17033 2002-11-24  Martin Baulig  <martin@ximian.com>
17034
17035         * cs-parser.jay: Make this work for uninitialized variable
17036         declarations in the `for' initializer.  Fixes #32416.
17037
17038 2002-11-24  Martin Baulig  <martin@ximian.com>
17039
17040         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
17041         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
17042
17043 2002-11-24  Martin Baulig  <martin@ximian.com>
17044
17045         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
17046         argument; if true, we also check for user-defined conversions.
17047         This is only needed if both arguments are of a user-defined type.
17048         Fixes #30443, added test-175.cs.
17049         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
17050
17051         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
17052
17053 2002-11-24  Martin Baulig  <martin@ximian.com>
17054
17055         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
17056         function to get the store opcode.
17057         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
17058         only emit the Ldelema if the store opcode is Stobj.  You must run
17059         both test-34 and test-167 to test this.  Fixes #34529.
17060
17061 2002-11-23  Martin Baulig  <martin@ximian.com>
17062
17063         * ecore.cs (Expression.MemberLookup): Added additional
17064         `qualifier_type' argument which is used when we're being called
17065         from MemberAccess.DoResolve() and null if we're called from a
17066         SimpleName lookup.
17067         (Expression.MemberLookupFailed): New method to report errors; this
17068         does the CS1540 check and reports the correct error message.
17069
17070         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
17071         argument for the CS1540 check and redone the way how we're dealing
17072         with private members.  See the comment in the source code for details.
17073         (FilterWithClosure): Reverted this back to revision 1.197; renamed
17074         `closure_start_type' to `closure_qualifier_type' and check whether
17075         it's not null.  It was not this filter being broken, it was just
17076         being called with the wrong arguments.
17077
17078         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
17079         and pass it the correct `qualifier_type'; this also does the error
17080         handling for us.
17081
17082 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
17083
17084         * expression.cs (Invocation.EmitParams): If the we are dealing
17085         with a non-built-in value type, load its address as well.
17086
17087         (ArrayCreation): Use a a pretty constant instead
17088         of the hardcoded value 2.   Use 6 instead of 2 for the number of
17089         static initializers.  
17090
17091         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
17092         because they are not really value types, just glorified integers. 
17093
17094         * driver.cs: Do not append .exe, the CSC compiler does not do it.
17095
17096         * ecore.cs: Remove redundant code for enumerations, make them use
17097         the same code path as everything else, fixes the casting issue
17098         with enumerations in Windows.Forms.
17099
17100         * attribute.cs: Do only cast to string if it is a string, the
17101         validation happens later.
17102
17103         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
17104         people upgrade their corlibs.
17105
17106         * ecore.cs: Oops, enumerations were not following the entire code path
17107
17108 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
17109
17110         * typemanager.cs (FilterWithClosure): Commented out the test for
17111         1540 in typemanager.cs, as it has problems when accessing
17112         protected methods from a parent class (see test-174.cs). 
17113
17114         * attribute.cs (Attribute.ValidateGuid): new method.
17115         (Attribute.Resolve): Use above.
17116
17117 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
17118
17119         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
17120
17121         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
17122         handling for enumerations, as we only needed the TypeContainer
17123         functionality to begin with (this is required for the fix below to
17124         work for enums that reference constants in a container class for
17125         example). 
17126
17127         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
17128
17129         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
17130         a valid TypeBuilder to perform lookups on.o
17131
17132         * class.cs (InheritableMemberSignatureCompare): Use true in the
17133         call to GetGetMethod and GetSetMethod, because we are comparing
17134         the signature, and we need to get the methods *even* if they are
17135         private. 
17136
17137         (PropertyBase.CheckBase): ditto.
17138
17139         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
17140         GotoCase.Resolve): Use Peel on EmpytCasts.
17141
17142         * ecore.cs (EmptyCast): drop child, add Peel method.
17143
17144 2002-11-17  Martin Baulig  <martin@ximian.com>
17145
17146         * ecore.cs (EmptyCast.Child): New public property.
17147
17148         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
17149         label resolved to an EmptyCast.  Fixes #34162.
17150         (GotoCase.Resolve): Likewise.
17151         (Block.EmitMeta): Likewise.
17152
17153 2002-11-17  Martin Baulig  <martin@ximian.com>
17154
17155         * expression.cs (Invocation.BetterConversion): Prefer int over
17156         uint; short over ushort; long over ulong for integer literals.
17157         Use ImplicitConversionExists instead of StandardConversionExists
17158         since we also need to check for user-defined implicit conversions.
17159         Fixes #34165.  Added test-173.cs.
17160
17161 2002-11-16  Martin Baulig  <martin@ximian.com>
17162
17163         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
17164         with the `true' and `false' literals.  Fixes #33151.
17165
17166 2002-11-16  Martin Baulig  <martin@ximian.com>
17167
17168         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
17169         October 22nd; don't do the cs1540 check for static members.
17170
17171         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
17172         now using our own filter here and doing the cs1540 check again.
17173
17174 2002-11-16  Martin Baulig  <martin@ximian.com>
17175
17176         * support.cs (InternalParameters): Don't crash if we don't have
17177         any fixed parameters.  Fixes #33532.
17178
17179 2002-11-16  Martin Baulig  <martin@ximian.com>
17180
17181         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
17182         when looking up static methods to make this work on Windows.
17183         Fixes #33773.
17184
17185 2002-11-16  Martin Baulig  <martin@ximian.com>
17186
17187         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
17188         a setter rather than using PropertyInfo.CanWrite.
17189
17190 2002-11-15  Nick Drochak  <ndrochak@gol.com>
17191
17192         * class.cs: Allow acces to block member by subclasses. Fixes build
17193         breaker.
17194
17195 2002-11-14  Martin Baulig  <martin@ximian.com>
17196
17197         * class.cs (Constructor.Emit): Added the extern/block check.
17198         Fixes bug #33678.
17199
17200 2002-11-14  Martin Baulig  <martin@ximian.com>
17201
17202         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
17203         iteration while looking for indexers, this is needed because the
17204         indexer may have a different name in our base classes.  Fixed the
17205         error reporting (no indexers at all, not get accessor, no
17206         overloaded match).  Fixes bug #33089.
17207         (IndexerAccess.DoResolveLValue): Likewise.
17208
17209 2002-11-14  Martin Baulig  <martin@ximian.com>
17210
17211         * class.cs (PropertyBase.CheckBase): Make this work for multiple
17212         indexers.  Fixes the first part of bug #33089.
17213         (MethodSignature.InheritableMemberSignatureCompare): Added support
17214         for properties.
17215
17216 2002-11-13  Ravi Pratap  <ravi@ximian.com>
17217
17218         * attribute.cs (Attribute.Resolve): Catch the
17219         NullReferenceException and report it since it isn't supposed to
17220         happen. 
17221
17222 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
17223
17224         * expression.cs (Binary.EmitBranchable): Also handle the cases for
17225         LogicalOr and LogicalAnd that can benefit from recursively
17226         handling EmitBranchable.  The code now should be nice for Paolo.
17227
17228 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
17229
17230         * typemanager.cs (LookupType): Added a negative-hit hashtable for
17231         the Type lookups, as we perform quite a number of lookups on
17232         non-Types.  This can be removed once we can deterministically tell
17233         whether we have a type or a namespace in advance.
17234
17235         But this might require special hacks from our corlib.
17236
17237         * TODO: updated.
17238
17239         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
17240         and double which avoids a conversion from an integer to a double.
17241
17242         * expression.cs: tiny optimization, avoid calling IsConstant,
17243         because it effectively performs the lookup twice.
17244
17245 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
17246
17247         But a bogus return here to keep the semantics of the old code
17248         until the Mono runtime is fixed.
17249
17250         * pending.cs (GetMissingInterfaces): New method used to remove all
17251         the interfaces that are already implemented by our parent
17252         classes from the list of pending methods. 
17253
17254         * interface.cs: Add checks for calls after ResolveTypeExpr.
17255
17256 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
17257
17258         * class.cs (Class.Emit): Report warning 67: event not used if the
17259         warning level is beyond 3.
17260
17261         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
17262         being a NullLiteral.
17263
17264         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
17265         specifiers. 
17266
17267         * class.cs (TypeContainer.GetClassBases): Cover a missing code
17268         path that might fail if a type can not be resolved.
17269
17270         * expression.cs (Binary.Emit): Emit unsigned versions of the
17271         operators. 
17272
17273         * driver.cs: use error 5.
17274
17275 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
17276
17277         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
17278
17279 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
17280
17281         * cs-parser.jay (switch_section): A beautiful patch from Martin
17282         Baulig that fixed 33094.
17283
17284 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
17285
17286         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
17287         Check whether the base is abstract and report an error if so.
17288
17289         * expression.cs (IndexerAccess.DoResolveLValue,
17290         IndexerAccess.DoResolve): ditto. 
17291
17292         (Invocation.DoResolve): ditto.
17293
17294         (Invocation.FullMethodDesc): Improve the report string.
17295
17296         * statement.cs (Block): Eliminate IsVariableDefined as it is
17297         basically just a wrapper for GetVariableInfo.
17298
17299         * ecore.cs (SimpleName): Use new 
17300
17301         * support.cs (ReflectionParamter.ParameterType): We unwrap the
17302         type, as we return the actual parameter ref/unref state on a
17303         different call.
17304
17305 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
17306
17307         * support.cs: Return proper flags REF/OUT fixing the previous
17308         commit.  
17309
17310         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
17311         not used to mean `ref' but `ref or out' in ParameterReference
17312
17313         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
17314         full type signature instead of calling TypeManger.CSharpName
17315         ourselves. 
17316
17317         * support.cs (InternalParameters.ParameterDesc): Do not compare
17318         directly to the modflags, because REF/OUT will actually be bitsets
17319         if set. 
17320
17321         * delegate.cs (VerifyMethod): Check also the modifiers.
17322
17323         * cs-tokenizer.cs: Fix bug where floating point values with an
17324         exponent where a sign was missing was ignored.
17325
17326         * driver.cs: Allow multiple assemblies to be specified in a single
17327         /r: argument
17328
17329 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
17330
17331         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
17332         because identifiers after a parenthesis would end up in this kind
17333         of production, and we needed to desamiguate it for having casts
17334         like:
17335
17336                 (UserDefinedType *) xxx
17337
17338 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
17339
17340         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
17341         we should set on the Bindingflags.NonPublic, but not turn on
17342         private_ok.  private_ok controls whether a Private member is
17343         returned (this is chekced on the filter routine), while the
17344         BindingFlags.NonPublic just controls whether private/protected
17345         will be allowed.   This fixes the problem part of the problem of
17346         private properties being allowed to be used in derived classes.
17347
17348         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
17349         so we can call the children DoResolveLValue method (this will
17350         properly signal errors on lvalue assignments to base properties)
17351
17352         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
17353         getter are null, and we have a property info, we know that this
17354         happened because the lookup failed, so we report an error 122 for
17355         protection level violation.
17356
17357         We also silently return if setter and getter are null in the
17358         resolve functions, this condition only happens if we have flagged
17359         the error before.  This is the other half of the problem. 
17360
17361         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
17362         not have accessibility information, that is why we were returning
17363         true in the filter function in typemanager.cs.
17364
17365         To properly report 122 (property is inaccessible because of its
17366         protection level) correctly, we report this error in ResolveAccess
17367         by failing if both the setter and the getter are lacking (ie, the
17368         lookup failed). 
17369
17370         DoResolve and DoLResolve have been modified to check for both
17371         setter/getter being null and returning silently, the reason being
17372         that I did not want to put the knowledge about this error in upper
17373         layers, like:
17374
17375         int old = Report.Errors;
17376         x = new PropertyExpr (...);
17377         if (old != Report.Errors)
17378                 return null;
17379         else
17380                 return x;
17381
17382         So the property expr is returned, but it is invalid, so the error
17383         will be flagged during the resolve process. 
17384
17385         * class.cs: Remove InheritablePropertySignatureCompare from the
17386         class, as we no longer depend on the property signature to compute
17387         whether it is possible to implement a method or not.
17388
17389         The reason is that calling PropertyInfo.GetGetMethod will return
17390         null (in .NET, in Mono it works, and we should change this), in
17391         cases where the Get Method does not exist in that particular
17392         class.
17393
17394         So this code:
17395
17396         class X { public virtual int A { get { return 1; } } }
17397         class Y : X { }
17398         class Z : Y { public override int A { get { return 2; } } }
17399
17400         Would fail in Z because the parent (Y) would not have the property
17401         defined.  So we avoid this completely now (because the alternative
17402         fix was ugly and slow), and we now depend exclusively on the
17403         method names.
17404
17405         (PropertyBase.CheckBase): Use a method-base mechanism to find our
17406         reference method, instead of using the property.
17407
17408         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
17409         routines are gone now.
17410
17411         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
17412         names, they were incorrectly named.
17413
17414         * cs-tokenizer.cs: Return are more gentle token on failure. 
17415
17416         * pending.cs (PendingImplementation.InterfaceMethod): This routine
17417         had an out-of-sync index variable, which caused it to remove from
17418         the list of pending methods the wrong method sometimes.
17419
17420 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
17421
17422         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
17423         CanWrite, because those refer to this particular instance of the
17424         property, and do not take into account the fact that we can
17425         override single members of a property.
17426
17427         Constructor requires an EmitContext.  The resolution process does
17428         not happen here, but we need to compute the accessors before,
17429         because the resolution does not always happen for properties.
17430
17431         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
17432         subclass, before we did not update this flag, but we did update
17433         bindingflags. 
17434
17435         (GetAccessors): Drop this routine, as it did not work in the
17436         presence of partially overwritten set/get methods. 
17437
17438         Notice that this broke the cs1540 detection, but that will require
17439         more thinking. 
17440
17441 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17442
17443         * class.cs:
17444         * codegen.cs:
17445         * driver.cs: issue a warning instead of an error if we don't support
17446         debugging for the platform. Also ignore a couple of errors that may
17447         arise when trying to write the symbols. Undo my previous patch.
17448
17449 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17450
17451         * driver.cs: ignore /debug switch except for Unix platforms.
17452
17453 2002-10-23  Nick Drochak  <ndrochak@gol.com>
17454
17455         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
17456
17457 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
17458
17459         * driver.cs: Do not make mcs-debug conditional, so we do not break
17460         builds that use it.
17461
17462         * statement.cs (UsageVector.MergeChildren): I would like Martin to
17463         review this patch.  But basically after all the children variables
17464         have been merged, the value of "Breaks" was not being set to
17465         new_breaks for Switch blocks.  I think that it should be set after
17466         it has executed.  Currently I set this to the value of new_breaks,
17467         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
17468         conservative, but I do not understand this code very well.
17469
17470         I did not break anything in the build, so that is good ;-)
17471
17472         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
17473
17474 2002-10-20  Mark Crichton  <crichton@gimp.org>
17475
17476         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
17477
17478 2002-10-20  Nick Drochak  <ndrochak@gol.com>
17479
17480         * cfold.cs: Fixed compile blocker.
17481
17482 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
17483
17484         * driver.cs: I was chekcing the key, not the file.
17485
17486 2002-10-19  Ravi Pratap  <ravi@ximian.com>
17487
17488         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
17489         message that we were generating - we just need to silently return
17490         a null.
17491
17492 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
17493
17494         * class.cs (Event.Define): Change my previous commit, as this
17495         breaks the debugger.  This is a temporary hack, as it seems like
17496         the compiler is generating events incorrectly to begin with.
17497
17498         * expression.cs (Binary.ResolveOperator): Added support for 
17499         "U operator - (E x, E y)"
17500
17501         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
17502         y)".
17503
17504         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
17505         init-only variables, but this path did not take into account that
17506         there might be also instance readonly variables.  Correct this
17507         problem. 
17508
17509         This fixes bug 32253
17510
17511         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
17512         delegates as well.
17513
17514         * driver.cs: Change the extension for modules to `netmodule'
17515
17516         * cs-parser.jay: Improved slightly the location tracking for
17517         the debugger symbols.
17518
17519         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
17520         modifiers that were specified instead of the hardcoded value
17521         (FamAndAssem).  This was basically ignoring the static modifier,
17522         and others.  Fixes 32429.
17523
17524         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
17525         fixed a bug in the process (32476)
17526
17527         * expression.cs (ArrayAccess.EmitAssign): Patch from
17528         hwang_rob@yahoo.ca that fixes bug 31834.3
17529
17530 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
17531
17532         * driver.cs: Make the module extension .netmodule.
17533
17534 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
17535
17536         * driver.cs: Report an error if the resource file is not found
17537         instead of crashing.
17538
17539         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
17540         false, like Emit does.
17541
17542 2002-10-16  Nick Drochak  <ndrochak@gol.com>
17543
17544         * typemanager.cs: Remove unused private member.  Also reported mcs
17545         bug to report this as a warning like csc.
17546
17547 2002-10-15  Martin Baulig  <martin@gnome.org>
17548
17549         * statement.cs (Statement.Emit): Made this a virtual method; emits
17550         the line number info and calls DoEmit().
17551         (Statement.DoEmit): New protected abstract method, formerly knows
17552         as Statement.Emit().
17553
17554         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
17555
17556 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
17557
17558         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
17559         have fixed a remaining problem: not every AddXXXX was adding a
17560         fully qualified name.  
17561
17562         Now everyone registers a fully qualified name in the DeclSpace as
17563         being defined instead of the partial name.  
17564
17565         Downsides: we are slower than we need to be due to the excess
17566         copies and the names being registered this way.  
17567
17568         The reason for this is that we currently depend (on the corlib
17569         bootstrap for instance) that types are fully qualified, because
17570         we dump all the types in the namespace, and we should really have
17571         types inserted into the proper namespace, so we can only store the
17572         basenames in the defined_names array.
17573
17574 2002-10-10  Martin Baulig  <martin@gnome.org>
17575
17576         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
17577         from bug #31834, see the bug report for a testcase which is
17578         miscompiled.
17579
17580 2002-10-10  Martin Baulig  <martin@gnome.org>
17581
17582         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
17583         flow analysis code for this.
17584
17585         * statement.cs (Do, While, For): Tell the flow analysis code about
17586         infinite loops.
17587         (FlowBranching.UsageVector): Added support for infinite loops.
17588         (Block.Resolve): Moved the dead code elimination here and use flow
17589         analysis to do it.
17590
17591 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
17592
17593         * class.cs (Field.Define): Catch cycles on struct type
17594         definitions. 
17595
17596         * typemanager.cs (IsUnmanagedtype): Do not recursively check
17597         fields if the fields are static.  We only need to check instance
17598         fields. 
17599
17600         * expression.cs (As.DoResolve): Test for reference type.
17601
17602         * statement.cs (Using.ResolveExpression): Use
17603         ConvertImplicitRequired, not ConvertImplicit which reports an
17604         error on failture
17605         (Using.ResolveLocalVariableDecls): ditto.
17606
17607         * expression.cs (Binary.ResolveOperator): Report errors in a few
17608         places where we had to.
17609
17610         * typemanager.cs (IsUnmanagedtype): Finish implementation.
17611
17612 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
17613
17614         * expression.cs: Use StoreFromPtr instead of extracting the type
17615         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
17616
17617         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
17618         an enumeration value to a System.Enum, but System.Enum is not a
17619         value type, but an class type, so we need to box.
17620
17621         (Expression.ConvertExplicit): One codepath could return
17622         errors but not flag them.  Fix this.  Fixes #31853
17623
17624         * parameter.cs (Resolve): Do not allow void as a parameter type.
17625
17626 2002-10-06  Martin Baulig  <martin@gnome.org>
17627
17628         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
17629         if it's a class type and not a struct.  Fixes #31815.
17630
17631 2002-10-06  Martin Baulig  <martin@gnome.org>
17632
17633         * statement.cs: Reworked the flow analysis code a bit to make it
17634         usable for dead code elimination.
17635
17636 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17637
17638         * cs-parser.jay: allow empty source files. Fixes bug #31781.
17639
17640 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17641
17642         * expression.cs (ComposedCast.DoResolveType): A quick workaround
17643         to fix the test 165, will investigate deeper.
17644
17645 2002-10-04  Martin Baulig  <martin@gnome.org>
17646
17647         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
17648         finally blocks actually work.
17649         (Try.Resolve): We don't need to create a sibling for `finally' if
17650         there is no finally block.
17651
17652 2002-10-04  Martin Baulig  <martin@gnome.org>
17653
17654         * class.cs (Constructor.Define): The default accessibility for a
17655         non-default constructor is private, not public.
17656
17657 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17658
17659         * class.cs (Constructor): Make AllowedModifiers public, add
17660         EXTERN.
17661
17662         * cs-parser.jay: Perform the modifiers test here, as the
17663         constructor for the Constructor class usually receives a zero
17664         because of the way we create it (first we create, later we
17665         customize, and we were never checking the modifiers).
17666
17667         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
17668         is a version of LookupTypeReflection that includes the type-name
17669         cache.  This can be used as a fast path for functions that know
17670         the fully qualified name and are only calling into *.GetType() to
17671         obtain a composed type.
17672
17673         This is also used by TypeManager.LookupType during its type
17674         composition.
17675
17676         (LookupType): We now also track the real type name, as sometimes
17677         we can get a quey for the real type name from things like
17678         ComposedCast.  This fixes bug 31422.
17679
17680         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
17681         complete type fullname, it does not have to go through the type
17682         resolution system to obtain the composed version of the type (for
17683         obtaining arrays or pointers).
17684
17685         (Conditional.Emit): Use the EmitBoolExpression to
17686         generate nicer code, as requested by Paolo.
17687
17688         (ArrayCreation.CheckIndices): Use the patch from
17689         hwang_rob@yahoo.ca to validate the array initializers. 
17690
17691 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
17692
17693         * class.cs (ConstructorInitializer.Emit): simplify code by using
17694         Invocation.EmitCall, and at the same time, fix the bugs in calling
17695         parent constructors that took variable arguments. 
17696
17697         * ecore.cs (Expression.ConvertNumericExplicit,
17698         Expression.ImplicitNumericConversion): Remove the code that
17699         manually wrapped decimal (InternalTypeConstructor call is now gone
17700         as well).
17701
17702         * expression.cs (Cast.TryReduce): Also handle decimal types when
17703         trying to perform a constant fold on the type.
17704
17705         * typemanager.cs (IsUnmanagedtype): Partially implemented.
17706
17707         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
17708         that only turned off an error report, and did nothing else. 
17709
17710 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
17711
17712         * driver.cs: Handle and ignore /fullpaths
17713
17714 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
17715
17716         * expression.cs (Binary.ResolveOperator): Catch the case where
17717         DoNumericPromotions returns true, 
17718
17719         (Binary.DoNumericPromotions): Simplify the code, and the tests.
17720
17721 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
17722
17723         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
17724         report error 70.
17725
17726 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
17727
17728         * ecore.cs (ConvertNumericExplicit): It is not enough that the
17729         conversion exists, but it is also required that the conversion be
17730         performed.  This manifested in "(Type64Enum) 2".  
17731
17732         * class.cs (TypeManager.AddMethod): The fix is not to change
17733         AddEnum, because that one was using a fully qualified name (every
17734         DeclSpace derivative does), but to change the AddMethod routine
17735         that was using an un-namespaced name.  This now correctly reports
17736         the duplicated name.
17737
17738         Revert patch until I can properly fix it.  The issue
17739         is that we have a shared Type space across all namespaces
17740         currently, which is wrong.
17741
17742         Options include making the Namespace a DeclSpace, and merge
17743         current_namespace/current_container in the parser.
17744
17745 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
17746
17747         * cs-parser.jay: Improve error reporting when we get a different
17748         kind of expression in local_variable_type and
17749         local_variable_pointer_type. 
17750
17751         Propagate this to avoid missleading errors being reported.
17752
17753         * ecore.cs (ImplicitReferenceConversion): treat
17754         TypeManager.value_type as a target just like object_type.   As
17755         code like this:
17756
17757         ValueType v = 1;
17758
17759         Is valid, and needs to result in the int 1 being boxed before it
17760         is assigned to the value type v.
17761
17762         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
17763         to validate the enumeration name.
17764
17765         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
17766         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
17767         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
17768
17769         * ecore.cs (TryImplicitIntConversion): When doing an
17770         implicit-enumeration-conversion, check if the type is 64-bits and
17771         perform a conversion before passing to EnumConstant.
17772
17773 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
17774
17775         * decl.cs (Error_AmbiguousTypeReference); New routine used to
17776         report ambiguous type references.  Unlike the MS version, we
17777         report what the ambiguity is.   Innovation at work ;-)
17778
17779         (DeclSpace.FindType): Require a location argument to
17780         display when we display an ambiguous error.
17781
17782         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
17783
17784         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
17785
17786         * expression.cs (EmitDynamicInitializers): Apply patch from
17787         hwang_rob@yahoo.ca that fixes the order in which we emit our
17788         initializers. 
17789
17790 2002-09-21  Martin Baulig  <martin@gnome.org>
17791
17792         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
17793         delegate takes no arguments.
17794
17795 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
17796
17797         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
17798         from integers.
17799
17800         * expression.cs: Extract the underlying type.
17801
17802         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
17803
17804         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
17805
17806 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
17807
17808         * class.cs (TypeContainer.DefineType): We can not use the nice
17809         PackingSize with the size set to 1 DefineType method, because it
17810         will not allow us to define the interfaces that the struct
17811         implements.
17812
17813         This completes the fixing of bug 27287
17814
17815         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
17816         means also structs.  This fixes part of the problem. 
17817         (Expresion.ImplicitReferenceConversionExists): ditto.
17818
17819         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
17820         error if there were no errors reported during the type lookup
17821         process, to avoid duplicates or redundant errors.  Without this
17822         you would get an ambiguous errors plus a type not found.  We have
17823         beaten the user enough with the first error.  
17824
17825         (DeclSparce.FindType): Emit a warning if we have an ambiguous
17826         reference. 
17827
17828         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
17829         during the resolution process, stop the lookup, this avoids
17830         repeated error reports (same error twice).
17831
17832         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
17833
17834         * typemanager.cs (LookupType): Redo the type lookup code to match
17835         the needs of System.Reflection.  
17836
17837         The issue is that System.Reflection requires references to nested
17838         types to begin with a "+" sign instead of a dot.  So toplevel
17839         types look like: "NameSpace.TopLevelClass", and nested ones look
17840         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
17841         levels. 
17842
17843 2002-09-19  Martin Baulig  <martin@gnome.org>
17844
17845         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
17846         says that a method always returns or always throws an exception,
17847         don't report the CS0161.
17848
17849         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
17850         set `Returns = new_returns'.
17851
17852 2002-09-19  Martin Baulig  <martin@gnome.org>
17853
17854         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
17855         to an enum constant, check for a CS0176.
17856
17857 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
17858
17859         * class.cs (TypeContainer.CheckPairedOperators): Now we check
17860         for operators that must be in pairs and report errors.
17861
17862         * ecore.cs (SimpleName.DoResolveType): During the initial type
17863         resolution process, when we define types recursively, we must
17864         check first for types in our current scope before we perform
17865         lookups in the enclosing scopes.
17866
17867         * expression.cs (MakeByteBlob): Handle Decimal blobs.
17868
17869         (Invocation.VerifyArgumentsCompat): Call
17870         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
17871         I thought we were supposed to always call this, but there are a
17872         few places in the code where we dont do it.
17873
17874 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
17875
17876         * driver.cs: Add support in -linkres and -resource to specify the
17877         name of the identifier.
17878
17879 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17880
17881         * ecore.cs (StandardConversionExists): Sync with the conversion
17882         code: allow anything-* to void* conversions.
17883
17884         (FindMostSpecificSource): Use an Expression argument
17885         instead of a Type, because we might be handed over a Literal which
17886         gets a few more implicit conversions that plain types do not.  So
17887         this information was being lost.
17888
17889         Also, we drop the temporary type-holder expression when not
17890         required.
17891
17892 2002-09-17  Martin Baulig  <martin@gnome.org>
17893
17894         * class.cs (PropertyBase.CheckBase): Don't check the base class if
17895         this is an explicit interface implementation.
17896
17897 2002-09-17  Martin Baulig  <martin@gnome.org>
17898
17899         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
17900         different `IndexerName' attributes.
17901
17902         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
17903         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
17904         virtual CommonResolve().
17905
17906 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17907
17908         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
17909         and convert that to the UnderlyingType.
17910
17911         * statement.cs (Foreach.Resolve): Indexers are just like variables
17912         or PropertyAccesses.
17913
17914         * cs-tokenizer.cs (consume_string): Track line numbers and columns
17915         inside quoted strings, we were not doing this before.
17916
17917 2002-09-16  Martin Baulig  <martin@gnome.org>
17918
17919         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
17920         resolve it.  This is needed for the definite assignment check of the
17921         instance expression, fixes bug #29846.
17922         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
17923
17924 2002-09-16  Nick Drochak  <ndrochak@gol.com>
17925
17926         * parameter.cs: Fix compile error.  Cannot reference static member
17927         from an instance object.  Is this an mcs bug?
17928
17929 2002-09-14  Martin Baulig  <martin@gnome.org>
17930
17931         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
17932         multiple times.  Fixes bug #30295, added test-166.cs.
17933
17934 2002-09-14  Martin Baulig  <martin@gnome.org>
17935
17936         * statement.cs (Block.Emit): Don't emit unreachable code.
17937         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
17938         `break' statements.
17939         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
17940
17941 2002-09-14  Martin Baulig  <martin@gnome.org>
17942
17943         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
17944         is set.
17945
17946 2002-09-14  Martin Baulig  <martin@gnome.org>
17947
17948         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
17949         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
17950         be false on the ms runtime.
17951
17952 2002-09-13  Martin Baulig  <martin@gnome.org>
17953
17954         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
17955         the CS0038 error message.
17956
17957 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
17958
17959         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
17960         constant inside, return it.
17961
17962 2002-09-12  Martin Baulig  <martin@gnome.org>
17963
17964         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
17965         implicit conversion can be done between enum types.
17966
17967         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
17968         check whether an implicit conversion to the current enum's UnderlyingType
17969         exists and report an error if not.
17970
17971         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
17972         without debugging support.
17973
17974         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
17975         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
17976
17977 2002-09-12  Martin Baulig  <martin@gnome.org>
17978
17979         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
17980
17981         * ecore.cs (IMemberExpr.DeclaringType): New property.
17982         (SimpleName.SimpleNameResolve): Check whether we're accessing a
17983         nonstatic member of an outer type (CS0038).
17984
17985 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
17986
17987         * driver.cs: Activate the using-error detector at warning level
17988         4 (at least for MS-compatible APIs).
17989
17990         * namespace.cs (VerifyUsing): Small buglett fix.
17991
17992         * pending.cs (PendingImplementation): pass the container pointer. 
17993
17994         * interface.cs (GetMethods): Allow for recursive definition.  Long
17995         term, I would like to move every type to support recursive
17996         definitions, not the current ordering mechanism that we have right
17997         now.
17998
17999         The situation is this: Attributes are handled before interfaces,
18000         so we can apply attributes to interfaces.  But some attributes
18001         implement interfaces, we will now handle the simple cases
18002         (recursive definitions will just get an error).  
18003
18004         * parameter.cs: Only invalidate types at the end if we fail to
18005         lookup all types.  
18006
18007 2002-09-09  Martin Baulig  <martin@gnome.org>
18008
18009         * ecore.cs (PropertyExpr.Emit): Also check for
18010         TypeManager.system_int_array_get_length so this'll also work when
18011         compiling corlib.  Fixes #30003.
18012
18013 2002-09-09  Martin Baulig  <martin@gnome.org>
18014
18015         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
18016         and throw an exception if we can't get the type's size.  Fixed #30040,
18017         added test-165.cs.
18018
18019 2002-09-09  Martin Baulig  <martin@gnome.org>
18020
18021         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
18022
18023         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
18024         context.  Fixes bug #30027.
18025
18026         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
18027         virtual functions.  Fixes bug #30043, added test-164.cs.
18028
18029 2002-09-08  Ravi Pratap  <ravi@ximian.com>
18030
18031         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
18032
18033 2002-09-08  Nick Drochak  <ndrochak@gol.com>
18034
18035         * driver.cs: Use an object to get the windows codepage since it's not a
18036         static property.
18037
18038 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
18039
18040         * statement.cs (For.Emit): for infinite loops (test == null)
18041         return whether there is a break inside, not always "true".
18042
18043         * namespace.cs (UsingEntry): New struct to hold the name of the
18044         using definition, the location where it is defined, and whether it
18045         has been used in a successful type lookup.
18046
18047         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
18048         strings.
18049
18050         * decl.cs: ditto.
18051
18052 2002-09-06  Ravi Pratap  <ravi@ximian.com>
18053
18054         * attribute.cs : Fix incorrect code which relied on catching
18055         a NullReferenceException to detect a null being passed in
18056         where an object was expected.
18057
18058 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
18059
18060         * statement.cs (Try): flag the catch variable as assigned
18061
18062         * expression.cs (Cast): Simplified by using ResolveType instead of
18063         manually resolving.
18064
18065         * statement.cs (Catch): Fix bug by using ResolveType.
18066
18067 2002-09-06  Ravi Pratap  <ravi@ximian.com>
18068
18069         * expression.cs (BetterConversion): Special case for when we have
18070         a NullLiteral as the argument and we have to choose between string
18071         and object types - we choose string the way csc does.
18072
18073         * attribute.cs (Attribute.Resolve): Catch the
18074         NullReferenceException and report error #182 since the Mono
18075         runtime no more has the bug and having this exception raised means
18076         we tried to select a constructor which takes an object and is
18077         passed a null.
18078
18079 2002-09-05  Ravi Pratap  <ravi@ximian.com>
18080
18081         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
18082         message (1502, 1503) when we can't locate a method after overload
18083         resolution. This is much more informative and closes the bug
18084         Miguel reported.
18085
18086         * interface.cs (PopulateMethod): Return if there are no argument
18087         types. Fixes a NullReferenceException bug.
18088
18089         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
18090         expressions too. Previously we were checking only in one place for
18091         positional arguments leaving out named arguments.
18092
18093         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
18094         type to the enum type is not allowed. Remove code corresponding to
18095         that.
18096
18097         (ConvertNumericExplicit): Allow explicit conversions from
18098         the underlying type to enum type. This precisely follows the spec
18099         and closes a bug filed by Gonzalo.
18100
18101 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18102
18103         * compiler.csproj:
18104         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
18105
18106 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
18107
18108         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
18109         it was important that we stored the right value after the
18110         reduction in `converted'.
18111
18112 2002-09-04  Martin Baulig  <martin@gnome.org>
18113
18114         * location.cs (Location.SymbolDocument): Use full pathnames for the
18115         source files.
18116
18117 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
18118
18119         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
18120         of the expression resolve mechanism, because that will catch the
18121         SimpleName error failures.
18122
18123         (Conditional): If we can not resolve the
18124         expression, return, do not crash.
18125
18126 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18127
18128         * cs-tokenizer.cs:
18129         (location): display token name instead of its number.
18130
18131 2002-08-28  Martin Baulig  <martin@gnome.org>
18132
18133         * expression.cs (Binary.ResolveOperator): Don't silently return
18134         but return an error if an operator cannot be applied between two
18135         enum types.
18136
18137 2002-08-28  Martin Baulig  <martin@gnome.org>
18138
18139         * class.cs (Constructor.Define): Set the permission attributes
18140         correctly instead of making all constructors public.
18141
18142 2002-08-28  Martin Baulig  <martin@gnome.org>
18143
18144         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
18145         for private members before reporting a CS0103; if we find anything,
18146         it's a CS0122.
18147
18148 2002-08-28  Martin Baulig  <martin@gnome.org>
18149
18150         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
18151         to check whether `closure_start_type == closure_invocation_type',
18152         we also need to check whether `m.DeclaringType == closure_invocation_type'
18153         before bypassing the permission checks.  We might be accessing
18154         protected/private members from the base class.
18155         (TypeManager.RealMemberLookup): Only set private_ok if private
18156         members were requested via BindingFlags.NonPublic.
18157
18158         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
18159
18160         * expression.cs (MemberAccess.ResolveMemberAccess): Set
18161         MethodGroupExpr.IsExplicitImpl if appropriate.
18162         (Invocation.DoResolve): Don't report the CS0120 for explicit
18163         interface implementations.
18164
18165 2002-08-27  Martin Baulig  <martin@gnome.org>
18166
18167         * expression.cs (Invocation.DoResolve): If this is a static
18168         method and we don't have an InstanceExpression, we must report
18169         a CS0120.
18170
18171 2002-08-25  Martin Baulig  <martin@gnome.org>
18172
18173         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
18174         `==' between a valuetype and an object.
18175
18176 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
18177
18178         * ecore.cs (TypeExpr): Provide a ToString method.
18179
18180 2002-08-24  Martin Baulig  <martin@gnome.org>
18181
18182         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
18183         now called proggie.dbg and it's a binary file.
18184
18185 2002-08-23  Martin Baulig  <martin@gnome.org>
18186
18187         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
18188
18189 2002-08-23  Martin Baulig  <martin@gnome.org>
18190
18191         * struct.cs (MyStructInfo.ctor): Make this work with empty
18192         structs; it's not allowed to use foreach() on null.
18193
18194 2002-08-23  Martin Baulig  <martin@gnome.org>
18195
18196         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
18197         writer the full pathname of the generated assembly.
18198
18199 2002-08-23  Martin Baulig  <martin@gnome.org>
18200
18201         * statements.cs (FlowBranching.UsageVector.MergeChildren):
18202         A `finally' block never returns or breaks; improved handling of
18203         unreachable code.
18204
18205 2002-08-23  Martin Baulig  <martin@gnome.org>
18206
18207         * statement.cs (Throw.Resolve): Allow `throw null'.
18208
18209 2002-08-23  Martin Baulig  <martin@gnome.org>
18210
18211         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
18212         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
18213         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
18214         MemberLookup would return a wrong event if this is an explicit
18215         interface implementation and the class has an event with the same
18216         name.
18217
18218 2002-08-23  Martin Baulig  <martin@gnome.org>
18219
18220         * statement.cs (Block.AddChildVariableNames): New public method.
18221         (Block.AddChildVariableName): Likewise.
18222         (Block.IsVariableNameUsedInChildBlock): Likewise.
18223         (Block.AddVariable): Check whether a variable name has already
18224         been used in a child block.
18225
18226         * cs-parser.jay (declare_local_variables): Mark all variable names
18227         from the current block as being used in a child block in the
18228         implicit block.
18229
18230 2002-08-23  Martin Baulig  <martin@gnome.org>
18231
18232         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
18233         find the symbol writer.
18234
18235         * driver.cs: csc also allows the arguments to /define being
18236         separated by commas, not only by semicolons.
18237
18238 2002-08-23  Martin Baulig  <martin@gnome.org>
18239
18240         * interface.cs (Interface.GetMembers): Added static check for events.
18241
18242 2002-08-15  Martin Baulig  <martin@gnome.org>
18243
18244         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
18245         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
18246
18247         * ecore.cs (Expression.MemberLookup): Added documentation and explained
18248         why the MethodData.EmitDestructor() change was necessary.
18249
18250 2002-08-20  Martin Baulig  <martin@gnome.org>
18251
18252         * class.cs (TypeContainer.FindMembers): Added static check for events.
18253
18254         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
18255
18256         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
18257         use Type.GetEvents(), not Type.FindMembers().
18258
18259 2002-08-20  Martin Baulig  <martin@gnome.org>
18260
18261         * decl.cs (MemberCache): Added a special method cache which will
18262         be used for method-only searched.  This ensures that a method
18263         search will return a MethodInfo with the correct ReflectedType for
18264         inherited methods.      
18265
18266 2002-08-20  Martin Baulig  <martin@gnome.org>
18267
18268         * decl.cs (DeclSpace.FindMembers): Made this public.
18269
18270 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18271
18272         * delegate.cs: fixed build on windows.
18273         [FIXME:  Filed as bug #29150: MCS must report these errors.]
18274
18275 2002-08-19  Ravi Pratap  <ravi@ximian.com>
18276
18277         * ecore.cs (StandardConversionExists): Return a false
18278         if we are trying to convert the void type to anything else
18279         since that is not allowed.
18280
18281         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
18282         we flag error 70 in the event an event is trying to be accessed
18283         directly from outside the declaring type.
18284
18285 2002-08-20  Martin Baulig  <martin@gnome.org>
18286
18287         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
18288         MemberCache from typemanager.cs to decl.cs.
18289
18290 2002-08-19  Martin Baulig  <martin@gnome.org>
18291
18292         * class.cs (TypeContainer): Implement IMemberContainer.
18293         (TypeContainer.DefineMembers): Create the MemberCache.
18294         (TypeContainer.FindMembers): Do better BindingFlags checking; only
18295         return public members if BindingFlags.Public was given, check
18296         whether members are static.
18297
18298 2002-08-16  Martin Baulig  <martin@gnome.org>
18299
18300         * decl.cs (DeclSpace.Define): Splitted this in Define and
18301         DefineMembers.  DefineMembers is called first and initializes the
18302         MemberCache.
18303
18304         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
18305         DefineMembers() on all our DeclSpaces.
18306
18307         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
18308         but call DefineMembers() on all nested interfaces.  We call their
18309         Define() in our new Define() function.
18310
18311         * interface.cs (Interface): Implement IMemberContainer.
18312         (Interface.Define): Moved all code except the attribute stuf to
18313         DefineMembers().
18314         (Interface.DefineMembers): Initialize the member cache.
18315
18316         * typemanager.cs (IMemberFinder): Removed this interface, we don't
18317         need this anymore since we can use MemberCache.FindMembers directly.
18318
18319 2002-08-19  Martin Baulig  <martin@gnome.org>
18320
18321         * typemanager.cs (MemberCache): When creating the cache for an
18322         interface type, add all inherited members.
18323         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
18324         to `out bool used_cache' and documented it.
18325         (TypeManager.MemberLookup): If we already used the cache in the first
18326         iteration, we don't need to do the interfaces check.
18327
18328 2002-08-19  Martin Baulig  <martin@gnome.org>
18329
18330         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
18331         here from IMemberFinder and don't implement this interface anymore.
18332         (DeclSpace.MemberCache): Moved here from IMemberFinder.
18333
18334         * typemanager.cs (IMemberFinder): This interface is now only used by
18335         classes which actually support the member cache.
18336         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
18337         since we only put DeclSpaces into this Hashtable.
18338         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
18339         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
18340
18341 2002-08-16  Martin Baulig  <martin@gnome.org>
18342
18343         * typemanager.cs (ICachingMemberFinder): Removed.
18344         (IMemberFinder.MemberCache): New property.
18345         (TypeManager.FindMembers): Merged this with RealFindMembers().
18346         This function will never be called from TypeManager.MemberLookup()
18347         so we can't use the cache here, just the IMemberFinder.
18348         (TypeManager.MemberLookup_FindMembers): Check whether the
18349         IMemberFinder has a MemberCache and call the cache's FindMembers
18350         function.
18351         (MemberCache): Rewrote larger parts of this yet another time and
18352         cleaned it up a bit.
18353
18354 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
18355
18356         * driver.cs (LoadArgs): Support quoting.
18357
18358         (Usage): Show the CSC-like command line arguments.
18359
18360         Improved a few error messages.
18361
18362 2002-08-15  Martin Baulig  <martin@gnome.org>
18363
18364         * typemanager.cs (IMemberContainer.Type): New property.
18365         (IMemberContainer.IsInterface): New property.
18366
18367         The following changes are conditional to BROKEN_RUNTIME, which is
18368         defined at the top of the file.
18369
18370         * typemanager.cs (MemberCache.MemberCache): Don't add the base
18371         class'es members, but add all members from TypeHandle.ObjectType
18372         if we're an interface.
18373         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
18374         is the current type.
18375         (MemberCache.CacheEntry.Container): Removed this field.
18376         (TypeHandle.GetMembers): Include inherited members.
18377
18378 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18379
18380         * typemanager.cs: fixed compilation and added a comment on a field that
18381         is never used.
18382
18383 2002-08-15  Martin Baulig  <martin@gnome.org>
18384
18385         * class.cs (ConstructorInitializer.Resolve): In the
18386         Expression.MemberLookup call, use the queried_type as
18387         invocation_type.
18388
18389         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
18390         declared' attribute, it's always true.
18391         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
18392         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
18393         temporary wrapper for FindMembers which tells MemberLookup whether
18394         members from the base classes are included in the return value.
18395         This will go away soon.
18396         (TypeManager.MemberLookup): Use this temporary hack here; once the
18397         new MemberCache is completed, we don't need to do the DeclaredOnly
18398         looping here anymore since the MemberCache will take care of this.
18399         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
18400         (MemberCache): When creating the MemberCache for a class, get
18401         members from the current class and all its base classes.
18402         (MemberCache.CacheEntry.Container): New field.  This is a
18403         temporary hack until the Mono runtime is fixed to distinguish
18404         between ReflectedType and DeclaringType.  It allows us to use MCS
18405         with both the MS runtime and the unfixed Mono runtime without
18406         problems and without accecting performance.
18407         (MemberCache.SearchMembers): The DeclaredOnly looping from
18408         TypeManager.MemberLookup is now done here.      
18409
18410 2002-08-14  Martin Baulig  <martin@gnome.org>
18411
18412         * statement.cs (MyStructInfo.MyStructInfo): Don't call
18413         Type.GetFields on dynamic types but get the fields from the
18414         corresponding TypeContainer.
18415         (MyStructInfo.GetStructInfo): Added check for enum types.
18416
18417         * typemanager.cs (MemberList.IsSynchronized): Implemented.
18418         (MemberList.SyncRoot): Implemented.
18419         (TypeManager.FilterWithClosure): No need to check permissions if
18420         closure_start_type == closure_invocation_type, don't crash if
18421         closure_invocation_type is null.
18422
18423 2002-08-13  Martin Baulig  <martin@gnome.org>
18424
18425         Rewrote TypeContainer.FindMembers to use a member cache.  This
18426         gives us a speed increase of about 35% for the self-hosting MCS
18427         build and of about 15-20% for the class libs (both on GNU/Linux).
18428
18429         * report.cs (Timer): New class to get enhanced profiling.  This
18430         whole class is "TIMER" conditional since it remarkably slows down
18431         compilation speed.
18432
18433         * class.cs (MemberList): New class.  This is an IList wrapper
18434         which we're now using instead of passing MemberInfo[]'s around to
18435         avoid copying this array unnecessarily.
18436         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
18437         (ICachingMemberFinder, IMemberContainer): New interface.
18438         (TypeManager.FilterWithClosure): If `criteria' is null, the name
18439         has already been checked, otherwise use it for the name comparision.
18440         (TypeManager.FindMembers): Renamed to RealMemberFinder and
18441         provided wrapper which tries to use ICachingMemberFinder.FindMembers
18442         if possible.  Returns a MemberList, not a MemberInfo [].
18443         (TypeHandle): New class, implements IMemberContainer.  We create
18444         one instance of this class per type, it contains a MemberCache
18445         which is used to do the member lookups.
18446         (MemberCache): New class.  Each instance of this class contains
18447         all members of a type and a name-based hash table.
18448         (MemberCache.FindMembers): This is our new member lookup
18449         function.  First, it looks up all members of the requested name in
18450         the hash table.  Then, it walks this list and sorts out all
18451         applicable members and returns them.
18452
18453 2002-08-13  Martin Baulig  <martin@gnome.org>
18454
18455         In addition to a nice code cleanup, this gives us a performance
18456         increase of about 1.4% on GNU/Linux - not much, but it's already
18457         half a second for the self-hosting MCS compilation.
18458
18459         * typemanager.cs (IMemberFinder): New interface.  It is used by
18460         TypeManager.FindMembers to call FindMembers on a TypeContainer,
18461         Enum, Delegate or Interface.
18462         (TypeManager.finder_to_member_finder): New PtrHashtable.
18463         (TypeManager.finder_to_container): Removed.
18464         (TypeManager.finder_to_delegate): Removed.
18465         (TypeManager.finder_to_interface): Removed.
18466         (TypeManager.finder_to_enum): Removed.
18467
18468         * interface.cs (Interface): Implement IMemberFinder.
18469
18470         * delegate.cs (Delegate): Implement IMemberFinder.
18471
18472         * enum.cs (Enum): Implement IMemberFinder.
18473
18474         * class.cs (TypeContainer): Implement IMemberFinder.
18475
18476 2002-08-12  Martin Baulig  <martin@gnome.org>
18477
18478         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
18479
18480 2002-08-12  Martin Baulig  <martin@gnome.org>
18481
18482         * ecore.cs (ITypeExpression): New interface for expressions which
18483         resolve to a type.
18484         (TypeExpression): Renamed to TypeLookupExpression.
18485         (Expression.DoResolve): If we're doing a types-only lookup, the
18486         expression must implement the ITypeExpression interface and we
18487         call DoResolveType() on it.
18488         (SimpleName): Implement the new ITypeExpression interface.
18489         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
18490         hack, the situation that we're only looking up types can't happen
18491         anymore when this method is called.  Moved the type lookup code to
18492         DoResolveType() and call it.
18493         (SimpleName.DoResolveType): This ITypeExpression interface method
18494         is now doing the types-only lookup.
18495         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
18496         (ResolveFlags): Added MaskExprClass.
18497
18498         * expression.cs (MemberAccess): Implement the ITypeExpression
18499         interface.
18500         (MemberAccess.DoResolve): Added support for a types-only lookup
18501         when we're called via ITypeExpression.DoResolveType().
18502         (ComposedCast): Implement the ITypeExpression interface.
18503
18504         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
18505         Expression.Resolve() with ResolveFlags.Type instead.
18506
18507 2002-08-12  Martin Baulig  <martin@gnome.org>
18508
18509         * interface.cs (Interface.Define): Apply attributes.
18510
18511         * attribute.cs (Attribute.ApplyAttributes): Added support for
18512         interface attributes.
18513
18514 2002-08-11  Martin Baulig  <martin@gnome.org>
18515
18516         * statement.cs (Block.Emit): Only check the "this" variable if we
18517         do not always throw an exception.
18518
18519         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
18520         whether the property has a set accessor.
18521
18522 2002-08-11  Martin Baulig  <martin@gnome.org>
18523
18524         Added control flow analysis support for structs.
18525
18526         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
18527         with control flow analysis turned off.
18528         (IVariable): New interface.
18529         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
18530         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
18531         (FieldExpr.DoResolve): Resolve the instance expression with flow
18532         analysis turned off and do the definite assignment check after the
18533         resolving when we know what the expression will resolve to.
18534
18535         * expression.cs (LocalVariableReference, ParameterReference):
18536         Implement the new IVariable interface, only call the flow analysis
18537         code if ec.DoFlowAnalysis is true.
18538         (This): Added constructor which takes a Block argument.  Implement
18539         the new IVariable interface.
18540         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
18541         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
18542         This does the definite assignment checks for struct members.
18543
18544         * class.cs (Constructor.Emit): If this is a non-static `struct'
18545         constructor which doesn't have any initializer, call
18546         Block.AddThisVariable() to tell the flow analysis code that all
18547         struct elements must be initialized before control returns from
18548         the constructor.
18549
18550         * statement.cs (MyStructInfo): New public class.
18551         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
18552         argument to this indexer.  If non-zero, check an individual struct
18553         member, not the whole struct.
18554         (FlowBranching.CheckOutParameters): Check struct members.
18555         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
18556         overloaded versions of these methods which take an additional
18557         `int field_idx' argument to check struct members.
18558         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
18559         overloaded versions of these methods which take an additional
18560         `string field_name' argument to check struct member.s
18561         (VariableInfo): Implement the IVariable interface.
18562         (VariableInfo.StructInfo): New public property.  Returns the
18563         MyStructInfo instance of the variable if it's a struct or null.
18564         (Block.AddThisVariable): New public method.  This is called from
18565         Constructor.Emit() for non-static `struct' constructor which do
18566         not have any initializer.  It creates a special variable for the
18567         "this" instance variable which will be checked by the flow
18568         analysis code to ensure that all of the struct's fields are
18569         initialized before control returns from the constructor.
18570         (UsageVector): Added support for struct members.  If a
18571         variable/parameter is a struct with N members, we reserve a slot
18572         in the usage vector for each member.  A struct is considered fully
18573         initialized if either the struct itself (slot 0) or all its
18574         members are initialized.
18575
18576 2002-08-08  Martin Baulig  <martin@gnome.org>
18577
18578         * driver.cs (Driver.MainDriver): Only report an error CS5001
18579         if there were no compilation errors.
18580
18581         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
18582         `UnsafeContext' property to determine whether the parent is in
18583         unsafe context rather than checking the parent's ModFlags:
18584         classes nested in an unsafe class are unsafe as well.
18585
18586 2002-08-08  Martin Baulig  <martin@gnome.org>
18587
18588         * statement.cs (UsageVector.MergeChildren): Distinguish between
18589         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
18590         we return.  Added test17() and test18() to test-154.cs.
18591
18592 2002-08-08  Martin Baulig  <martin@gnome.org>
18593
18594         * typemanager.cs (TypeManager.FilterWithClosure): If we have
18595         Family access, make sure the invoking type isn't a subclass of the
18596         queried type (that'd be a CS1540).
18597
18598         * ecore.cs (Expression.MemberLookup): Added overloaded version of
18599         this method which takes an additional `Type invocation_type'.
18600
18601         * expression.cs (BaseAccess.DoResolve): Use the base type as
18602         invocation and query type.
18603         (MemberAccess.DoResolve): If the lookup failed and we're about to
18604         report a CS0122, try a lookup with the ec.ContainerType - if this
18605         succeeds, we must report a CS1540.
18606
18607 2002-08-08  Martin Baulig  <martin@gnome.org>
18608
18609         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
18610         (MethodGroupExpr): Implement the IMemberExpr interface.
18611
18612         * expression (MemberAccess.ResolveMemberAccess): No need to have
18613         any special code for MethodGroupExprs anymore, they're now
18614         IMemberExprs.   
18615
18616 2002-08-08  Martin Baulig  <martin@gnome.org>
18617
18618         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
18619         Family, FamANDAssem and FamORAssem permissions.
18620         (TypeManager.IsSubclassOrNestedChildOf): New public method.
18621
18622 2002-08-08  Martin Baulig  <martin@gnome.org>
18623
18624         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
18625         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
18626         or loop block.
18627
18628 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
18629
18630         * driver.cs: implemented /resource option to embed managed resources.
18631
18632 2002-08-07  Martin Baulig  <martin@gnome.org>
18633
18634         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
18635         (FieldBase.HasFieldInitializer): New public property.
18636         (FieldBase.GetInitializerExpression): New public method.  Resolves and
18637         returns the field initializer and makes sure it is only resolved once.
18638         (TypeContainer.EmitFieldInitializers): Call
18639         FieldBase.GetInitializerExpression to get the initializer, this ensures
18640         that it isn't resolved multiple times.
18641
18642         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
18643         the resolving process (SimpleName/MemberLookup) that we're currently
18644         emitting a field initializer (which must not access any instance members,
18645         this is an error CS0236).
18646
18647         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
18648         argument, if the `IsFieldInitializer' flag is set, we must report and
18649         error CS0236 and not an error CS0120.   
18650
18651 2002-08-07  Martin Baulig  <martin@gnome.org>
18652
18653         * ecore.cs (IMemberExpr): New public interface.
18654         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
18655         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
18656         if the expression is an IMemberExpr.
18657
18658         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
18659         to be null, implicitly default to `this' if we're non-static in
18660         this case.  Simplified the code a lot by using the new IMemberExpr
18661         interface.  Also fixed bug #28176 here.
18662
18663 2002-08-06  Martin Baulig  <martin@gnome.org>
18664
18665         * cs-parser.jay (SimpleLookup): Removed.  We need to create
18666         ParameterReferences during semantic analysis so that we can do a
18667         type-only search when resolving Cast, TypeOf and SizeOf.
18668         (block): Pass the `current_local_parameters' to the Block's
18669         constructor.
18670
18671         * class.cs (ConstructorInitializer): Added `Parameters parameters'
18672         argument to the constructor.
18673         (ConstructorInitializer.Resolve): Create a temporary implicit
18674         block with the parameters.
18675
18676         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
18677         references here if we aren't doing a type-only search.
18678
18679         * statement.cs (Block): Added constructor which takes a
18680         `Parameters parameters' argument.
18681         (Block.Parameters): New public property.
18682
18683         * support.cs (InternalParameters.Parameters): Renamed `parameters'
18684         to `Parameters' and made it public readonly.
18685
18686 2002-08-06  Martin Baulig  <martin@gnome.org>
18687
18688         * ecore.cs (Expression.Warning): Made this public as well.
18689
18690         * report.cs (Report.Debug): Print the contents of collections.
18691
18692 2002-08-06  Martin Baulig  <martin@gnome.org>
18693
18694         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
18695         used to tell Resolve() which kinds of expressions it may return.
18696         (Expression.Resolve): Added overloaded version of this method which
18697         takes a `ResolveFlags flags' argument.  This can be used to tell
18698         Resolve() which kinds of expressions it may return.  Reports a
18699         CS0118 on error.
18700         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
18701         ResolveFlags.SimpleName.
18702         (Expression.Error118): Added overloaded version of this method which
18703         takes a `ResolveFlags flags' argument.  It uses the flags to determine
18704         which kinds of expressions are allowed.
18705
18706         * expression.cs (Argument.ResolveMethodGroup): New public method.
18707         Resolves an argument, but allows a MethodGroup to be returned.
18708         This is used when invoking a delegate.
18709
18710         * TODO: Updated a bit.
18711
18712 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18713
18714         Fixed compilation with csc.
18715
18716         * ecore.cs: Expression.Error made public. Is this correct? Should
18717         Warning be made public too?
18718
18719         * expression.cs: use ea.Location instead of ea.loc.
18720         [FIXME:  Filed as bug #28607: MCS must report these errors.]
18721
18722 2002-08-06  Martin Baulig  <martin@gnome.org>
18723
18724         * ecore.cs (Expression.loc): Moved the location here instead of
18725         duplicating it in all derived classes.
18726         (Expression.Location): New public property.
18727         (Expression.Error, Expression.Warning): Made them non-static and
18728         removed the location argument.
18729         (Expression.Warning): Added overloaded version which takes an
18730         `int level' argument.
18731         (Expression.Error118): Make this non-static and removed the
18732         expression and location arguments.
18733         (TypeExpr): Added location argument to the constructor.
18734
18735         * expression.cs (StaticCallExpr): Added location argument to
18736         the constructor.
18737         (Indirection, PointerArithmetic): Likewise.
18738         (CheckedExpr, UnCheckedExpr): Likewise.
18739         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
18740         (StringPtr): Likewise.
18741
18742
18743 2002-08-05  Martin Baulig  <martin@gnome.org>
18744
18745         * expression.cs (BaseAccess.DoResolve): Actually report errors.
18746
18747         * assign.cs (Assign.DoResolve): Check whether the source
18748         expression is a value or variable.
18749
18750         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
18751         while resolving the corresponding blocks.
18752
18753         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
18754         an error, don't silently return null.
18755
18756         * statement.cs (Block.AddVariable): Do the error reporting here
18757         and distinguish between CS0128 and CS0136.
18758         (Block.DoResolve): Report all unused labels (warning CS0164).
18759         (LabeledStatement): Pass the location to the constructor.
18760         (LabeledStatement.HasBeenReferenced): New property.
18761         (LabeledStatement.Resolve): Set it to true here.
18762
18763         * statement.cs (Return.Emit): Return success even after reporting
18764         a type mismatch error (CS0126 or CS0127), this is what csc does and
18765         it avoids confusing the users with any consecutive errors.
18766
18767 2002-08-05  Martin Baulig  <martin@gnome.org>
18768
18769         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
18770
18771         * const.cs (Const.LookupConstantValue): Catch circular definitions.
18772
18773         * expression.cs (MemberAccess.DoResolve): Silently return if an
18774         error has already been reported.
18775
18776         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
18777         error has already been reported.
18778
18779 2002-08-05  Martin Baulig  <martin@gnome.org>
18780
18781         * statement.cs (UsageVector): Only initialize the `parameters'
18782         vector if we actually have any "out" parameters.
18783
18784 2002-08-05  Martin Baulig  <martin@gnome.org>
18785
18786         * expression.cs (Binary.ResolveOperator): When combining delegates,
18787         they must have the same type.
18788
18789 2002-08-05  Martin Baulig  <martin@gnome.org>
18790
18791         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
18792         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
18793         work with the ms runtime and we also don't need it: if we're a
18794         PropertyBuilder and not in the `indexer_arguments' hash, then we
18795         are a property and not an indexer.
18796
18797         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
18798         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
18799         since the latter one doesn't work with the ms runtime.
18800
18801 2002-08-03  Martin Baulig  <martin@gnome.org>
18802
18803         Fixed bugs #27998 and #22735.
18804
18805         * class.cs (Method.IsOperator): New public field.
18806         (Method.CheckBase): Report CS0111 if there's already a method
18807         with the same parameters in the current class.  Report CS0508 when
18808         attempting to change the return type of an inherited method.
18809         (MethodData.Emit): Report CS0179 if a method doesn't have a body
18810         and it's not marked abstract or extern.
18811         (PropertyBase): New abstract base class for Property and Indexer.
18812         (PropertyBase.CheckBase): Moved here from Property and made it work
18813         for indexers.
18814         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
18815         the same so we can reuse it there.
18816         (Property, Indexer): Derive from PropertyBase.
18817         (MethodSignature.inheritable_property_signature_filter): New delegate
18818         to find properties and indexers.
18819
18820         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
18821         argument and improved error reporting.
18822
18823         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
18824         EmptyReadOnlyParameters and made it a property.
18825
18826         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
18827         version of this method which takes a `PropertyInfo indexer'.
18828         (TypeManager.RegisterIndexer): New method.
18829
18830         * class.cs: Added myself as author of this file :-)
18831
18832 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18833
18834         * class.cs: fixed compilation on windoze.
18835
18836 2002-08-03  Martin Baulig  <martin@gnome.org>
18837
18838         * interface.cs (Interface.GetInterfaceBases): Check whether all
18839         base interfaces are at least as accessible than the current one.
18840
18841         * class.cs (TypeContainer.GetClassBases): Check whether base types
18842         are at least as accessible than the current type.
18843         (TypeContainer.AsAccessible): Implemented and made non-static.
18844         (MemberBase.CheckParameters): Report errors if the accessibility
18845         checks fail.
18846
18847         * delegate.cs (Delegate.Delegate): The default visibility is
18848         internal for top-level types and private for nested types.
18849         (Delegate.Define): Report errors if the accessibility checks fail.
18850
18851         * enum.cs (Enum.Enum): The default visibility is internal for
18852         top-level types and private for nested types.
18853         (Enum.DefineType): Compute the correct visibility.
18854
18855         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
18856         function which takes a `bool is_toplevel' instead of a TypeContainer.
18857
18858         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
18859         builtin type.
18860
18861 2002-08-02  Martin Baulig  <martin@gnome.org>
18862
18863         * expression.cs (LocalVariableReferenc): Added constructor which
18864         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
18865         (LocalVariableReference.IsReadOnly): New property.
18866         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
18867         variable is readonly, use our own readonly flag to do this; you can
18868         use the new constructor to get a writable reference to a read-only
18869         variable.
18870
18871         * cs-parser.jay (foreach_statement, using_statement): Get a writable
18872         reference to the local variable.
18873
18874 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
18875
18876         * rootcontext.cs (ResolveCore): Also include System.Exception
18877
18878         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
18879         we reach an EmptyStatement.
18880
18881         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
18882         is also fine.
18883
18884         * expression.cs (Binary.ResolveOperator): Check error result in
18885         two places.
18886
18887         use brtrue/brfalse directly and avoid compares to null.
18888
18889 2002-08-02  Martin Baulig  <martin@gnome.org>
18890
18891         * class.cs (TypeContainer.Define): Define all nested interfaces here.
18892         Fixes bug #28407, added test-155.cs.
18893
18894 2002-08-01  Martin Baulig  <martin@gnome.org>
18895
18896         * class.cs (Event.EmitDefaultMethod): Make this work with static
18897         events.  Fixes #28311, added verify-3.cs.
18898
18899 2002-08-01  Martin Baulig  <martin@gnome.org>
18900
18901         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
18902         `is_disposable' fields.
18903         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
18904         `hm.is_disposable' if we're using the collection pattern.
18905         (Foreach.EmitCollectionForeach): Use the correct type for the
18906         enumerator's local variable, only emit the try/finally block if
18907         necessary (fixes #27713).
18908
18909 2002-08-01  Martin Baulig  <martin@gnome.org>
18910
18911         * ecore.cs (Expression.report118): Renamed to Error118 and made
18912         it public static.
18913
18914         * statement.cs (Throw.Resolve): Check whether the expression is of
18915         the correct type (CS0118) and whether the type derives from
18916         System.Exception (CS0155).
18917         (Catch.Resolve): New method.  Do the type lookup here and check
18918         whether it derives from System.Exception (CS0155).
18919         (Catch.CatchType, Catch.IsGeneral): New public properties.
18920
18921         * typemanager.cs (TypeManager.exception_type): Added.
18922
18923 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
18924
18925         * driver.cs: Updated About function.
18926
18927 2002-07-31  Martin Baulig  <martin@gnome.org>
18928
18929         Implemented Control Flow Analysis.
18930
18931         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
18932         (EmitContext.CurrentBranching): Added.
18933         (EmitContext.StartFlowBranching): Added.
18934         (EmitContext.EndFlowBranching): Added.
18935         (EmitContext.KillFlowBranching): Added.
18936         (EmitContext.IsVariableAssigned): Added.
18937         (EmitContext.SetVariableAssigned): Added.
18938         (EmitContext.IsParameterAssigned): Added.
18939         (EmitContext.SetParameterAssigned): Added.
18940         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
18941         Added control flow analysis stuff here.
18942
18943         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
18944         resolve the expression as lvalue.
18945         (LocalVariableReference.DoResolve): Check whether the variable has
18946         already been assigned.
18947         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
18948         the parameter as assigned here.
18949         (ParameterReference.DoResolve): Check whether the parameter has already
18950         been assigned.
18951         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
18952         expression as lvalue.
18953
18954         * statement.cs (FlowBranching): New class for the flow analysis code.
18955         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
18956         (LabeledStatement.IsDefined): New public property.
18957         (LabeledStatement.AddUsageVector): New public method to tell flow
18958         analyis that the label may be reached via a forward jump.
18959         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
18960         flow analysis.
18961         (VariableInfo.Number): New public field.  This is used by flow analysis
18962         to number all locals of a block.
18963         (Block.CountVariables): New public property.  This is the number of
18964         local variables in this block (including the locals from all parent
18965         blocks).
18966         (Block.EmitMeta): Number all the variables.
18967
18968         * statement.cs: Added flow analysis support to all classes.
18969
18970 2002-07-31  Martin Baulig  <martin@gnome.org>
18971
18972         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
18973         To get debugging messages, compile mcs with /define:MCS_DEBUG and
18974         then use this argument.
18975
18976         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
18977
18978         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
18979         use this to specify /define options.
18980
18981 2002-07-29  Martin Baulig  <martin@gnome.org>
18982
18983         * statement.cs (Fixed): Moved all code that does variable lookups
18984         and resolvings from Emit to Resolve.
18985
18986         * statement.cs (For): Moved all code that does variable lookups
18987         and resolvings from Emit to Resolve.
18988
18989         * statement.cs (Using): Moved all code that does variable lookups
18990         and resolvings from Emit to Resolve.
18991
18992 2002-07-29  Martin Baulig  <martin@gnome.org>
18993
18994         * attribute.cs (Attribute.Resolve): Explicitly catch a
18995         System.NullReferenceException when creating the
18996         CustromAttributeBuilder and report a different warning message.
18997
18998 2002-07-29  Martin Baulig  <martin@gnome.org>
18999
19000         * support.cs (ParameterData.ParameterName): Added method to
19001         get the name of a parameter.
19002
19003         * typemanager.cs (TypeManager.IsValueType): New public method.
19004
19005 2002-07-29  Martin Baulig  <martin@gnome.org>
19006
19007         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
19008         is a flag which specifies that it's either ref or out.
19009         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
19010         the out parameter to `out Parameter.Modifier mod', also set the
19011         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
19012
19013         * support.cs (InternalParameters.ParameterModifier): Distinguish
19014         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
19015         Parameter.Modifier.ISBYREF flag if it's either ref or out.
19016
19017         * expression.cs (Argument.GetParameterModifier): Distinguish
19018         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
19019         Parameter.Modifier.ISBYREF flag if it's either ref or out.
19020
19021 2002-07-29  Martin Baulig  <martin@gnome.org>
19022
19023         * expression.cs (ParameterReference.ParameterReference): Added
19024         `Location loc' argument to the constructor.
19025
19026         * cs-parser.jay: Pass location to ParameterReference.
19027
19028 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
19029
19030         * statement.cs (Try): Initialize the location.
19031
19032         * cs-parser.jay: pass location to Try.
19033
19034         * expression.cs (Unary.Reduce): Change the prototype to return
19035         whether a constant fold could be performed or not.  The result is
19036         returned in an out parameters.  In the case of Indirection and
19037         AddressOf, we want to perform the full tests.
19038
19039 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
19040
19041         * statement.cs (Statement.Emit): Flag dead code.
19042
19043 2002-07-27  Andrew Birkett  <andy@nobugs.org>
19044
19045         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
19046
19047 2002-07-27  Martin Baulig  <martin@gnome.org>
19048
19049         * class.cs (MethodData.Define): Put back call to
19050         TypeManager.AddMethod(), accidentally commented this out.
19051
19052         * report.cs (Debug): New public method to print debugging information,
19053         this is `[Conditional ("DEBUG")]'.
19054
19055 2002-07-26  Martin Baulig  <martin@gnome.org>
19056
19057         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
19058         (switch_statement): Push the current_block to the switch_stack and
19059         pop it again when we're done with the switch.
19060         (switch_section): The new block is a child of the current_block.
19061         Fixes bug #24007, added test-152.cs.
19062
19063 2002-07-27  Martin Baulig  <martin@gnome.org>
19064
19065         * expression.cs (Invocation.EmitArguments): When calling a varargs
19066         function with only its fixed arguments, we need to pass an empty
19067         array.
19068
19069 2002-07-27  Martin Baulig  <martin@gnome.org>
19070
19071         Mono 0.13 has been released.
19072
19073 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
19074
19075         * driver.cs: Rename --resource to --linkres, because that is what
19076         we do currently, we dont support --resource yet.
19077
19078         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
19079
19080 2002-07-25  Martin Baulig  <martin@gnome.org>
19081
19082         * class.cs (MethodData): New public class.  This is a `method builder'
19083         class for a method or one accessor of a Property/Indexer/Event.
19084         (MethodData.GetMethodFlags): Moved here from MemberBase.
19085         (MethodData.ApplyAttributes): Likewise.
19086         (MethodData.ApplyObsoleteAttribute): Likewise.
19087         (MethodData.ApplyConditionalAttribute): Likewise.
19088         (MethodData.ApplyDllImportAttribute): Likewise.
19089         (MethodData.CheckAbstractAndExternal): Likewise.
19090         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
19091         (MethodData.Emit): Formerly known as Method.Emit().
19092         (MemberBase): Moved everything which was specific to a single
19093         accessor/method to MethodData.
19094         (Method): Create a new MethodData and call Define() and Emit() on it.
19095         (Property, Indexer, Event): Create a new MethodData objects for each
19096         accessor and call Define() and Emit() on them.
19097
19098 2002-07-25  Martin Baulig  <martin@gnome.org>
19099
19100         Made MethodCore derive from MemberBase to reuse the code from there.
19101         MemberBase now also checks for attributes.
19102
19103         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
19104         (MemberBase.GetMethodFlags): Moved here from class Method and marked
19105         as virtual.
19106         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
19107         `CallingConventions cc' and `Attributes opt_attrs' arguments.
19108         (MemberBase.ApplyAttributes): New virtual method; applies the
19109         attributes to a method or accessor.
19110         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
19111         (MemberBase.ApplyConditionalAttribute): Likewise.
19112         (MemberBase.ApplyDllImportAttribute): Likewise.
19113         (MemberBase.CheckAbstractAndExternal): Likewise.
19114         (MethodCore.ParameterTypes): This is now a property instead of a
19115         method, it's initialized from DoDefineParameters().
19116         (MethodCore.ParameterInfo): Removed the set accessor.
19117         (MethodCore.DoDefineParameters): New protected virtual method to
19118         initialize ParameterTypes and ParameterInfo.
19119         (Method.GetReturnType): We can now simply return the MemberType.
19120         (Method.GetMethodFlags): Override the MemberBase version and add
19121         the conditional flags.
19122         (Method.CheckBase): Moved some code from Define() here, call
19123         DoDefineParameters() here.
19124         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
19125         here to avoid some larger code duplication.
19126         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
19127         ensure that abstract and external accessors don't declare a body.
19128
19129         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
19130         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
19131         lookup in the attribute's parent classes, so we need to abort as soon
19132         as we found the first match.
19133         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
19134         the attribute has no arguments.
19135
19136         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
19137         of a Method.
19138
19139 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19140
19141         * cs-parser.jay: reverted previous patch.
19142
19143 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19144
19145         * cs-parser.jay: fixed bug #22119.
19146
19147 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19148
19149         * attribute.cs: fixed compilation. The error was:
19150         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
19151         be assigned to before control leaves the current method."
19152         [FIXME:  Filed as bug #28186: MCS must report this error.]
19153
19154 2002-07-25  Martin Baulig  <martin@gnome.org>
19155
19156         * attribute.cs (Attribute.Conditional_GetConditionName): New static
19157         method to pull the condition name ouf of a Conditional attribute.
19158         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
19159         the obsolete message and error flag out of an Obsolete attribute.
19160
19161         * class.cs (Method.GetMethodFlags): New public method to get the
19162         TypeManager.MethodFlags for this method.
19163         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
19164         private methods.
19165         (Method.Define): Get and apply the Obsolete and Conditional attributes;
19166         if we're overriding a virtual function, set the new private variable
19167         `parent_method'; call the new TypeManager.AddMethod().
19168
19169         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
19170         the MethodBuilder and the Method in a PtrHashtable.
19171         (TypeManager.builder_to_method): Added for this purpose.
19172         (TypeManager.MethodFlags): Added IsObsoleteError.
19173         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
19174         Obsolete and Conditional arguments in MethodBuilders.  If we discover
19175         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
19176         the message from the attribute.
19177
19178 2002-07-24  Martin Baulig  <martin@gnome.org>
19179
19180         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
19181         preprocessor directives, ensure that the argument to #define/#undef is
19182         exactly one identifier and that it's actually an identifier.
19183
19184         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
19185         did not work ....
19186
19187 2002-07-24  Martin Baulig  <martin@gnome.org>
19188
19189         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
19190         initialize it to TypeManager.object_type in the constructor.
19191         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
19192         of the `hm.get_current' method if we're using the collection pattern.
19193         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
19194         for the explicit conversion to make it work when we're using the collection
19195         pattern and the `Current' property has a different return type than `object'.
19196         Fixes #27713.
19197
19198 2002-07-24  Martin Baulig  <martin@gnome.org>
19199
19200         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
19201         does not match, but don't report any errors.  This method is called in
19202         order for all methods in a MethodGroupExpr until a matching method is
19203         found, so we don't want to bail out if the first method doesn't match.
19204         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
19205         matches, report the 123.  Fixes #28070.
19206
19207 2002-07-24  Martin Baulig  <martin@gnome.org>
19208
19209         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
19210         TypeManager.TypeToCoreType() to the top of the method so the
19211         following equality checks will work.  Fixes #28107.
19212
19213 2002-07-24  Martin Baulig  <martin@gnome.org>
19214
19215         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
19216         operand is of type uint, and the other operand is of type sbyte,
19217         short or int, the operands are converted to type long." -
19218         Actually do what this comment already told us.  Fixes bug #28106,
19219         added test-150.cs.
19220
19221 2002-07-24  Martin Baulig  <martin@gnome.org>
19222
19223         * class.cs (MethodBase): New abstract class.  This is now a base
19224         class for Property, Indexer and Event to avoid some code duplication
19225         in their Define() and DefineMethods() methods.
19226         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
19227         generic methods for Define() and DefineMethods().
19228         (FieldBase): Derive from MemberBase, not MemberCore.
19229         (Property): Derive from MemberBase, not MemberCore.
19230         (Property.DefineMethod): Moved all the code from this method to the
19231         new MethodBase.DefineAccessor(), just call it with appropriate
19232         argumetnts.
19233         (Property.Define): Call the new Property.DoDefine(), this does some
19234         sanity checks and we don't need to duplicate the code everywhere.
19235         (Event): Derive from MemberBase, not MemberCore.
19236         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
19237         accessors, this will also make them work with interface events.
19238         (Indexer): Derive from MemberBase, not MemberCore.
19239         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
19240         (Indexer.Define): Use the new MethodBase functions.
19241
19242         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
19243         argument to the constructor.
19244         (Interface.FindMembers): Added support for interface events.
19245         (Interface.PopluateEvent): Implemented.
19246
19247         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
19248
19249 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
19250
19251         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
19252         but this is required to check for a method name being the same as
19253         the containing class.  
19254
19255         Handle this now.
19256
19257 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19258
19259         * interface.cs: initialize variable.
19260
19261 2002-07-23  Martin Baulig  <martin@gnome.org>
19262
19263         Implemented the IndexerName attribute in interfaces.
19264
19265         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
19266         name if this is an explicit interface implementation.
19267         (Indexer.InterfaceIndexerName): New public variable.  If we're
19268         implementing an interface indexer, this is the IndexerName in that
19269         interface.  Otherwise, it's the IndexerName.
19270         (Indexer.DefineMethod): If we're implementing interface indexer,
19271         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
19272         and Pending.ImplementIndexer methods.
19273         (Indexer.Define): Also define the PropertyBuilder if we're
19274         implementing an interface indexer and this is neither an explicit
19275         interface implementation nor do the IndexerName match the one in
19276         the interface.
19277
19278         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
19279         If a method is defined here, then we always need to create a proxy
19280         for it.  This is used when implementing interface indexers.
19281         (Pending.IsInterfaceIndexer): New public method.
19282         (Pending.ImplementIndexer): New public method.
19283         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
19284         This is used when implementing interface indexers to define a proxy
19285         if necessary.
19286         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
19287         define a proxy if necessary.
19288
19289         * interface.cs (Interface.IndexerName): New public variable.
19290         (Interface.PopulateIndexer): Set the IndexerName.
19291         (Interface.DefineIndexers): New private method.  Populate all the
19292         indexers and make sure their IndexerNames match.
19293
19294         * typemanager.cs (IndexerPropertyName): Added support for interface
19295         indexers.
19296
19297 2002-07-22  Martin Baulig  <martin@gnome.org>
19298
19299         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
19300         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
19301         ret if HasReturnLabel.
19302         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
19303         variables.
19304
19305         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
19306         and set the ec.LoopBeginTryCatchLevel.
19307         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
19308         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
19309         the current ec.TryCatchLevel, the branch goes out of an exception
19310         block.  In this case, we need to use Leave and not Br.
19311
19312 2002-07-22  Martin Baulig  <martin@gnome.org>
19313
19314         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
19315         block unless the block does not always return or it is contained in
19316         another try { ... } catch { ... } block.  Fixes bug #26506.
19317         Added verify-1.cs to the test suite.
19318
19319 2002-07-22  Martin Baulig  <martin@gnome.org>
19320
19321         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
19322         then we do not always return.  Fixes bug #24985.
19323
19324 2002-07-22  Martin Baulig  <martin@gnome.org>
19325
19326         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
19327         lookup on a per-class level; ie. walk up the class hierarchy until we
19328         found at least one applicable method, then choose the best among them.
19329         Fixes bug #24463 and test-29.cs.
19330
19331 2002-07-22  Martin Baulig  <martin@gnome.org>
19332
19333         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
19334         return types of the methods.  The return type is not part of the
19335         signature and we must not check it to make the `new' modifier work.
19336         Fixes bug #27999, also added test-147.cs.
19337         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
19338
19339         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
19340         on the method's return type.
19341
19342 2002-07-21  Martin Baulig  <martin@gnome.org>
19343
19344         * assign.cs: Make this work if the rightmost source is a constant and
19345         we need to do an implicit type conversion.  Also adding a few more tests
19346         to test-38.cs which should have caught this.
19347
19348         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
19349         target in the makefile for this.  The makefile.gnu is primarily intended
19350         for end-users who don't want to debug the compiler.
19351
19352 2002-07-21  Martin Baulig  <martin@gnome.org>
19353
19354         * assign.cs: Improved the Assign class so it can now handle embedded
19355         assignments (X = Y = Z = something).  As a side-effect this'll now also
19356         consume less local variables.  test-38.cs now passes with MCS, added
19357         a few new test cases to that test.
19358
19359 2002-07-20  Martin Baulig  <martin@gnome.org>
19360
19361         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
19362         instructions.  Fixes bug #27977, also added test-146.cs.
19363
19364 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19365
19366         * cs-tokenizer.cs: fixed getHex ().
19367
19368 2002-07-19  Martin Baulig  <martin@gnome.org>
19369
19370         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
19371         not Type.GetType() to lookup the array type.  This is needed when
19372         we're constructing an array of a user-defined type.
19373         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
19374         single-dimensional arrays, but also for single-dimensial arrays of
19375         type decimal.
19376
19377 2002-07-19  Martin Baulig  <martin@gnome.org>
19378
19379         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
19380         this function is called, it's not allowed to share LocalBuilders
19381         among ILGenerators.
19382
19383 2002-07-19  Martin Baulig  <martin@gnome.org>
19384
19385         * expression.cs (Argument.Resolve): Report an error 118 when trying
19386         to pass a type as argument.
19387
19388 2002-07-18  Martin Baulig  <martin@gnome.org>
19389
19390         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
19391         Conv_R_Un for the signed `long' type.
19392
19393 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
19394
19395         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
19396         `expr' for the temporary result, as that will fail if we do
19397         multiple resolves on the same expression.
19398
19399 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
19400
19401         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
19402         ec.TypeContainer for looking up aliases. 
19403
19404         * class.cs (TypeContainer): Remove LookupAlias from here.
19405
19406         * decl.cs (DeclSpace); Move here.
19407
19408 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
19409
19410         * class.cs (FindMembers): Only call filter if the constructor
19411         bulider is not null.
19412
19413         Also handle delegates in `NestedTypes' now.  Now we will perform
19414         type lookups using the standard resolution process.  This also
19415         fixes a bug.
19416
19417         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
19418         This uses Expressions (the limited kind that can be parsed by the
19419         tree) instead of strings.
19420
19421         * expression.cs (ComposedCast.ToString): Implement, used to flag
19422         errors since now we have to render expressions.
19423
19424         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
19425         FormArrayType. 
19426
19427         * ecore.cs (SimpleName.ToString): ditto.
19428
19429         * cs-parser.jay: Instead of using strings to assemble types, use
19430         Expressions to assemble the type (using SimpleName, ComposedCast,
19431         MemberAccess).  This should fix the type lookups in declarations,
19432         because we were using a different code path for this.
19433
19434         * statement.cs (Block.Resolve): Continue processing statements
19435         even when there is an error.
19436
19437 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
19438
19439         * class.cs (Event.Define): Also remove the `remove' method from
19440         the list of pending items.
19441
19442         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
19443         generate more compact code. 
19444
19445 2002-07-17  Martin Baulig  <martin@gnome.org>
19446
19447         * const.cs (Const.LookupConstantValue): Add support for constant
19448         `unchecked' and `checked' expressions.
19449         Also adding test case test-140.cs for this.
19450
19451 2002-07-17  Martin Baulig  <martin@gnome.org>
19452
19453         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
19454         check whether mi.ReturnType implements the IEnumerator interface; the
19455         `==' and the IsAssignableFrom() will fail in this situation.
19456
19457 2002-07-16  Ravi Pratap  <ravi@ximian.com>
19458
19459         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
19460         here too.
19461
19462 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19463
19464         * expression.cs: fixed bug #27811.
19465
19466 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
19467
19468         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
19469         Molaro: when we are a ref, the value already contains a pointer
19470         value, do not take the address of it.
19471
19472 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
19473         * removed mb-parser.jay and mb-tokenizer.cs
19474
19475 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19476
19477         * expression.cs: check against the building corlib void type.
19478
19479 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
19480
19481         * ecore.cs: fix for valuetype static readonly fields: when 
19482         initializing them, we need their address, not the address of a copy.
19483
19484 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
19485
19486         * typemanager.cs: register also enum_type in corlib.
19487
19488 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19489
19490         * class.cs: allow calling this (but not base) initializers in structs.
19491
19492 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
19493
19494         * ecore.cs: make sure we compare against the building base types
19495         in GetTypeSize ().
19496
19497 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
19498
19499         * typemanager.cs: fix TypeToCoreType() to handle void and object
19500         (corlib gets no more typerefs after this change).
19501
19502 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
19503
19504         * expression.cs (ArrayCreation.EmitArrayArguments): use
19505         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
19506
19507         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
19508         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
19509         array indexes, the runtime actually forbids them.
19510
19511         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
19512         for array arguments here.
19513
19514         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
19515         instead of the default for ValueTypes.
19516
19517         (New.DoEmit): Use IsValueType instead of
19518         IsSubclassOf (value_type)
19519         (New.DoResolve): ditto.
19520         (Invocation.EmitCall): ditto.
19521
19522         * assign.cs (Assign): ditto.
19523
19524         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
19525         Statements *are* currently doing part of their resolution during
19526         Emit.  
19527
19528         Expressions do always resolve during resolve, but statements are
19529         only required to propagate resolution to their children.
19530
19531 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
19532
19533         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
19534
19535         (LoadAssembly): Do not add the dll if it is already specified
19536
19537         (MainDriver): Add the System directory to the link path at the end,
19538         after all the other -L arguments. 
19539
19540         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
19541         wrong opcode for loading bytes and bools (ldelem.i1 instead of
19542         ldelem.u1) and using the opposite for sbytes.
19543
19544         This fixes Digger, and we can finally run it.
19545
19546         * driver.cs (UnixParseOption): Move the option parsing here.  
19547         (CSCParseOption): Implement CSC-like parsing of options.
19548
19549         We now support both modes of operation, the old Unix way, and the
19550         new CSC-like way.  This should help those who wanted to make cross
19551         platform makefiles.
19552
19553         The only thing broken is that /r:, /reference: and /lib: are not
19554         implemented, because I want to make those have the same semantics
19555         as the CSC compiler has, and kill once and for all the confussion
19556         around this.   Will be doing this tomorrow.
19557
19558         * statement.cs (Unsafe.Resolve): The state is checked during
19559         resolve, not emit, so we have to set the flags for IsUnsfe here.
19560
19561 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19562
19563         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
19564         not catch the Error_ObjectRefRequired in SimpleName (as it is
19565         possible to have a class/instance variable name that later gets
19566         deambiguated), we have to check this here.      
19567
19568 2002-07-10  Ravi Pratap  <ravi@ximian.com>
19569
19570         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
19571         make static and put into Expression.
19572
19573         (Event.Define): Register the private field of the event with the 
19574         TypeManager so that GetFieldFromEvent can get at it.
19575
19576         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
19577         keep track of the private field associated with an event which
19578         has no accessors.
19579
19580         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
19581         private field.
19582
19583         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
19584
19585 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19586
19587         * expression.cs (Binary.EmitBranchable): this routine emits the
19588         Binary expression in a branchable context.  This basically means:
19589         we need to branch somewhere, not just get the value on the stack.
19590
19591         This works together with Statement.EmitBoolExpression.
19592
19593         * statement.cs (Statement.EmitBoolExpression): Use
19594         EmitBranchable. 
19595
19596 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
19597
19598         * statement.cs (For): Reduce the number of jumps in loops.
19599
19600         (For): Implement loop inversion for the For statement.
19601
19602         (Break): We can be breaking out of a Try/Catch controlled section
19603         (foreach might have an implicit try/catch clause), so we need to
19604         use Leave instead of Br.
19605
19606         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
19607         now).  If the instace expression supports IMemoryLocation, we use
19608         the AddressOf method from the IMemoryLocation to extract the
19609         address instead of emitting the instance.
19610
19611         This showed up with `This', as we were emitting the instance
19612         always (Emit) instead of the Address of This.  Particularly
19613         interesting when This is a value type, as we dont want the Emit
19614         effect (which was to load the object).
19615
19616 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
19617
19618         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
19619
19620         * statement.cs (Checked): Set the CheckedState during the resolve
19621         process too, as the ConvCast operations track the checked state on
19622         the resolve process, and not emit.
19623
19624         * cs-parser.jay (namespace_member_declaration): Flag that we have
19625         found a declaration when we do.  This is used to flag error 1529
19626
19627         * driver.cs: Report ok when we display the help only.
19628
19629 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
19630
19631         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
19632
19633 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
19634
19635         * cs-tokenizer.cs (define): We also have to track locally the
19636         defines.  AllDefines is just used for the Conditional Attribute,
19637         but we also need the local defines for the current source code. 
19638
19639 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
19640
19641         * statement.cs (While, For, Do): These loops can exit through a
19642         Break statement, use this information to tell whether the
19643         statement is the last piece of code.
19644
19645         (Break): Flag that we break.
19646
19647         * codegen.cs (EmitContexts): New `Breaks' state variable.
19648
19649 2002-07-03  Martin Baulig  <martin@gnome.org>
19650
19651         * class.cs (TypeContainer.MethodModifiersValid): Allow override
19652         modifiers in method declarations in structs.  Otherwise, you won't
19653         be able to override things like Object.Equals().
19654
19655 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19656
19657         * class.cs (Method, Property, Indexer): Do not allow the public
19658         modifier to be used in explicit interface implementations.
19659
19660         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
19661         override modifiers in method declarations in structs
19662
19663 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
19664
19665         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
19666         integer or real overflow, report an error
19667
19668 2002-07-02  Martin Baulig  <martin@gnome.org>
19669
19670         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
19671         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
19672         to tell the runtime about our newly created System.Object and
19673         System.ValueType types.
19674
19675 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19676
19677         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
19678         struct instead of Ldarg/Starg.
19679
19680 2002-07-02  Martin Baulig  <martin@gnome.org>
19681
19682         * expression.cs (Indirection.Indirection): Call
19683         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
19684
19685 2002-07-02  Martin Baulig  <martin@gnome.org>
19686
19687         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
19688         ValueType, call TypeManager.TypeToCoreType() on it.
19689         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
19690         the OpCodes.Newarr argument.
19691
19692 2002-07-02  Martin Baulig  <martin@gnome.org>
19693
19694         * expression.cs (Invocation.EmitCall): When compiling corlib,
19695         replace all calls to the system's System.Array type to calls to
19696         the newly created one.
19697
19698         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
19699         System.Array methods.
19700         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
19701         from the system's System.Array type which must be replaced.
19702
19703 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
19704
19705         * typemanager.cs: load unverifiable_code_ctor so we can build
19706         corlib using the correct type. Avoid using GetTypeCode() with
19707         TypeBuilders.
19708         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
19709         TypeManager.object_type to allow building corlib.
19710
19711 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
19712
19713         * ecore.cs: handle System.Enum separately in LoadFromPtr().
19714
19715 2002-07-01  Martin Baulig  <martin@gnome.org>
19716
19717         * class.cs: Make the last change actually work, we need to check
19718         whether `ifaces != null' to avoid a crash.
19719
19720 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19721
19722         * class.cs: when we build structs without fields that implement
19723         interfaces, we need to add the interfaces separately, since there is
19724         no API to both set the size and add the interfaces at type creation
19725         time.
19726
19727 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19728
19729         * expression.cs: the dimension arguments to the array constructors
19730         need to be converted if they are a long.
19731
19732 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
19733
19734         * class.cs: don't emit ldarg.0 if there is no parent constructor
19735         (fixes showstopper for corlib).
19736
19737 2002-06-29  Martin Baulig  <martin@gnome.org>
19738
19739         MCS now compiles corlib on GNU/Linux :-)
19740
19741         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
19742         ie. check for MethodImplOptions.InternalCall.
19743
19744         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
19745         and TypeManager.attribute_type are null, so we must explicitly check
19746         whether parent is not null to find out whether it's an attribute type.
19747         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
19748         and SetBuilder, not only if the property is neither abstract nor external.
19749         This is necessary to set the MethodImplOptions on the accessor methods.
19750         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
19751         SetBuilder, see Property.Emit().
19752
19753         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
19754         populate "System.Object", "System.ValueType" and "System.Attribute" since
19755         they've already been populated from BootCorlib_PopulateCoreTypes().
19756
19757 2002-06-29  Martin Baulig  <martin@gnome.org>
19758
19759         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
19760         is the NullLiteral, we also need to make sure that target_type is not
19761         an enum type.   
19762
19763 2002-06-29  Martin Baulig  <martin@gnome.org>
19764
19765         * rootcontext.cs (RootContext.ResolveCore): We must initialize
19766         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
19767         before calling BootstrapCorlib_ResolveDelegate ().
19768
19769 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19770
19771         * statement.cs: fixed build-breaker. All tests passed ok.
19772
19773 2002-06-27  Martin Baulig  <martin@gnome.org>
19774
19775         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
19776         for System.Decimal when compiling corlib.
19777
19778 2002-06-27  Martin Baulig  <martin@gnome.org>
19779
19780         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
19781         switch blocks which contain nothing but a default clause.
19782
19783 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
19784
19785        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
19786
19787 2002-06-27  Martin Baulig  <martin@gnome.org>
19788
19789         * ecore.cs (PropertyExpr.PropertyExpr): Call
19790         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
19791
19792         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
19793         is already a TypeBuilder.
19794
19795 2002-06-27  Martin Baulig  <martin@gnome.org>
19796
19797         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
19798         `target_type == TypeManager.array_type', not IsAssignableFrom() in
19799         the "from an array-type to System.Array" case.  This makes it work
19800         when compiling corlib.
19801
19802 2002-06-27  Martin Baulig  <martin@gnome.org>
19803
19804         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
19805         non-static PropertyExpr, set its InstanceExpression.  This makes
19806         the `ICollection.Count' property work in System/Array.cs.
19807
19808 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
19809
19810         * driver.cs: Made error handling more consistent.  Errors now
19811         tracked by Report class, so many methods which used to return int
19812         now return void.  Main() now prints success/failure and 
19813         errors/warnings message.
19814
19815         Renamed '--probe' compiler argument to '--expect-error'.  Removed
19816         the magic number return values (123 and 124).  Now, if the
19817         expected error occurs, the compiler exits with success (exit value
19818         0).  If the compilation completes without seeing that particular
19819         error, the compiler exits with failure (exit value 1).  The
19820         makefile in mcs/errors has been changed to handle the new behaviour.
19821
19822         * report.cs: Made 'expected error' number a property and renamed
19823         it from 'Probe' to 'ExpectedError'.
19824
19825         * genericparser.cs: Removed error handling support, since it is
19826         now all done by Report class.
19827
19828         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
19829         class, so parse() no longer returns an int.
19830
19831         * namespace.cs: Use Report.Error instead of GenericParser.error
19832
19833 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
19834
19835         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
19836         TypeContainer.AddOperator): At the front of the list put the
19837         explicit implementations, so they get resolved/defined first. 
19838
19839 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
19840
19841         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
19842         interface type is implemented by this TypeContainer.  Used during
19843         explicit interface implementation.
19844
19845         (Property.Define, Indexer.Define, Method.Define): Validate that
19846         the given interface in the explicit implementation is one of the
19847         base classes for the containing type.
19848
19849         Also if we are explicitly implementing an interface, but there is
19850         no match in the pending implementation table, report an error.
19851
19852         (Property.Define): Only define the property if we are
19853         not explicitly implementing a property from an interface.  Use the
19854         correct name also for those properties (the same CSC uses,
19855         although that is really not needed).
19856
19857         (Property.Emit): Do not emit attributes for explicitly implemented
19858         properties, as there is no TypeBuilder.
19859
19860         (Indexer.Emit): ditto.
19861
19862         Hiding then means that we do not really *implement* a pending
19863         implementation, which makes code fail.
19864
19865 2002-06-22  Martin Baulig  <martin@gnome.org>
19866
19867         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
19868         the return value of Object.GetType().  [FIXME: we need to do this whenever
19869         we get a type back from the reflection library].
19870
19871 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
19872
19873         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
19874
19875 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
19876
19877         * attribute.cs: Return null if we can not look up the type.
19878
19879         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
19880         the interface types found.
19881
19882         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
19883         interface types found.
19884
19885         * typemanager.cs (GetInterfaces): Make this routine returns alll
19886         the interfaces and work around the lame differences between
19887         System.Type and System.Reflection.Emit.TypeBuilder in the results
19888         result for GetInterfaces.
19889
19890         (ExpandInterfaces): Given an array of interface types, expand and
19891         eliminate repeated ocurrences of an interface.  This expands in
19892         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
19893         be IA, IB, IC.
19894
19895 2002-06-21  Martin Baulig  <martin@gnome.org>
19896
19897         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
19898         on System.Enum.
19899
19900 2002-06-21  Martin Baulig  <martin@gnome.org>
19901
19902         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
19903         and called with one of the core types, return the corresponding typebuilder for
19904         that type.
19905
19906         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
19907         element type.
19908
19909 2002-06-21  Martin Baulig  <martin@gnome.org>
19910
19911         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
19912         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
19913         (Expression.ConvertReferenceExplicit): Likewise.
19914
19915         * expression.cs (ElementAccess.DoResolve): Likewise.
19916         (ElementAccess.DoResolveLValue): Likewise.
19917
19918 2002-06-10  Martin Baulig  <martin@gnome.org>
19919
19920         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
19921         add the "value" parameter to the parameter list.
19922
19923         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
19924         to our caller.
19925
19926 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
19927
19928         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
19929         the argument to an int, uint, long or ulong, per the spec.  Also
19930         catch negative constants in array creation.
19931
19932 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
19933
19934         * class.cs: do not allow the same interface to appear twice in
19935         the definition list.
19936
19937 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
19938
19939         * ecore.cs: don't use ldlen with System.Array.
19940
19941 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
19942
19943         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
19944
19945 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
19946
19947         * modifiers.cs: produce correct field attributes for protected
19948         internal. Easy fix so miguel can work on ther harder stuff:-)
19949
19950 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
19951
19952         * pending.cs: New file.  Move the code from class.cs here.
19953         Support clearning the pending flag for all methods (when not doing
19954         explicit interface implementation).
19955
19956 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
19957
19958         * rootcontext.cs: added a couple more types needed to bootstrap.
19959
19960 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
19961
19962         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
19963         constructor in the type, instead of any constructor in the type
19964         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
19965         a bug in the Mono runtime when applying the params attribute). 
19966
19967 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
19968         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
19969
19970 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
19971
19972         * expression.cs (Unary.ResolveOperator): Use TypeManager
19973         to resolve the type.
19974
19975 2002-06-13  Ravi Pratap  <ravi@ximian.com>
19976
19977         * cs-parser.jay (enum_member_declaration): Pass in the attributes
19978         attached.
19979
19980         * enum.cs (AddEnumMember): Add support to store the attributes associated 
19981         with each member too.
19982
19983         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
19984         field builders too - this takes care of the enum member case.
19985
19986 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
19987
19988         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
19989         address-of operator on both value types and pointers.
19990
19991 2002-06-10  Martin Baulig  <martin@gnome.org>
19992
19993         * interface.cs (Interface.PopulateIndexer): Add the indexer's
19994         PropertyBuilder to the `property_builders' list.
19995
19996         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
19997         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
19998         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
19999         find any indexers which are inherited from an interface.
20000
20001 2002-06-09  Martin Baulig  <martin@gnome.org>
20002
20003         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
20004         the same type as the constant if necessary.  There's also a test-130.cs
20005         for this.
20006
20007         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
20008
20009         * typemanager.cs (TypeManager.ChangeType): Previously known as
20010         Enum.ChangeEnumType().
20011
20012 2002-06-09  Martin Baulig  <martin@gnome.org>
20013
20014         * expression.cs (Cast.TryReduce): Added support for consts.
20015
20016 2002-06-08  Ravi Pratap  <ravi@ximian.com>
20017
20018         * class.cs (Accessor): Hold attributes information so we can pass
20019         it along.
20020
20021         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
20022         Modify to pass in attributes attached to the methods.
20023
20024         (add_accessor_declaration, remove_accessor_declaration): Ditto.
20025
20026         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
20027         to handle the Accessor kind :-)
20028
20029         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
20030
20031 2002-06-08  Martin Baulig  <martin@gnome.org>
20032
20033         * expression.cs (Unary.TryReduceNegative): Added support for
20034         ULongConstants.
20035
20036 2002-06-08  Martin Baulig  <martin@gnome.org>
20037
20038         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
20039         name can't be found in the `defined_names' - the caller will do a
20040         MemberLookup in this case and thus find methods in System.Enum
20041         such as Enum.IsDefined().
20042
20043 2002-06-08  Martin Baulig  <martin@gnome.org>
20044
20045         * enum.cs (Enum.ChangeEnumType): This is a custom version of
20046         Convert.ChangeType() which works with TypeBuilder created types.
20047         (Enum.LookupEnumValue, Enum.Define): Use it here.
20048
20049         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
20050         `TypeBuilder.BaseType != null' check.
20051         (TypeContainer.FindMembers): Only lookup parent members if we
20052         actually have a parent.
20053         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
20054         (ConstructorInitializer.Resolve): Likewise.
20055
20056         * interface.cs (Interface.FindMembers): Added
20057         `TypeBuilder.BaseType != null' check.
20058
20059         * rootcontext.cs (RootContext.ResolveCore): Added
20060         "System.Runtime.CompilerServices.IndexerNameAttribute" to
20061         classes_second_stage.
20062
20063         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
20064         debug_type and trace_type when compiling with --nostdlib.       
20065
20066 2002-06-07  Martin Baulig  <martin@gnome.org>
20067
20068         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
20069         (AddField): Set it to true when adding a non-static field.
20070         (DefineType): Use `have_nonstatic_fields' to find out whether we
20071         have non-static fields, not `Fields != null'.
20072
20073 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
20074
20075         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
20076         dereferencing a null on the static-field code path)
20077
20078 2002-05-30  Martin Baulig  <martin@gnome.org>
20079
20080         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
20081         to take command line arguments.  Use reflection to call the new
20082         custom `Initialize' function on the symbol writer and pass it the
20083         command line arguments.
20084
20085         * driver.cs (--debug-args): New command line argument to pass command
20086         line arguments to the symbol writer.
20087
20088 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
20089
20090         * assign.cs (DoResolve): Forgot to do the implicit conversion to
20091         the target type for indexers and properties.  Thanks to Joe for
20092         catching this.
20093
20094 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
20095
20096         * typemanager.cs (MethodFlags): returns the method flags
20097         (Obsolete/ShouldIgnore) that control warning emission and whether
20098         the invocation should be made, or ignored. 
20099
20100         * expression.cs (Invocation.Emit): Remove previous hack, we should
20101         not do this on matching a base type, we should do this based on an attribute
20102
20103         Only emit calls to System.Diagnostics.Debug and
20104         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
20105         on the command line.
20106
20107         * rootcontext.cs: Global settings for tracing and debugging.
20108
20109         * cs-tokenizer.cs (define): New utility function to track
20110         defines.   Set the global settings for TRACE and DEBUG if found.
20111
20112 2002-05-25  Ravi Pratap  <ravi@ximian.com>
20113
20114         * interface.cs (Populate*): Pass in the TypeContainer as well as
20115         the DeclSpace as parameters so that we can create EmitContexts and
20116         then use that to apply attributes etc.
20117
20118         (PopulateMethod, PopulateEvent, PopulateProperty)
20119         (PopulateIndexer): Apply attributes everywhere.
20120
20121         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
20122         etc.
20123
20124         (ApplyAttributes): Update accordingly.
20125
20126         We now apply interface attributes for all members too.
20127
20128 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
20129
20130         * class.cs (Indexer.Define); Correctly check if we are explicit
20131         implementation (instead of checking the Name for a ".", we
20132         directly look up if the InterfaceType was specified).
20133
20134         Delay the creation of the PropertyBuilder.
20135
20136         Only create the PropertyBuilder if we are not an explicit
20137         interface implementation.   This means that explicit interface
20138         implementation members do not participate in regular function
20139         lookups, and hence fixes another major ambiguity problem in
20140         overload resolution (that was the visible effect).
20141
20142         (DefineMethod): Return whether we are doing an interface
20143         implementation. 
20144
20145         * typemanager.cs: Temporary hack until we get attributes in
20146         interfaces (Ravi is working on that) and we get IndexerName
20147         support in interfaces.
20148
20149         * interface.cs: Register the indexers as properties.
20150
20151         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
20152         warning, I have verified that this is a bug in the .NET runtime
20153         (JavaScript suffers of the same problem).
20154
20155         * typemanager.cs (MemberLookup): When looking up members for
20156         interfaces, the parent of an interface is the implicit
20157         System.Object (so we succeed in searches of Object methods in an
20158         interface method invocation.  Example:  IEnumerable x;  x.ToString
20159         ()) 
20160
20161 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
20162
20163         * class.cs (Event): Events should also register if they do
20164         implement the methods that an interface requires.
20165
20166         * typemanager.cs (MemberLookup); use the new GetInterfaces
20167         method. 
20168
20169         (GetInterfaces): The code used to lookup interfaces for a type is
20170         used in more than one place, factor it here. 
20171
20172         * driver.cs: Track the errors at the bottom of the file, we kept
20173         on going.
20174
20175         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
20176         instance if the method we are calling is static!
20177
20178 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
20179
20180         * attribute.cs (ApplyAttributes): Make this function filter out
20181         the IndexerName attribute (as that attribute in reality is never
20182         applied) and return the string constant for the IndexerName
20183         attribute. 
20184
20185         * class.cs (TypeContainer.Emit): Validate that all the indexers
20186         have the same IndexerName attribute, and if so, set the
20187         DefaultName attribute on the class. 
20188
20189         * typemanager.cs: The return value might contain other stuff (not
20190         only methods).  For instance, consider a method with an "Item"
20191         property and an Item method.
20192
20193         * class.cs: If there is a problem with the parameter types,
20194         return. 
20195
20196 2002-05-24  Ravi Pratap  <ravi@ximian.com>
20197
20198         * ecore.cs (ImplicitConversionExists): Wrapper function which also
20199         looks at user defined conversion after making a call to 
20200         StandardConversionExists - we need this for overload resolution.
20201
20202         * expression.cs : Update accordingly the various method calls.
20203
20204         This fixes 2 bugs filed against implicit user defined conversions 
20205
20206 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
20207
20208         * statement.cs: Track the result of the assignment.
20209
20210 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
20211
20212         * expression.cs (MemberAccess): Improved error reporting for
20213         inaccessible members.
20214
20215 2002-05-22  Martin Baulig  <martin@gnome.org>
20216
20217         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
20218         itself with debugging support.
20219
20220 2002-05-22  Martin Baulig  <martin@gnome.org>
20221
20222         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
20223         Removed, this isn't needed anymore.
20224
20225 2002-05-20  Martin Baulig  <martin@gnome.org>
20226
20227         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
20228         be underlying type for an enum.
20229
20230 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
20231
20232         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
20233         that splits out the loading of just the core types.
20234
20235         * rootcontext.cs (ResolveCore): Split the struct resolution in
20236         two, so we can load the enumeration underlying types before any
20237         enums are used.
20238
20239         * expression.cs (Is): Bandaid until we fix properly Switch (see
20240         bug #24985 for details).
20241
20242         * typemanager.cs (ImplementsInterface): The hashtable will contain
20243         a null if there are no interfaces implemented.
20244
20245 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
20246
20247         * cs-parser.jay (indexer_declarator): It is fine to have array
20248         parameters
20249
20250 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
20251
20252         * typemanager.cs: (RegisterBuilder): New function used to register
20253         TypeBuilders that implement interfaces.  Since
20254         TypeBuilder.GetInterfaces (as usual) does not work with lame
20255         Reflection.Emit. 
20256         (AddUserType): register interfaces.
20257
20258         (ImplementsInterface): Use the builder_to_ifaces hash if we are
20259         dealing with TypeBuilder.  Also, arrays are showing up as
20260         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
20261         methods can not be invoked on them!
20262
20263         * ecore.cs (ExplicitReferenceConversionExists): Made public.
20264         (ImplicitReferenceConversionExists): Split out from
20265         StandardConversionExists. 
20266
20267         * expression.cs (As): We were only implementing one of the three
20268         cases for the as operator.  We now implement them all.
20269         (Is): Implement the various other cases for Is as well.
20270
20271         * typemanager.cs (CACHE): New define used to control if we want or
20272         not the FindMembers cache.  Seems to have a negative impact on
20273         performance currently
20274
20275         (MemberLookup): Nested types have full acess to
20276         enclosing type members
20277
20278         Remove code that coped with instance/static returns for events, we
20279         now catch this in RealFindMembers.
20280
20281         (RealFindMembers): only perform static lookup if the instance
20282         lookup did not return a type or an event.  
20283
20284 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
20285
20286         * assign.cs (CompoundAssign): We pass more semantic information
20287         now to Compound Assignments than we did before: now we have all
20288         the information at hand, and now we resolve the target *before* we
20289         do the expression expansion, which allows the "CacheValue" method
20290         to have the effect we intended (before, a [x] += 1 would generate
20291         two differen ArrayAccess expressions from the ElementAccess,
20292         during the resolution process).
20293
20294         (CompoundAssign.DoResolve): Resolve target and original_source here.
20295
20296 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
20297
20298         * expression.cs (ArrayAccess): dropped debugging information. 
20299
20300         * typemanager.cs: Small bug fix: I was always returning i_members,
20301         instead of one of i_members or s_members (depending on which had
20302         the content).
20303
20304         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
20305         method is invoked before any code generation takes place, and it
20306         is a mechanism to inform that the expression will be invoked more
20307         than once, and that the method should use temporary values to
20308         avoid having side effects
20309
20310         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
20311
20312         * ecore.cs (Expression.CacheTemporaries): Provide empty default
20313         implementation.
20314
20315         * expression.cs (Indirection, ArrayAccess): Add support for
20316         CacheTemporaries in these two bad boys. 
20317
20318         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
20319         ldobj or ldind_ref.  
20320         (StoreFromPtr): Handle stobj as well.
20321
20322         * expression.cs (UnaryMutator): Share more code.
20323
20324         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
20325         down: I was not tracking the Filter function as well, which
20326         was affecting the results of the cache.
20327
20328 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
20329
20330         * attribute.cs: Remove the hack to handle the CharSet property on
20331         StructLayouts. 
20332
20333 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
20334
20335         * attribute.cs (DoResolve): More uglyness, we now only try to
20336         resolve the attribute partially, to extract the CharSet
20337         information (only if we are a StructLayout attribute).  Otherwise 
20338
20339         (GetExtraTypeInfo): Add some code to conditionally kill in the
20340         future this.   I am more and more convinced that the .NET
20341         framework has special code to handle the attribute setting on
20342         certain elements.
20343
20344         * expression.cs (IsParamsMethodApplicable): Revert my previous
20345         foreach change here, it was wrong.
20346
20347 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
20348
20349         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
20350         (pp_expr): do not abort on unknown input, just return.
20351         (eval): abort if there are pending chars.
20352
20353         * attribute.cs (Attribute.Resolve): Positional parameters are
20354         optional.  Deal with that case.
20355
20356         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
20357         the Ansi/Unicode/Auto information for the type.
20358
20359         (TypeContainer.DefineType): instantiate the EmitContext here, as
20360         we will be using it during the type definition (to resolve
20361         attributes) and during the emit phase.
20362
20363         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
20364         to pull type information out of the attributes
20365
20366         (Attribute.Resolve): track the constructor builder, and allow for
20367         multiple invocations (structs and classes will use this).
20368
20369         * ecore.cs (MemberLookupFinal): new version with all the
20370         parameters customizable.
20371
20372         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
20373         constructors.  Return if the result value is null (as the error
20374         would have been flagged already by MemberLookupFinal)
20375
20376         Do not allow instances of abstract classes or interfaces to be
20377         created.
20378
20379         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
20380         We have to compare the assembly property here when dealing with
20381         FamANDAssem and Assembly access modifiers, because we might be
20382         creating an assembly from *modules* (that means that we are not
20383         getting TypeBuilders for types defined in other modules that are
20384         part of this assembly).
20385
20386         (Method.Emit): If the method is marked abstract and has a body,
20387         emit an error. 
20388
20389         (TypeContainer.DefineMembers): If both the defined member and the
20390         parent name match are methods, then do not emit any warnings: let
20391         the Method.Define routine take care of flagging warnings.  But if
20392         there is a mismatch (method overrides something else, or method is
20393         overriwritten by something, then emit warning).
20394
20395         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
20396         set to null, this means `do not check for the return type on the
20397         signature'. 
20398
20399         (Method.Define): set the return type for the method signature to
20400         null, so that we get methods with the same name and parameters and
20401         different return types.  This is used to flag warning 114 (you are
20402         hiding a method, and you probably want to use the new/override
20403         keywords instead).
20404
20405         * typemanager.cs (MemberLookup): Implemented proper access
20406         control, closing a long standing set of bug reports.  The problem
20407         was that the Framework only has two bits: Public and NonPublic,
20408         and NonPublic includes private and protected methods, but we need
20409         to enforce the FamANDAssem, FamOrAssem and Family. 
20410
20411 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
20412
20413         * statement.cs (GotoCase): Return true: Ammounts to giving up
20414         knowledge on whether we return or not, and letting the other case
20415         be responsible for it.
20416
20417 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
20418
20419         * driver.cs: Do not load directories for each file processed, only
20420         do it if there is a pattern.
20421
20422         * ecore.cs: Report readonly assigns here as well, as we might have
20423         been resolved only by MemberAccess.
20424
20425         (SimpleName.SimpleNameResolve): Also be useful for LValue
20426         resolution.   We need this to propagate assign to local readonly variables
20427
20428         * typemanager.cs: Use a ptrhashtable for the criteria, because we
20429         do not want to reuse potential criteria memory.
20430
20431         * class.cs (MyEventBuilder): Set reflected_type;
20432
20433         * ecore.cs (Constantify): Added support for constifying bools.
20434
20435         (RootContext.LookupType): Added a cache for values looked up in
20436         the declaration space.
20437
20438         * typemanager.cs (FindMembers): Now is a front-end to
20439         RealFindMembers, and provides a two-level hashtable-based cache to
20440         the request.  
20441
20442         15% performance improvement: from 22.5 to 19.2 seconds.
20443
20444         * expression.cs (IsParamsMethodApplicable): use foreach.
20445         (Invocation.DoResolve): ditto.
20446         (New.DoResolve): ditto.
20447         (ArrayCreation.DoResolve): ditto.
20448
20449         * ecore.cs (FindMostEncompassingType): use foreach.
20450
20451         * delegate.cs (NewDelegate.DoResolve): Use foreach
20452
20453         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
20454         (RemoveMethods): use foreach.
20455
20456         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
20457         nested foreach statements instead of for, and also break out of
20458         the inner loop once a match is found.
20459
20460         (Invocation.OverloadResolve): Use foreach, simplify the code. 
20461
20462 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
20463
20464         * cfold.cs (BinaryFold): During an enumeration evaluation context,
20465         we actually unwrap the expression to allow for extra information
20466         to be extracted. 
20467
20468         * expression.cs: Use Shr_Un on unsigned operations. 
20469
20470 2002-05-08  Ravi Pratap  <ravi@ximian.com>
20471
20472         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
20473         applicable operators was not being considered correctly. This closes
20474         the bug Miguel reported.
20475
20476 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
20477
20478         * attribute.cs: check that the type derives from System.Attribute
20479         and report the correct error in that case (moved the duplicate code to
20480         its own method, too).
20481
20482 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
20483
20484         * attribute.cs: lookup attribute type name as the spec says: first the
20485         bare attribute name and then name + "Attribute" (nant compiles with
20486         mcs after this fix).
20487
20488 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
20489
20490         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
20491         Because of the way we parse things, we should try to see if a
20492         UIntConstant can fit in an integer.
20493
20494 2002-05-07  Ravi Pratap  <ravi@ximian.com>
20495
20496         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
20497         when we are in an explicit context.
20498
20499         (ConvertReferenceExplicit): When converting from Iface type S to Class
20500         T make sure the rules are implemented as an OR.
20501
20502         * parameter.cs (ParameterType): Make it a property for now although the
20503         purpose really isn't anything immediate.
20504
20505         * expression.cs (Is*Applicable): Do better checking on the parameter type
20506         of a ref/out parameter. The ones from the system assemblies are already 
20507         marked with the correct type so we don't need to do any correction.
20508
20509         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
20510         the object type is standard too so include that.
20511
20512 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20513
20514         * ecore.cs (StandardConversionExists): Augment with missing code:
20515         deal with IntConstant, LongConstants and Enumerations.
20516
20517         * assign.cs: Report the error, instead of failing silently
20518
20519         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
20520         typecontainer that they are declared, because the
20521         typecontainer/namespace will have the list of using clauses that
20522         need to be applied.
20523
20524         Assembly Attributes were escaping the normal registration
20525         mechanism. 
20526
20527         (EmitCode): Apply attributes within an EmitContext that represents
20528         the container they were declared on.
20529
20530         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
20531
20532 2002-05-06  Ravi Pratap  <ravi@ximian.com>
20533
20534         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
20535         Revamp completely - make much cleaner as we now operate only
20536         on a set of Types.
20537
20538         (FindMostSpecificSource, FindMostSpecificTarget): New methods
20539         to implement the logic detailed in the spec more correctly.
20540
20541         (UserDefinedConversion): Update accordingly.
20542
20543 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20544
20545         * statement.cs: Return flow analysis information up.
20546
20547         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
20548         and the default.
20549
20550         (token): Do not consume an extra character before calling
20551         decimal_digits.
20552
20553 2002-05-06  Piers Haken <piersh@friskit.com>
20554
20555         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
20556
20557 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20558
20559         * class.cs (Constructor.Emit): Set the IsStatic flag in the
20560         EmitContext during the instance constructor initializer
20561         resolution, to stop access to instance variables.
20562
20563         This is mandated by the spec, last paragraph of the `constructor
20564         initializers' section. 
20565
20566 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
20567
20568         * cs-parser.jay, class.cs (Accessor): new class used to represent
20569         an accessor (get or set).  In the past we used `null' to represent
20570         a missing accessor.  But this is ambiguous because there was no
20571         way to tell in abstract indexers/properties if one of them was
20572         specified.
20573
20574         Now there is a way of addressing that.
20575
20576         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
20577         instead of FindMembers.
20578
20579         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
20580         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
20581
20582         * attribute.cs: Treat indexers and properties as the same in terms
20583         of applying attributes
20584
20585         * ecore.cs (FindMostEncompassedType): Use statically initialized
20586         EmptyExpressions()s like we do elsewhere to avoid creating useless
20587         objects (and we take this out of the tight loop).
20588
20589         (GetConversionOperators): Move the code to extract the actual
20590         operators to a separate routine to clean things up.
20591
20592 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
20593
20594         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
20595         events are always registered FieldBuilders.
20596
20597         * class.cs (FieldBase): New class shared by Fields 
20598
20599         * delegate.cs: If we are a toplevel delegate, use our full name.
20600         If we are a nested delegate, then only use our tail name.
20601
20602 2002-05-02  Ravi Pratap  <ravi@ximian.com>
20603
20604         * expression.cs (IsApplicable): Ensure that we add the "&" to
20605         ref/out types before comparing it with the type of the argument.
20606
20607         (IsParamsMethodApplicable): Ditto.
20608
20609         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
20610         silly me ;-)
20611
20612         * delegate.cs : Handle the case when we have more than one applicable
20613         method. Flag an error only when we finish checking all.
20614
20615 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
20616
20617         * expression.cs: Add support for boolean static initializers.
20618
20619 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
20620
20621         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
20622
20623         * parameter.cs (ComputeParameterTypes,
20624         ComputeAndDefineParameterTypes): Better error handling: now we
20625         clear the `types' cache if we fail during any of the type lookups.
20626         We also return the status code correctly to our caller
20627
20628         * delegate.cs: If we fail to define a delegate, abort the extra
20629         steps. 
20630
20631         * expression.cs (Binary.ResolveOperator): for
20632         operator==(object,object) and operator !=(object, object) we also
20633         have to verify that there is an implicit conversion from one to
20634         the other.
20635
20636         (ArrayAccess.DoResolve): Array Access can operate on
20637         non-variables. 
20638
20639 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
20640
20641         * assign.cs (CompoundAssign): A new class used as a "flag" that
20642         the assignment actually is happening as part of a compound
20643         assignment operator.
20644
20645         During compound assignment, a few new rules exist to enable things
20646         like:
20647
20648         byte b |= 1 + 2
20649
20650         From the spec:
20651
20652         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
20653         to the type of x) if y is implicitly convertible to the type of x,
20654         and the operator is a builtin operator and the return type of the
20655         operator is explicitly convertible to the type of x. 
20656
20657         * rootcontext.cs: Reset warning level to 2.  4 catches various
20658         "interesting" features in mcs, we must clean this up at some
20659         point, but currently am trying to kill other bugs ;-)
20660
20661         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
20662         in container classes as well.  
20663
20664         * expression.cs (Binary.ResolveOperator): Handle string case
20665         before anything else (as operator overloading does emit an error
20666         before doing anything else).
20667
20668         This code could go away when we move to a table driven model, but
20669         i could not come up with a good plan last night.
20670
20671 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
20672
20673         * typemanager.cs (CSharpName): reimplementation using regex.
20674         * class.cs: added null check for fields in Emit
20675         * rootcontext.cs: set warninglevel to 4
20676
20677 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
20678
20679         * typemanager.cs (CSharpName): reimplemented with Lupus
20680         suggestion.
20681
20682 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
20683
20684         * statement.cs (If): correclty implement Resolve, because we were
20685         not catching sem errors in there.  The same process is needed
20686         everywhere else. 
20687         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
20688
20689
20690         (Statement.Warning_DeadCodeFound): Factorize code.
20691         (While): Report dead code here too.
20692
20693         (Statement): Added Resolve virtual method to allow
20694         for resolution split from the emit code.
20695
20696 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20697
20698         * statement.cs (EmitBoolExpression): No longer try to resolve the
20699         expression here.    
20700         (MakeBoolean): New utility function that resolve, implicitly
20701         converts to boolean and tags the expression. 
20702
20703
20704         (If, Do): Implement dead code elimination.
20705         (While): Implement loop inversion
20706
20707         (Do, While, For, If): Resolve the expression prior to calling our
20708         code generation.
20709
20710 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
20711
20712         * class.cs:
20713           - added method Report28 (warning: program has more than one entry point)
20714           - added method IsEntryPoint, implements paragraph 10.1 of the spec
20715           - modified method Method.Define, the part at the end of the method
20716
20717         * rootcontext.cs: added static public Location EntryPointLocation;
20718           
20719         * ../errors/cs0028.cs : Add test case for the above warning.              
20720
20721         * typemanager.cs:
20722           - modified method CSharpName to allow arrays of primitive type to
20723             be printed nicely (e.g. instead of System.Int32[][] it now prints
20724             int[][])
20725           - added method CSharpSignature: returns the signature of a method
20726             in string format to be used in reporting errors, warnings, etc.
20727
20728         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
20729         with String.Empty.
20730
20731 2002-04-26  Ravi Pratap  <ravi@ximian.com>
20732
20733         * delegate.cs (Define): Fix extremely silly bug where I was
20734         setting the type of the 'object' parameter of the BeginInvoke
20735         method to System.IAsyncResult instead of System.Object ;-)
20736
20737 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20738
20739         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
20740         here. 
20741
20742         (Constructor.Emit): return if we fail to initialize the
20743         constructor.  Another door closed!  
20744
20745         * expression.cs (New.DoResolve): Improve error message (from -6 to
20746         1501).  Use DeclaredOnly lookup to find the exact constructor.
20747
20748         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
20749         loop.  This is useful.
20750
20751         * cs-parser.jay: Adjust the default parameters so that destructors
20752         have the proper signature.
20753
20754 2002-04-26  Martin Baulig  <martin@gnome.org>
20755
20756         * driver.cs (LoadAssembly): If `assembly' contains any characters
20757         which are only valid in path names and not in assembly names
20758         (currently slash, backslash and point), use Assembly.LoadFrom ()
20759         instead of Assembly.Load () on the `assembly' (before iteration
20760         over the link_paths).
20761
20762 2002-04-26  Martin Baulig  <martin@gnome.org>
20763
20764         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
20765
20766 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
20767
20768         * class.cs (Property): use the new typemanager.MemberLookup
20769
20770         (TypeContainer.MemberLookup): Implement using the
20771         TypeManager.MemberLookup now. 
20772
20773         * typemanager.cs: Make MemberLookup a function of the TypeManager,
20774         and return MemberInfos, so that these can be used without an
20775         EmitContext (what we had before).
20776
20777 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
20778
20779         * expression.cs: Fix the case where the argument to params if the
20780         type of the params.  I omitted handling this before.   Fixed
20781
20782 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20783
20784         * driver.cs: Call BootCorlib_PopulateCoreType
20785
20786         * class.cs (Property.CheckBase): Check for properties only, not
20787         for all members. 
20788
20789         * interface.cs: Temporary hack: try/catch around the
20790         CustomAttributeBuilder, because I am getting an exception that I
20791         do not understand.
20792
20793         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
20794         types whose definitions are required to be there (attributes are
20795         defined before standard types).
20796
20797         Compute definitions as we boot the various types, as they are used
20798         immediately (value_type class will need object_type, but if we do
20799         not initialize object_type, we will pass a null, which will let
20800         the runtime pick the System.Object from the existing corlib, which
20801         is not what we want).
20802
20803 2002-04-22  Patrik Torstensson <totte@labs2.com>
20804
20805         * cs-tokenizer.cs: fixed a number of trim() issues.
20806
20807 2002-04-22  Ravi Pratap  <ravi@ximian.com>
20808
20809         * expression.cs (Argument.Type): Ensure that we return the correct
20810         type when we have out or ref parameters [in which case we 
20811         append a "&"].
20812
20813 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20814
20815         * class.cs (Property, Indexer): Allow extern modifier in there. 
20816
20817         * typemanager.cs (InitBaseTypes): Initializes object_type and
20818         value_type, since those will be used early on during the bootstrap
20819         process to compile corlib.
20820
20821         (InitCoreTypes): Move code from here to InitBaseTypes.
20822
20823 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
20824
20825         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
20826         single-dimension arrays as using the ldlen opcode.  
20827
20828         Daniel Lewis discovered this optimization.  
20829
20830         * typemanager.cs: Add signature for System.Array::get_Length
20831
20832 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20833
20834         * statement.cs: report the error when the foreach does not apply to an
20835         array nor a collection.
20836
20837 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
20838
20839         * expression.cs: Add implicit conversions to the operator ~.
20840
20841         * constant.cs (DecimalConstant.Emit): Emit decimal value.
20842
20843         * typemanager.cs: Locate the decimal constructor.
20844
20845 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20846
20847         * attribute.cs: use the new property of TypeOf.
20848         * expression.cs: added 'get' property around typearg.
20849
20850         These changes fix a build breaker reported by NickD. Is this the
20851         correct way to fix?  If not, please, revert my changes and make it
20852         work :-).
20853
20854 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
20855
20856         * attribute.cs: Add support for typeof in attribute invocations.
20857         I am not sure that this is right though.
20858
20859 2002-04-14  Duncan Mak  <duncan@ximian.com>
20860
20861         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
20862         Binary.Operator.Division case.
20863
20864 2002-04-13  Ravi Pratap  <ravi@ximian.com>
20865
20866         * class.cs (DefineType): Ensure that we do a proper check on
20867         attribute types and also register it with the TypeManager.
20868
20869         (TypeContainer.Targets): The default for attribute types is
20870         AttributeTargets.All.
20871
20872         * attribute.cs (ApplyAttributes): Registering the attribute type
20873         is done elsewhere, not when we discover we have a Usage attribute.
20874
20875 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20876
20877         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
20878         and get rid of is_delegate parameter.
20879
20880         * everywhere : update.
20881
20882 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20883
20884         * cs-parser.jay (compilation_unit): Revamp completely to use
20885         some new ideas that I got from Rhys' grammar to solve the problems
20886         with assembly level attributes.
20887
20888         (outer_declaration): New grammar production.
20889
20890         (attribute_sections): Add.
20891
20892         (opt_attributes): Base on attribute_sections
20893
20894         (namespace_declaration): Allow opt_attributes to tackle the case
20895         when we have assembly level attributes - we are clever in this
20896         regard now ;-)
20897
20898         * attribute.cs (ApplyAttributes): Do not worry about assembly 
20899         attributes in the non-global context.
20900
20901         * rootcontext.cs (AddGlobalAttributes): Go back to using this
20902         instead of SetGlobalAttributes.
20903
20904         * class.cs, rootcontext.cs : Ensure we define and generate 
20905         attribute types before anything else.
20906
20907         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
20908         and flag the new error -20 for the case when the attribute type
20909         does not have valid targets specified. csc does not catch this.
20910
20911         * ../errors/errors.txt : update for error # -20
20912
20913 2002-04-11  Ravi Pratap  <ravi@ximian.com>
20914
20915         * support.cs (InternalParameters.ParameterModifier): Do some null
20916         checking and return sane values.
20917
20918         * class.cs (Method.Define): If we are a PInvoke method, ensure
20919         that we are static and extern. Report error # 601
20920
20921         * ../errors/cs0601.cs : Add test case for the above error.
20922
20923 2002-04-07  Ravi Pratap  <ravi@ximian.com>
20924
20925         * rootcontext.cs (attribute_types): We need to keep type of
20926         all attribute types separately and emit code for them first.
20927
20928         (RegisterAttribute) : Implement.
20929
20930         * class.cs (DefineType): Check if the current Type is a custom
20931         attribute type and register it accordingly.
20932
20933         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
20934         adding the first attribute twice and rename to
20935
20936         (SetGlobalAttributes): this.
20937
20938         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
20939         lookups.
20940
20941         * attribute.cs (ApplyAttributes): Take an additional argument telling us
20942         if we are processing global arguments. Hmm, I am unsure of this.
20943
20944 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20945
20946         * expression.cs: added static array of strings to avoid calling
20947         Enum.ToString () for Operator in Binary. Significant recover of
20948         performance.
20949
20950 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
20951
20952         * class.cs (FindMembers): Allow the Builders of the various
20953         members to be null.  If they are skip them.  This only happens
20954         during the PInvoke declaration.
20955
20956 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
20957
20958         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
20959         failure, so we do not keep going afterwards.
20960
20961         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
20962         wanted to pass `false' as the `is_delegate' argument.  If this is
20963         the case, why not use delegate_type == null to mean `is_delegate =
20964         false' and anything else as is_delegate = true.
20965
20966 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
20967
20968         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
20969         code for the section, not the beginning of the tests.
20970
20971 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
20972
20973         * cfold.cs: Handle operator + (Enum x, Underlying x) 
20974
20975         * expression.cs (Binary): same.  Warn about errors where we have
20976         Enum/Enum in operator + as well.
20977
20978 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
20979
20980         * statement.cs:
20981                 - added support for switch(bool)
20982                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
20983                 - add TableSwitchEmit() to handle table-based switch statements
20984
20985 2002-04-05  Ravi Pratap  <ravi@ximian.com>
20986
20987         * expression.cs (Invocation.OverloadResolve): Factor out code which
20988         does parameter compatibility checking with arguments so that we can 
20989         re-use the code even from Delegate.VerifyApplicability
20990
20991         (VerifyArgumentsCompat): Move above code here.
20992
20993         * delegate.cs (VerifyApplicability): Get rid of duplicate code
20994         and instead make a call to the above method.
20995
20996 2002-03-31  Ravi Pratap  <ravi@ximian.com>
20997
20998         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
20999         We use it to keep track of classes which are attribute types.
21000
21001 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
21002
21003         * delegate.cs (Delegate.Define): Correctly define the types in the
21004         presence of fixed and array parameters.
21005
21006         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
21007         doing FindMembers.
21008
21009         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
21010         include NonPublic after the first iteration.
21011
21012         * class.cs (Indexer.CheckBase): Only check if both parents are
21013         non-null. 
21014
21015         * cs-parser.jay (accessor_body): If empty, set to null.
21016
21017         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
21018         same code path here to resolve constants names that we did have in
21019         MemberAccess.DoResolve.  There is too much code duplicated here.
21020
21021 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
21022
21023         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
21024
21025         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
21026         to MakeUnionSet.
21027
21028         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
21029         tokens, numbers and strings.
21030
21031         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
21032         parenthesis.
21033
21034         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
21035         asyncronous parameters and the regular parameters.  
21036
21037         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
21038         specify the target directory.
21039
21040         * expression.cs: (This.DoResolve): Simplify
21041         (As.Emit): Optimize, do not generate IsInst if the expression is
21042         always of the given type.
21043
21044         (Is.DoResolve): Bug fix, we were reporting both always/never for
21045         the is expression.
21046
21047         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
21048         creating too many unnecessary arrays.
21049
21050 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
21051
21052         * class.cs (EmitFieldInitializer): Use Assign expression to assign
21053         fields instead of rolling our own initializer.   Takes care of all
21054         implicit conversions, and drops unnecessary static checks/argument.
21055
21056 2002-03-31  Dick Porter  <dick@ximian.com>
21057
21058         * driver.cs: use the GetDirectories() return values properly, and
21059         use "/" as path separator.
21060
21061 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
21062
21063         * expression.cs (Unary): Optimize - - expr into expr.
21064         (Binary): Optimize a + (-b) into a -b.
21065
21066         * codegen.cs (CodeGen): Made all methods static.
21067
21068 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
21069
21070         * rootcontext.cs: 
21071
21072         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
21073         TypeBuilder property.
21074
21075         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
21076         instead. 
21077
21078         * tree.cs: Removed the various RecordXXXX, and replaced with a
21079         single RecordDecl.  Removed all the accessor methods, and just
21080         left a single access point Type 
21081
21082         * enum.cs: Rename DefineEnum to DefineType.
21083
21084         * decl.cs: New abstract method `DefineType' used to unify the
21085         Defines for Enumerations, Interfaces, TypeContainers and
21086         Delegates.
21087
21088         (FindType): Moved LookupInterfaceOrClass here.  Moved the
21089         LookupBaseClasses method that used to live in class.cs and
21090         interface.cs here, and renamed to FindType.
21091
21092         * delegate.cs: Implement DefineType.  Take advantage of the
21093         refactored pattern for locating the parent builder without taking
21094         the parent_builder argument (which we know does not work if we are
21095         nested, and triggering a toplevel definition).
21096
21097 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
21098
21099         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
21100         accessibility of a member has changed during override and report
21101         an error if so.
21102
21103         * class.cs (Method.Define, Property.Define): Only complain on
21104         overrides if the method is private, any other accessibility is
21105         fine (and since we just checked the permission is the same, we are
21106         good to go).
21107
21108         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
21109         and elif are processed always.  The other pre-processing
21110         directives are only processed if we are "taking" the path
21111
21112 2002-03-29  Martin Baulig  <martin@gnome.org>
21113
21114         * class.cs (Method.Emit): Only emit symbolic debugging info if the
21115         current location is not Null.
21116
21117         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
21118         a separate method so we can profile it.
21119
21120         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
21121         `span.Seconds' are just seconds, but no minutes or hours.
21122         (MainDriver): Profile the CodeGen.SaveSymbols calls.
21123
21124 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
21125
21126         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
21127         Remove the gratuitous set of Final:
21128
21129                                 // If an interface implementation, then we can set Final.
21130                                 if (((flags & MethodAttributes.Abstract) == 0) &&
21131                                     implementing.DeclaringType.IsInterface)
21132                                         flags |= MethodAttributes.Final;
21133
21134         I do not know what I was smoking when I used that.
21135
21136
21137         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
21138         step into fixing the name resolution issues for delegates and
21139         unifying the toplevel name resolution.
21140
21141 2002-03-28  Martin Baulig  <martin@gnome.org>
21142
21143         * class.cs (Method.Emit): If we have a symbol writer, call its
21144         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
21145         tell it about the current method.
21146
21147         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
21148         writer that we're going to emit the first byte of IL code for a new
21149         statement (a new source line).
21150         (EmitContext.EmitTopBlock): If we have a symbol writer, call
21151         EmitContext.Mark() before emitting any code.
21152
21153         * location.cs (SymbolDocument): Return null when we're Null.
21154
21155         * statement.cs (Statement): Moved the `Location loc' variable here.
21156         (Statement.EmitBoolExpression): If we have a symbol writer, call
21157         ec.Mark() before emitting any code to tell it that we're at the
21158         beginning of a new statement.
21159         (StatementExpression): Added `Location' argument to the constructor.
21160         (Block): Added public readonly variable `StartLocation' and public
21161         variable `EndLocation'.  The latter is to be set using SetEndLocation().
21162         (Block): Added constructor which takes a start and end location.
21163         (Block.SetEndLocation): New method. This sets the end location.
21164         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
21165         local variables we create.
21166         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
21167         each statement and do also mark the begin and end of the block.
21168
21169         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
21170         tell it the current lexer.Location, use Location.Null for the end of the
21171         block.
21172         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
21173         current block, set its end location using SetEndLocation().
21174         (statement_expression): StatementExpression constructor now takes the
21175         lexer.Location as additional argument.
21176         (for_statement, declare_local_variables): Likewise.
21177         (declare_local_variables): When creating a new implicit block, use the
21178         new Block constructor and pass it the lexer.Location.
21179
21180 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
21181
21182         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
21183         members also on the parent interfaces recursively.
21184
21185 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
21186
21187         * report.cs: Use new formats, since Gonzalo finished the missing
21188         bits. 
21189
21190         * expression.cs (Binary.ResolveOperator): added missing operator|
21191         operator& and operator^ for bool/bool.
21192
21193         * cs-parser.jay: CheckDef now takes a Location argument that is
21194         used to report errors more precisly (instead of reporting the end
21195         of a definition, we try to track something which is a lot closer
21196         to the source of the problem).
21197
21198         * cs-tokenizer.cs: Track global token use, so we can properly flag
21199         the use of #define/#undef after the first token has been seen.
21200
21201         Also, rename the reportXXXX to Error_DescriptiveName
21202
21203         * decl.cs (DeclSpace.IsTopLevel): Move property here from
21204         TypeContainer, so that Enum and Interface can use this too.
21205
21206         * class.cs (TypeContainer.LookupInterfaceOrClass,
21207         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
21208         `builder' argument.  Typically this was used to pass the parent
21209         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
21210         the definition).  
21211
21212         The problem is that a nested class could trigger the definition of
21213         a toplevel class, and the builder would be obviously wrong in that
21214         case. 
21215
21216         So we drop this argument, and we compute dynamically the
21217         TypeBuilder/ModuleBuilder (the correct information was available
21218         to us anyways from DeclSpace.Parent)
21219
21220         * interface.cs (Interface.DefineInterface): Drop builder
21221         parameter cleanup like class.cs
21222
21223         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
21224         like class.cs
21225
21226         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
21227         values. 
21228
21229         (Try.Emit): Propagate the returns value from the statement.
21230
21231         (Return.Emit): Even if we are leavning 
21232
21233         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
21234
21235         * modifiers.cs: Fix the computation of MethodAttributes flags.
21236
21237 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
21238
21239         * driver.cs: allow compilation of files that start with '/'.
21240         Add a default case when checking the argument of --target.
21241
21242 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
21243
21244         * interface.cs: Implement the same search algorithm for types in
21245         the interface code.
21246
21247         * delegate.cs: Do not allow multiple definition.
21248
21249         * Recovered ChangeLog that got accidentally amputated
21250
21251         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
21252
21253         * rootcontext.cs: Load manually enum to allow core classes to
21254         contain enumerations.
21255
21256         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
21257         Update to new static methods in TypeManager.
21258
21259         * typemanager.cs (GetMethod, GetConstructor): Use our
21260         implementation of FindMembers to find the members, since during
21261         corlib compilation, the types are TypeBuilders and GetMethod and
21262         GetConstructor do not work.
21263
21264         Make all methods in TypeManager static.
21265
21266         (InitCodeHelpers): Split the functionality from
21267         the InitCodeTypes function.
21268
21269         * driver.cs: Call InitCodeHelpers after we have populated the
21270         types. 
21271
21272         * cs-parser.jay (delegate_declaration): we did not used to compute
21273         the delegate name correctly for void delegates.
21274
21275 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
21276
21277         * rootcontext.cs (RootContext): Init the interface_resolve_order
21278         and type_container_resolve_order always.
21279
21280         (ResolveCore, BootstrapCorlib_ResolveClass,
21281         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
21282         compiler when compiling with --nostdlib
21283
21284         * class.cs (TypeContainer.DefineType): Check that our parent is
21285         not null.  This test is most important when we are bootstraping
21286         the core types.
21287
21288         * codegen.cs: Split out the symbol writing code.
21289
21290 2002-03-25  Martin Baulig  <martin@gnome.org>
21291
21292         * driver.cs (-g): Made -g an alias for --debug.
21293
21294 2002-03-24  Martin Baulig  <martin@gnome.org>
21295
21296         * codegen.cs (SymbolWriter): New public variable. Returns the
21297         current symbol writer.
21298         (CodeGen): Added `bool want_debugging_support' argument to the
21299          constructor. If true, tell the ModuleBuild that we want debugging
21300         support and ask it for the ISymbolWriter.
21301         (Save): If we have a symbol writer, call it's Close() method after
21302         saving the assembly.
21303
21304         * driver.c (--debug): New command line argument to create a
21305         debugger information file.
21306
21307         * location.cs (SymbolDocument): New public property. Returns an
21308         ISymbolDocumentWriter object for the current source file or null
21309         if we don't have a symbol writer.
21310
21311 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
21312
21313         * driver.cs (LoadAssembly): Correctly return when all the paths
21314         have been tried and not before.
21315
21316         * statement.cs (Switch.Emit): return the actual coverage for this
21317         statement (returns/not-returns)
21318
21319         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
21320         switch of the statement if we are the last switch section.  That
21321         kills two problems: try/catch problems (we used to emit an empty
21322         nop at the end) and switch statements where all branches would
21323         return. 
21324
21325 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
21326
21327         * driver.cs: Add default assemblies (the equivalent to the
21328         Microsoft CSC.RSP file)
21329
21330         * cs-tokenizer.cs: When updating `cols and setting it to zero,
21331         also update tokens_seen and set it to false.
21332
21333         * driver.cs: Implement --recurse for Mike.
21334
21335         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
21336         correctly splitting out the paths.
21337
21338 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
21339
21340         * interface.cs (Interface.PopulateProperty): Instead of using
21341         `parent' as the declaration space for the set parameters, use
21342         `this' 
21343
21344         * support.cs (InternalParameters): InternalParameters constructor
21345         takes a DeclSpace instead of a TypeContainer.
21346
21347         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
21348         types are being initialized, load the address of it before calling
21349         the function.  
21350
21351         (New): Provide a mechanism to disable the generation of local
21352         value type temporaries when the caller will be providing us with
21353         an address to store it.
21354
21355         (ArrayCreation.EmitDynamicInitializers): Use it.
21356
21357 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
21358
21359         * expression.cs (Invocation.EmitArguments): Only probe for array
21360         property if there is more than one argument.  Sorry about that.
21361
21362         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
21363         empty param arrays.
21364
21365         * class.cs (Method.LabelParameters): Fix incorrect code path that
21366         prevented the `ParamArrayAttribute' from being applied to the
21367         params attribute.
21368
21369 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
21370
21371         * support.cs (ReflectionParameters): Correctly compute whether the
21372         last argument is a params array.  Fixes the problem with
21373         string.Split ('a')
21374
21375         * typemanager.cs: Make the assemblies array always be non-null
21376         (empty, but non-null)
21377
21378         * tree.cs (RecordDecl): New function that abstracts the recording
21379         of names.  This reports error 101, and provides a pointer to the
21380         previous declaration.  Fixes a crash in the compiler.
21381
21382         * cs-parser.jay (constructor_declaration): Update to new grammar,
21383         and provide a constructor_body that can be empty.
21384
21385 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
21386
21387         * driver.cs: Add support for --resources.
21388
21389         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
21390         Make all types for the various array helper methods be integer.
21391
21392         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
21393         CheckState to ConvCast.
21394
21395         (ConvCast): Now it takes a `checked' state argument, to avoid
21396         depending on the emit context for the conversion, and just using
21397         the resolve time setting.
21398
21399         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
21400         instead of Invocation.EmitArguments.  We do not emit the original
21401         arguments, instead we emit those which have been converted to
21402         unsigned int expressions.
21403
21404         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
21405
21406         * codegen.cs: ditto.
21407
21408         * expression.cs (LocalVariableReference): Drop the use of the
21409         Store function that depended on the variable index.
21410
21411         * statement.cs (VariableInfo): Drop the `Idx' property from this
21412         class, as this is not taking into account the indexes for
21413         temporaries tat we generate during the execution, getting the
21414         indexes wrong.
21415
21416         * class.cs: First emit class initializers, then call the parent
21417         constructor. 
21418
21419         * expression.cs (Binary): Fix opcode emision.
21420         (UnaryMutator.EmitCode): Support checked code generation
21421
21422         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
21423         matches for events for both the Static and Instance scans,
21424         pointing to the same element.   Fix that.
21425
21426 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
21427
21428         * rootcontext.cs (ResolveTree): Always set the
21429         interface_resolve_order, because nested interfaces will be calling
21430         into us.
21431
21432         * class.cs (GetInterfaceOrClass): Track the same resolution
21433         process used by TypeManager.LookupType.  This fixes the nested
21434         type lookups in class declarations (separate path from
21435         LookupType). 
21436
21437         (TypeContainer.DefineType): Also define nested interfaces.
21438         (TypeContainer.RegisterOrder): New public function used to
21439         register the order in which child interfaces need to be closed.
21440
21441         Nested interfaces need to be closed after their parents have been
21442         created. 
21443
21444         * interface.cs (InterfaceAttr): Put all the logic for computing
21445         the interface attribute here. 
21446
21447         (DefineInterface): Register our interface order with the
21448         RootContext or with the TypeContainer depending on the case.
21449
21450 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21451
21452         * cs-parser.jay: rework foreach statement to work with the new
21453         changes to the policy on SimpleNames.
21454
21455         * report.cs: support Stacktrace on warnings as well.
21456
21457         * makefile: drop --unsafe and /unsafe from the compile.
21458
21459 2002-03-13  Ravi Pratap  <ravi@ximian.com>
21460
21461         * ecore.cs (StandardConversionExists): Modify to take an Expression
21462         as the first parameter. Ensure we do null -> reference type conversion
21463         checking.
21464
21465         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
21466         temporary Expression objects.
21467
21468 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
21469
21470         * interface.cs: workaround bug in method overloading resolution
21471         (there is already a bugzilla bug for it).
21472
21473 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21474
21475         We could also solve this problem by having a separate path for
21476         performing type lookups, instead of DoResolve, we could have a
21477         ResolveType entry point, and only participating pieces of the
21478         production (simplename, deref, array) would implement this. 
21479
21480         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
21481         signal SimpleName to only resolve type names and not attempt to
21482         resolve anything else.
21483
21484         * expression.cs (Cast): Set the flag.
21485
21486         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
21487
21488         * class.cs: Only report 108 if there is no `new' modifier.
21489
21490         * cs-parser.jay: rework foreach statement to work with the new
21491         changes to the policy on SimpleNames.
21492         
21493         * report.cs: support Stacktrace on warnings as well.
21494
21495         * makefile: drop --unsafe and /unsafe from the compile.
21496
21497 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
21498
21499         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21500         lookups here, instead of doing that at parse time.  This means
21501         that our grammar will not introduce `LocalVariableReferences' as
21502         expressions at this point.  That solves the problem of code like
21503         this:
21504
21505         class X {
21506            static void Main ()
21507            { int X = 1;
21508             { X x = null }}}
21509
21510         This is only half the fix.  The full fix requires parameters to
21511         also be handled in this way.
21512
21513         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
21514         makes the use more obvious of the DeclSpace.  The
21515         ec.TypeContainer.TypeBuilder is now only used to pull the
21516         TypeBuilder for it.
21517
21518         My theory is that I can get rid of the TypeBuilder completely from
21519         the EmitContext, and have typecasts where it is used (from
21520         DeclSpace to where it matters).  
21521
21522         The only pending problem is that the code that implements Aliases
21523         is on TypeContainer, and probably should go in DeclSpace.
21524
21525         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21526         lookups here, instead of doing that at parse time.  This means
21527         that our grammar will not introduce `LocalVariableReferences' as
21528         expressions at this point.  That solves the problem of code like
21529         this:
21530
21531         class X {
21532            static void Main ()
21533            { int X = 1;
21534             { X x = null }}}
21535
21536         This is only half the fix.  The full fix requires parameters to
21537         also be handled in this way.
21538
21539         * class.cs (Property.DefineMethod): When implementing an interface
21540         method, set newslot, when implementing an abstract method, do not
21541         set the flag (before we tried never setting it, or always setting
21542         it, which is the difference).
21543         (Indexer.DefineMethod): same.
21544         (Method.DefineMethod): same.
21545
21546         * ecore.cs: Only set the status used flag if we get back a Field.
21547
21548         * attribute.cs: Temporary hack, so Paolo can keep working.
21549
21550 2002-03-08  Ravi Pratap  <ravi@ximian.com>
21551
21552         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
21553         the unmanaged type in the case we have a MarshalAs attribute.
21554
21555         (Resolve): Handle the case when we are parsing the special MarshalAs
21556         attribute [we need to store the unmanaged type to use later]
21557
21558         * typemanager.cs (marshal_as_attr_type): Built in type for the 
21559         MarshalAs Attribute.
21560
21561         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
21562         on parameters and accordingly set the marshalling info.
21563
21564 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
21565
21566         * class.cs: Optimizing slightly by removing redundant code after
21567         we switched to the `NoTypes' return value.
21568         (Property.DefineMethod): use NoTypes here too.
21569
21570         This fixes the bug I introduced in my last batch of changes.
21571
21572 2002-03-05  Ravi Pratap  <ravi@ximian.com>
21573
21574         * tree.cs (RecordEnum): Add. We now keep track of enums too.
21575
21576         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
21577         Enums since those are types too. 
21578
21579         * cs-parser.jay (enum_declaration): Record enums as we parse them.
21580
21581         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
21582         thanks to a call during the lookup process.
21583
21584 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
21585
21586         * statement.cs (Foreach): Lots of work to accomodate a particular
21587         kind of foreach statement that I had not kept in mind.  It is
21588         possible to have foreachs on classes that provide a GetEnumerator
21589         method that return objects that implement the "pattern" for using
21590         a foreach, there is no need to support GetEnumerator
21591         specifically. 
21592
21593         This is needed to compile nant.
21594
21595         * decl.cs: Only report 114 if the member is not `Finalize' and if
21596         the warning level is at least 2.
21597
21598         * class.cs: Moved the compare function from Method to
21599         MethodSignature. 
21600
21601         (MethodSignature.InheritableMemberSignatureCompare): Add new
21602         filter function that is used to extract inheritable methods from a
21603         class. 
21604
21605         (Method.Define): Use the new `inheritable_method_signature_filter'
21606         delegate
21607
21608         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
21609         command. 
21610
21611 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
21612
21613         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
21614
21615         * cs-parser.jay: Add opt_semicolon to the interface declaration.
21616
21617         * expression.cs: Pass location information to
21618         ConvertImplicitStandard. 
21619
21620         * class.cs: Added debugging code to track return values from
21621         interfaces. 
21622
21623 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
21624
21625         * expression.cs (Is.DoResolve): If either side of the `is' is an
21626         interface, do not flag the warning.
21627
21628         * ecore.cs (ImplicitReferenceConversion): We need a separate test
21629         for interfaces
21630
21631         * report.cs: Allow for --fatal to be used with --probe.
21632
21633         * typemanager.cs (NoTypes): Move the definition for the empty Type
21634         array here. 
21635
21636         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
21637         properties. 
21638         (TypeContainer.DefineProxy): New function used to proxy to parent
21639         implementations when implementing interfaces.
21640         (TypeContainer.ParentImplements): used to lookup if our parent
21641         implements a public function that is required by an interface.
21642         (TypeContainer.VerifyPendingMethods): Hook this up.
21643
21644         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
21645         `modules' and `assemblies' arraylists into arrays.  We only grow
21646         these are the very early start up of the program, so this improves
21647         the speedof LookupType (nicely measured).
21648
21649         * expression.cs (MakeByteBlob): Replaced unsafe code with
21650         BitConverter, as suggested by Paolo.
21651
21652         * cfold.cs (ConstantFold.Binary): Special case: perform constant
21653         folding of string concatenation, but if either side is a string,
21654         and the other is not, then return null, and let the runtime use
21655         the concatenation on the string plus the object (using
21656         `Object.ToString'). 
21657
21658 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
21659
21660         Constant Folding has been implemented now.
21661
21662         * expression.cs (Unary.Reduce): Do not throw an exception, catch
21663         the error instead on types that are not supported in one's
21664         complement. 
21665
21666         * constant.cs (Constant and all children): New set of functions to
21667         perform implict and explicit conversions.
21668
21669         * ecore.cs (EnumConstant): Implement the new functions to perform
21670         conversion by proxying to the child expression.
21671
21672         * codegen.cs: (ConstantCheckState): Constant evaluation has its
21673         own separate setting that can not be turned off from the command
21674         line using --unchecked or --checked and is only controlled using
21675         the checked/unchecked statements and expressions.  This setting is
21676         used by the constant folder to flag errors.
21677
21678         * expression.cs (CheckedExpr, UncheckedExpr): Set the
21679         ConstantCheckState as well.   
21680
21681         During Resolve, they also have to flag the state, because the
21682         constant folder runs completely in the Resolve phase.
21683
21684         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
21685         well.
21686
21687 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21688
21689         * cfold.cs: New file, this file contains the constant folder.
21690
21691         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
21692         argument to track whether we are using the resulting address to
21693         load or store a value and provide better error messages. 
21694
21695         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
21696         new AddressOf arguments.
21697
21698         * statement.cs (Foreach.EmitCollectionForeach): Update
21699
21700         * expression.cs (Argument.Emit): Call AddressOf with proper
21701         arguments to track usage.
21702
21703         (New.DoEmit): Call AddressOf with new arguments.
21704
21705         (Unary.Emit): Adjust AddressOf call.
21706
21707 2002-03-01  Ravi Pratap  <ravi@ximian.com>
21708
21709         * cs-parser.jay (member_access): Change the case for pre-defined types
21710         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
21711         this suggestion.
21712
21713         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
21714         a method body.
21715
21716         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
21717         essentially like methods and apply attributes like MethodImplOptions to them too.
21718
21719         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
21720         not being null.
21721
21722         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
21723         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
21724         is the DeclSpace.
21725
21726         * Update code everywhere accordingly.
21727
21728         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
21729
21730         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
21731
21732 2002-02-28  Ravi Pratap  <ravi@ximian.com>
21733
21734         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
21735         try performing lookups against those instead of jumping straight into using
21736         the 'using' clauses.
21737
21738         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
21739
21740         (LookupType): Perform lookups in implicit parents too.
21741
21742         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
21743         sequence as RootContext.LookupType. 
21744
21745         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
21746         the various cases of namespace lookups into this method.
21747
21748 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21749
21750         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
21751         in positional arguments)
21752
21753         * class.cs (Operator): Update the AllowedModifiers to contain
21754         extern. 
21755
21756         * cs-parser.jay: Update operator declaration to allow for the
21757         operator body to be empty.
21758
21759         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
21760         values. 
21761
21762 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
21763
21764         * class.cs (Method.Emit): Label parameters.
21765
21766         * driver.cs: Return 1 or 0 as the program exit code.
21767
21768 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
21769
21770         * expression.cs: Special case the `null' object when trying to
21771         auto-compute the type, as anything can be explicitly converted to
21772         that. 
21773
21774         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
21775         spotting this Paolo.
21776
21777         (Expression.ImplicitNumericConversion): Perform comparissions of
21778         the type using the underlying type in the case of an enumeration
21779         rather than using the enumeration type for the compare.
21780
21781         Cope with the underlying == type case, which is not possible to
21782         catch before. 
21783
21784         (Expression.ConvertNumericExplicit): Perform comparissions of
21785         the type using the underlying type in the case of an enumeration
21786         rather than using the enumeration type for the compare.
21787
21788         * driver.cs: If the user does not supply an extension, assume .exe
21789
21790         * cs-parser.jay (if_statement): Rewrote so that we can track the
21791         location for the if statement.
21792
21793         * expression.cs (Binary.ConstantFold): Only concat strings when
21794         the operation is "+", not everything ;-)
21795
21796         * statement.cs (Statement.EmitBoolExpression): Take a location
21797         argument. 
21798         (If, While, Do): Track location.
21799
21800         * expression.cs (Binary.ResolveOperator): In the object + string
21801         case, I was missing a call to ConvertImplicit
21802
21803 2002-02-25  Ravi Pratap  <ravi@ximian.com>
21804
21805         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
21806         Location arguments. Ensure we use RootContext.LookupType to do our work
21807         and not try to do a direct Type.GetType and ModuleBuilder.GetType
21808
21809         * interface.cs (PopulateMethod): Handle the type of the parameter being
21810         null gracefully.
21811
21812         * expression.cs (Invocation.BetterFunction): Handle the case when we 
21813         have a params method with no fixed arguments and a call is made with no
21814         arguments.
21815
21816 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
21817
21818         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
21819         the verbatim-string-literal
21820
21821         * support.cs (InternalParameters.ParameterModifier): handle null
21822         fixed parameters.
21823         (InternalParameters.ParameterType): ditto.
21824
21825         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
21826         duplicating the name of the variable parameter.
21827         (GetParameterByName): Fix bug where we were not looking up array
21828         paramters if they were the only present (thanks Paolo!).
21829         (GetParameterInfo): We only have an empty set of types if both
21830         fixed and array are set to null.
21831         (GetParameterInfo-idx): Handle FixedParameter == null
21832
21833         * cs-parser.jay: Handle the case where there is no catch
21834         statements (missing null test).
21835
21836 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
21837
21838         * driver.cs (MainDriver): Be conservative on our command line
21839         handling.
21840
21841         Catch DirectoryNotFoundException when calling GetFiles.
21842
21843         (SplitPathAndPattern): Used to split the input specification into
21844         a path and a pattern that we can feed to Directory.GetFiles.
21845
21846 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
21847
21848         * statement.cs (Fixed): Implement the last case of the Fixed
21849         statement (string handling).
21850
21851         * expression.cs (StringPtr): New class used to return a char * to
21852         a string;  Used by the Fixed statement.
21853
21854         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
21855
21856         * expression.cs (Binary.ResolveOperator): Remove redundant
21857         MemberLookup pn parent type.
21858         Optimize union call, we do not need a union if the types are the same.
21859         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
21860         type.
21861
21862         Specialize the use of MemberLookup everywhere, instead of using
21863         the default settings. 
21864
21865         (StackAlloc): Implement stackalloc keyword.
21866
21867         * cs-parser.jay: Add rule to parse stackalloc.
21868
21869         * driver.cs: Handle /h, /help, /?
21870
21871         * expression.cs (MakeByteBlob): Removed the hacks we had in place
21872         before we supported unsafe code.
21873
21874         * makefile: add --unsafe to the self compilation of mcs.
21875
21876 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
21877
21878         * expression.cs (PointerArithmetic): New class that is used to
21879         perform pointer arithmetic.
21880         (Binary.Resolve): Handle pointer arithmetic
21881         Handle pointer comparission.
21882         (ArrayPtr): Utility expression class that is used to take the
21883         address of an array.
21884
21885         (ElementAccess): Implement array access for pointers
21886
21887         * statement.cs (Fixed): Implement fixed statement for arrays, we
21888         are missing one more case before we are done.
21889
21890         * expression.cs (Indirection): Implement EmitAssign and set the
21891         ExprClass to Variable.  This allows pointer dereferences to be
21892         treated as variables, and to have values assigned to them.
21893
21894         * ecore.cs (Expression.StoreFromPtr): New utility function to
21895         store values dereferencing.
21896
21897 2002-02-20  Ravi Pratap  <ravi@ximian.com>
21898
21899         * expression.cs (Binary.ResolveOperator): Ensure that we are
21900         not trying to operate on a void type - this fixes the reported
21901         bug.
21902
21903         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
21904         the parent implementation is sealed.
21905
21906         * ../errors/cs0239.cs : Add.
21907
21908         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
21909
21910         * typemanager.cs (unverifiable_code_type): Corresponds to 
21911         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
21912         which have unsafe code in them.
21913
21914         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
21915         unsafe context.
21916
21917 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
21918
21919         * cs-tokenizer.cs: Add support for @"litreal strings"
21920
21921         Make tokenizer accept pre-processor directives
21922         on any column (remove the old C-like limitation). 
21923
21924         * rootcontext.cs (EmitCode): Emit any global attributes.
21925         (AddGlobalAttributes): Used to keep track of assembly attributes. 
21926
21927         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
21928
21929         * cs-parser.jay: Add support for global attributes.  
21930
21931 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
21932
21933         * expression.cs (Indirection): New helper class.  Unary will
21934         create Indirection classes to be able to implement the
21935         IMemoryLocation interface on it.
21936
21937 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
21938
21939         * cs-parser.jay (fixed_statement): reference the right statement.
21940
21941         * statement.cs (Fixed.Emit): Finish implementing the fixed
21942         statement for the &x case.
21943
21944 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
21945
21946         * class.cs (Property.Define, Method.Define): Remove newslot when
21947         `implementing'.  
21948
21949         * modifiers.cs: My use of NewSlot when `Abstract' was set was
21950         wrong.  NewSlot should only be used if the `new' keyword is present.
21951
21952         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
21953         locating our system dir.  Sorry about this.
21954
21955 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21956
21957         * driver.cs (GetSystemDir): Compute correctly the location of our
21958         system assemblies.  I was using the compiler directory instead of
21959         the library directory.
21960
21961 2002-02-13  Ravi Pratap  <ravi@ximian.com>
21962
21963         * expression.cs (BetterFunction): Put back in what Miguel commented out
21964         since it is the correct fix. The problem is elsewhere ;-)
21965
21966         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
21967         parameters of the parms method are themselves compatible or not !
21968
21969         (StandardConversionExists): Fix very dangerous bug where we were forgetting
21970         to check that a class implements an interface before saying that an implicit
21971         conversion was allowed. Use ImplementsInterface to do the checking.
21972
21973 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21974
21975         * class.cs (Method.Define): Track whether we are an explicit
21976         implementation or not.  And only call DefineMethodOverride if we
21977         are an explicit implementation.
21978
21979         (Property.DefineMethod): Ditto.
21980
21981 2002-02-11  Ravi Pratap  <ravi@ximian.com>
21982
21983         * expression.cs (BetterFunction): Catch hideous bug which was
21984          preventing us from detecting ambiguous calls due to implicit casts i.e
21985         cs0121.
21986
21987 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
21988
21989         * support.cs (Pair): Remove un-needed method.  I figured why I was
21990         getting the error in cs-parser.jay, the variable in a foreach loop
21991         is readonly, and the compiler does not really treat this as a variable.
21992
21993         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
21994         instead of EQUALS in grammar.  
21995
21996         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
21997
21998         * expression.cs (Unary.DoResolve): Check whether the argument is
21999         managed or not.
22000
22001 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
22002
22003         * support.cs: Api for Pair to set a value.  Despite the fact that
22004         the variables are public the MS C# compiler refuses to compile
22005         code that accesses the field if the variable is part of a foreach
22006         statement. 
22007
22008         * statement.cs (Fixed): Begin implementation of the fixed
22009         statement.
22010
22011         (Block.AddVariable): Return the VariableInfo on success and null
22012         on failure instead of true/false. 
22013
22014         * cs-parser.jay (foreach): Catch errors on variables already
22015         defined (we were ignoring this value before) and properly unwind
22016         the block hierarchy
22017
22018         (fixed_statement): grammar for the fixed statement.
22019
22020 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
22021
22022         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
22023         pointer types to be incretemented.
22024
22025         (SizeOf): Implement.
22026
22027         * cs-parser.jay (pointer_member_access): Implement
22028         expr->IDENTIFIER production.
22029
22030         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
22031         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
22032         on safe contexts.
22033
22034         (Unary): Implement indirection.
22035
22036         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
22037         use in non-unsafe context).
22038
22039         (SimpleName.DoResolve): Check for pointers in field access on safe
22040         contexts. 
22041
22042         (Expression.LoadFromPtr): Factor the load-indirect code in this
22043         function.  This was duplicated in UnboxCast and ParameterReference
22044
22045 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
22046
22047         * expression.cs (ComposedCast): report an error if a pointer cast
22048         is used in a safe region.
22049
22050         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
22051         pointer type casts in unsafe context.
22052
22053         * codegen.cs (EmitContext): Set up IsUnsafe.
22054
22055         * cs-parser.jay (non_expression_type): Add productions for pointer
22056         casts. 
22057
22058         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
22059         code.  We should not use force into static mode if the method is
22060         not virtual.  Fixes bug in MIS
22061
22062         * statement.cs (Do.Emit, While.Emit, For.Emit,
22063         Statement.EmitBoolExpression): Add support to Do and While to
22064         propagate infinite loop as `I do return' semantics.
22065
22066         Improve the For case to also test for boolean constants.
22067
22068         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
22069         to the list of attributes we can add.
22070
22071         Remove `EmitContext' argument.
22072
22073         * class.cs (Method.Define): Apply parameter attributes.
22074         (Constructor.Define): Apply parameter attributes.
22075         (MethodCore.LabelParameters): Move here the core of labeling
22076         parameters. 
22077
22078         * support.cs (ReflectionParameters.ParameterModifier,
22079         InternalParameters.ParameterModifier): Use IsByRef on the type and
22080         only return the OUT bit for these parameters instead of in/out/ref
22081         flags.
22082
22083         This is because I miss-understood things.  The ParameterInfo.IsIn
22084         and IsOut represent whether the parameter has the [In] and [Out]
22085         attributes set.  
22086
22087 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
22088
22089         * ecore.cs (FieldExpr.Emit): Release temporaries.
22090
22091         * assign.cs (LocalTemporary.Release): new function.
22092
22093         * codegen.cs (EmitContext.GetTemporaryStorage,
22094         EmitContext.FreeTemporaryStorage): Rework the way we deal with
22095         temporary storage.  Now we can "put back" localbuilders when we
22096         are done with them
22097
22098 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
22099
22100         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
22101         need to make a copy of the variable to generate verifiable code.
22102
22103 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
22104
22105         * driver.cs: Compute dynamically the system directory.
22106
22107         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
22108         Slower, but more generally useful.  Used by the abstract
22109         registering implementation. 
22110
22111         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
22112         the rules for the special rule on Type/instances.  First check if
22113         we have the same name, and if so, try that special static path
22114         rather than the instance path.
22115
22116 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
22117
22118         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
22119         for, while and if.
22120
22121         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
22122         Enum, ValueType, Delegate or Array for non-corlib compiles.
22123
22124         * cs-tokenizer.cs: Catch long identifiers (645)
22125
22126         * typemanager.cs (IndexerPropetyName): Ravi never tested this
22127         piece of code.
22128
22129         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
22130         fix, we were returning too early, so we were not registering
22131         pending methods from abstract classes.
22132
22133         Do not register pending methods if the class is abstract.
22134
22135         * expression.cs (Conditional.DoResolve): Report circular implicit
22136         conversions when we neecd to compute it for conditional
22137         expressions. 
22138
22139         (Is.DoResolve): If the expression is always of the provided type,
22140         flag warning 183.  If the expression can not ever be of the
22141         provided type flag warning 184.
22142
22143         * class.cs: Catch 169 as well.
22144
22145         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
22146         read. 
22147
22148 2002-01-18  Nick Drochak  <ndrochak@gol.com>
22149
22150         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
22151
22152 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
22153
22154         * interface.cs: (PopulateMethod): Check for pointers being defined
22155         only if the unsafe context is active.
22156         (PopulateProperty): ditto.
22157         (PopulateIndexer): ditto.
22158
22159         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
22160         specified.  If pointers are present, make sure that they are
22161         present in an unsafe context.
22162         (Constructor, Constructor.Define): ditto.
22163         (Field, Field.Define): ditto.
22164         (Property, Property.Define): ditto.
22165         (Event, Event.Define): ditto.
22166
22167         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
22168         hashtable if there are classes or structs defined.
22169
22170         * expression.cs (LocalVariableReference.DoResolve): Simplify this
22171         code, as the constant resolution moved.
22172
22173         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
22174         the metadata, so we can flag error 133. 
22175
22176         * decl.cs (MemberCore.UnsafeOK): New function to test that a
22177         pointer is being declared in an unsafe context.
22178
22179 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
22180
22181         * modifiers.cs (Modifiers.Check): Require a Location argument.
22182         Report error 227 for Unsafe use.
22183
22184         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
22185
22186         * statement.cs (For.Emit): If the test is null, then report that
22187         we do `return', as we wont reach anything afterwards.
22188
22189         (Switch.SwitchGoverningType): Track the expression that matched
22190         the conversion.
22191
22192         * driver.cs: Allow negative numbers as an error code to flag.
22193
22194         * cs-parser.jay: Handle 1551.
22195
22196         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
22197
22198 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
22199
22200         * cs-parser.jay: Report 1518 (type declaration can only contain
22201         class, struct, interface, enum or delegate)
22202
22203         (switch_label): Report 1523 (keywords `case' or `default' must
22204         preced code)
22205
22206         (opt_switch_sections): Report 1522 (empty switch)
22207
22208         * driver.cs: Report 1515 (response file specified multiple times)
22209         Report 1516 (Source file specified multiple times).
22210
22211         * expression.cs (Argument.Resolve): Signal 1510
22212
22213         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
22214         access not allowed in static code)
22215
22216 2002-01-11  Ravi Pratap  <ravi@ximian.com>
22217
22218         * typemanager.cs (IsPointerType): Utility method which we are going
22219         to need a lot.
22220
22221         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
22222         the object type, so we take care of that.
22223
22224         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
22225
22226         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
22227         added to non-params parameters :-)
22228
22229         * typemanager.cs (CSharpName): Include 'void' type too. 
22230
22231         (void_ptr_type): Include in the set of core types.
22232
22233         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
22234         duplicating code.
22235
22236         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
22237         an unsafe context.
22238
22239         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
22240         completely forgotten about it.
22241
22242 2002-01-10  Ravi Pratap  <ravi@ximian.com>
22243
22244         * cs-parser.jay (pointer_type): Add. This begins our implementation
22245         of parsing rules for unsafe code.
22246
22247         (unsafe_statement): Implement.
22248
22249         (embedded_statement): Modify to include the above.
22250
22251         * statement.cs (Unsafe): Implement new class for unsafe blocks.
22252
22253         * codegen.cs (EmitContext.InUnsafe): Add. This determines
22254         if the current context is an unsafe one.
22255
22256         * cs-parser.jay (local_variable_pointer_type): Since local variable types
22257         are handled differently, we need separate rules for them.
22258
22259         (local_variable_declaration): Update to use local_variable_pointer_type
22260         to allow variable declarations of unmanaged pointer types.
22261
22262         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
22263         in unsafe contexts.
22264
22265         * ../errors/cs0214.cs : Add.
22266
22267 2002-01-16  Nick Drochak  <ndrochak@gol.com>
22268
22269         * makefile: remove 'response' file when cleaning.
22270
22271 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
22272
22273         * cs-parser.jay: Report 1524.
22274
22275 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
22276
22277         * typemanager.cs (RegisterMethod): drop checking if we have
22278         registered this from here
22279
22280 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
22281
22282         * class.cs (Method.EmitDestructor): Implement calling our base
22283         destructor. 
22284
22285         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
22286         value of InFinally.
22287
22288         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
22289         this routine and will wrap the call in a try/catch block.  Deal
22290         with the case.
22291
22292 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
22293
22294         * ecore.cs (Expression.MemberLookup): instead of taking a
22295         parameter `same_type' that was used to tell whether we could
22296         access private members we compute our containing type from the
22297         EmitContext.
22298
22299         (FieldExpr): Added partial support for volatile fields.  This does
22300         not work for volatile fields exposed from assemblies, as I can not
22301         figure out how to extract the modreq from it.
22302
22303         Updated all the source files to use this.
22304
22305         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
22306         because it is referenced by MemberLookup very often. 
22307
22308 2002-01-09  Ravi Pratap  <ravi@ximian.com>
22309
22310         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
22311         TypeBuilder.GetCustomAttributes to retrieve what we need.
22312
22313         Get rid of redundant default_member_attr_type as this is the same as
22314         default_member_type which already exists.
22315
22316         * interface.cs, attribute.cs : Update accordingly.
22317
22318 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
22319
22320         * typemanager.cs: Enable IndexerPropertyName again.  It does not
22321         work for TYpeBuilders though.  Ravi, can you please fix this?
22322
22323         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
22324
22325         * expression.cs (Argument.Emit): Handle the case of ref objects
22326         being passed to ref functions;  
22327
22328         (ParameterReference.EmitLoad): Loads the content of the pointer
22329         without dereferencing.
22330
22331 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
22332
22333         * cs-tokenizer.cs: Implemented the pre-processing expressions.
22334
22335 2002-01-08  Ravi Pratap  <ravi@ximian.com>
22336
22337         * class.cs (Indexer.DefineMethod): Incorporate the interface
22338         type in the name of the method if we are doing explicit interface
22339         implementation.
22340
22341         * expression.cs (ConversionExists): Remove as it is completely obsolete.
22342
22343         (BetterConversion): Fix extremely trivial bug where we were referring to
22344         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
22345         again !
22346
22347         * ../errors/bug16.cs : Add although we have fixed it.
22348
22349 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
22350
22351         * expression.cs (BaseIndexer): Begin implementation.
22352
22353         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
22354
22355         * cs-parser.jay (indexer_declarator): Use qualified_identifier
22356         production directly to remove a shift/reduce, and implement
22357         explicit interface implementation.
22358
22359         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
22360         after a floating point suffix.
22361
22362         * expression.cs (DoNumericPromotions): Improved the conversion for
22363         uint/uint.  If we have a constant, we avoid doing a typecast to a
22364         larger type.
22365
22366         * class.cs (Indexer): Implement explicit interface implementation
22367         for indexers.
22368
22369 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
22370
22371         * class.cs: make the default instance constructor public and hidebysig.
22372
22373 2001-01-03  Ravi Pratap  <ravi@ximian.com>
22374
22375         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
22376         so we can call it from elsewhere.
22377
22378         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
22379         we emit it internally if the class has a defined indexer; otherwise the user
22380         emits it by decorating the class definition with the DefaultMemberAttribute.
22381
22382         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
22383         attribute is not used on a type which defines an indexer.
22384
22385         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
22386         character when we skip whitespace.
22387
22388         * ../errors/cs0646.cs : Add.
22389
22390 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
22391
22392         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
22393         again. 
22394
22395         * makefile: Add practical target `mcs3.exe' which builds the third
22396         generation compiler. 
22397
22398         * expression.cs (New): Fix structures constructor calling.
22399
22400         * class.cs (Property, Method, Indexer): Emit Final flag on the
22401         method if we are an interface implementation and we are not
22402         abstract. 
22403
22404         * ecore.cs (PropertyExpr): New public field `IsBase', tells
22405         whether this property is referencing a `base' method.
22406
22407         * expression.cs (Invocation.EmitCall): take an extra argument:
22408         is_base, this is used to determine whether the `call' or
22409         `callvirt' opcode should be used.
22410
22411
22412         * delegate.cs: update EmitCall.
22413
22414         * class.cs (Method.Define): Set NewSlot for the cases where we are
22415         not implementing an interface method.
22416
22417         (Property.Define): ditto.
22418
22419 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
22420
22421         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
22422         'r'.  Allows mcs to parse itself fully.
22423
22424 2002-01-02  Ravi Pratap  <ravi@ximian.com>
22425
22426         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
22427         of the number of initializers that require the InitializeArray method.
22428
22429         (CheckIndices): Store the Expression in all cases - not the plain value. Also
22430         update the above field where necessary.
22431
22432         (MakeByteBlob): Update accordingly.
22433
22434         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
22435         greater than 2.
22436
22437         (EmitDynamicInitializers): Update in accordance with the new optimization.
22438
22439         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
22440         same OpCode applies.
22441
22442         * cs-parser.jay : Fix some glaring errors I introduced.
22443
22444 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
22445
22446         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
22447         so that we can check for name clashes there too.
22448
22449         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
22450         for interface indexers.
22451
22452         * interfaces.cs (Define): Emit the default member attribute.
22453
22454         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
22455         variable was being referred to while setting the value ;-)
22456
22457 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
22458
22459         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
22460         byte-by-byte information when we know the data is zero.
22461
22462         Make the block always a multiple of 4, because
22463         DefineInitializedData has a bug.
22464
22465         * assign.cs: Fix, we should assign from the temporary, not from
22466         the source. 
22467
22468         * expression.cs (MakeByteBlob): Fix my incorrect code.
22469
22470 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
22471
22472         * typemanager.cs (EnumToUnderlying): This function is used to get
22473         the underlying type from an enumeration, because it does not
22474         always work. 
22475
22476         * constant.cs: Use the I4_S form for values between -128 and 127.
22477
22478         * statement.cs (Block.LookupLabel): Looks up a label.
22479         (Block): Drop support for labeled blocks.
22480
22481         (LabeledStatement): New kind of statement that represents a label
22482         only.
22483
22484         (Goto): Finally implement this bad boy.
22485
22486         * cs-parser.jay: Update to reflect new mechanism to implement
22487         labels.
22488
22489 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
22490
22491         * codegen.cs (EmitContext.This): a codegen property that keeps the
22492         a single instance of this instead of creating many different this
22493         instances. 
22494
22495         * delegate.cs (Delegate.DoResolve): Update to use the property;
22496
22497         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
22498
22499         * expression.cs (BaseAccess.DoResolve): Ditto.
22500
22501 2001-12-29  Ravi Pratap  <ravi@ximian.com>
22502
22503         * typemanager.cs (methodimpl_attr_type): Add to hold the type
22504         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
22505
22506         (InitCoreTypes): Update accordingly.
22507
22508         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
22509         so we can quickly store the state.
22510
22511         (ApplyAttributes): Set the correct implementation flags
22512         for InternalCall methods.
22513
22514 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
22515
22516         * expression.cs (EmitCall): if a method is not virtual, then do
22517         not use callvirt on it.
22518
22519         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
22520         user defined stuff) requires the use of stobj, which takes an
22521         address on the stack instead of an array and an index.  So emit
22522         the Ldelema operation for it.
22523
22524         (EmitStoreOpcode): Use stobj for valuetypes.
22525
22526         (UnaryMutator.EmitCode): Use the right 1 value depending on
22527         whether we are dealing with int64/uint64, float or doubles.
22528
22529         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
22530         constructors that I implemented last night.
22531
22532         (Constructor.IsDefault): Fix to work properly for static
22533         constructors.
22534
22535         * cs-parser.jay (CheckDef): report method signature errors.
22536         Update error number 103 to be 132.
22537
22538         * decl.cs: New AdditionResult enumeration value: MethodExists.
22539         Although we do this check for methods later on in the semantic
22540         analysis, catching repeated default constructors is so easy that
22541         we catch these here. 
22542
22543         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
22544         promotions code.
22545
22546         (ParameterReference.EmitAssign, Emit): handle
22547         bools as bytes.
22548
22549         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
22550         (ArrayAccess.EmitStoreOpcode): ditto.
22551
22552         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
22553
22554         * expression.cs (MakeByteBlob): Complete all the missing types
22555         (uint, short, ushort, byte, sbyte)
22556
22557         * class.cs: Only init instance field initializers on instance
22558         constructors. 
22559
22560         Rename `constructors' to instance_constructors. 
22561
22562         (TypeContainer.AddConstructor): Only add constructors to the list
22563         if it is not static.
22564
22565         Make sure that we handle default_static_constructor independently
22566         everywhere where we handle instance_constructors
22567
22568 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
22569
22570         * class.cs: Do not lookup or create a base initializer for a
22571         static constructor.
22572
22573         (ConstructorInitializer.Resolve): use the proper type to lookup
22574         for constructors.
22575
22576         * cs-parser.jay: Report error 1585 (modifiers between type and name).
22577
22578         * enum.cs, interface.cs: Remove CloseType, this is taken care by
22579         in DeclSpace. 
22580
22581         * decl.cs: CloseType is now an virtual method, the default
22582         implementation just closes this type.
22583
22584 2001-12-28  Ravi Pratap  <ravi@ximian.com>
22585
22586         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
22587         to PreserveSig by default. Also emit HideBySig on such methods.
22588
22589         Basically, set the defaults to standard values.
22590
22591         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
22592         argument, if candidate is better, it can't be worse than the best !
22593
22594         (Invocation): Re-write bits to differentiate between methods being
22595         applicable in their expanded form and their normal form - for params
22596         methods of course.
22597
22598         Get rid of use_standard everywhere as only standard conversions are allowed
22599         in overload resolution. 
22600
22601         More spec conformance.
22602
22603 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22604
22605         * driver.cs: Add --timestamp, to see where the compiler spends
22606         most of its time.
22607
22608         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
22609         `this' in static code.
22610
22611         (SimpleName.DoResolve): Implement in terms of a helper function
22612         that allows static-references to be passed upstream to
22613         MemberAccess.
22614
22615         (Expression.ResolveWithSimpleName): Resolve specially simple
22616         names when called by MemberAccess to implement the special
22617         semantics. 
22618
22619         (Expression.ImplicitReferenceConversion): Handle conversions from
22620         Null to reference types before others, as Null's type is
22621         System.Object. 
22622
22623         * expression.cs (Invocation.EmitCall): Handle the special case of
22624         calling methods declared on a reference type from a ValueType
22625         (Base classes System.Object and System.Enum)
22626
22627         (MemberAccess.Resolve): Only perform lookups on Enumerations if
22628         the left hand side is a TypeExpr, not on every enumeration. 
22629
22630         (Binary.Resolve): If types are reference types, then do a cast to
22631         object on operators != and == of both arguments.
22632
22633         * typemanager.cs (FindMembers): Extract instance and static
22634         members if requested.
22635
22636         * interface.cs (PopulateProperty): Use void_type instead of null
22637         as the return type for the setter method.
22638
22639         (PopulateIndexer): ditto.
22640
22641 2001-12-27  Ravi Pratap  <ravi@ximian.com>
22642
22643         * support.cs (ReflectionParameters): Fix minor bug where we
22644         were examining the wrong parameter for the ParamArray attribute.
22645
22646         Cope with requests for the type of the parameter at position
22647         greater than the params parameter's. We now return the element
22648         type of the params array as that makes more sense.
22649
22650         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
22651         accordingly as we no longer have to extract the element type
22652         ourselves.
22653
22654         (Invocation.OverloadResolve): Update.
22655
22656 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22657
22658         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
22659         against IEnumerator, test whether the return value is a descendant
22660         of the IEnumerator interface.
22661
22662         * class.cs (Indexer.Define): Use an auxiliary method to implement
22663         the other bits of the method definition.  Begin support for
22664         explicit interface implementation.
22665
22666         (Property.DefineMethod): Use TypeManager.void_type instead of null
22667         for an empty return value.
22668
22669 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
22670
22671         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
22672         dealing with a FieldExpr which is composed of a FieldBuilder, in
22673         the code path we did extract the constant, but we should have
22674         obtained the underlying value to be able to cast it (otherwise we
22675         end up in an infinite loop, this is what Ravi was running into).
22676
22677         (ArrayCreation.UpdateIndices): Arrays might be empty.
22678
22679         (MemberAccess.ResolveMemberAccess): Add support for section
22680         14.5.4.1 that deals with the special case of E.I when E is a type
22681         and something else, that I can be a reference to a static member.
22682
22683         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
22684         handle a particular array type to create byte blobs, it is just
22685         something we dont generate byteblobs for.
22686
22687         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
22688         arguments. 
22689
22690         * location.cs (Push): remove the key from the hashtable that we
22691         are about to add.   This happens for empty files.
22692
22693         * driver.cs: Dispose files after we have parsed them.
22694
22695         (tokenize): new function that only runs the tokenizer on its
22696         input, for speed testing.
22697
22698 2001-12-26  Ravi Pratap  <ravi@ximian.com>
22699
22700         * class.cs (Event.Define): Define the private field only if there
22701         are no accessors defined.
22702
22703         * expression.cs (ResolveMemberAccess): If there is no associated
22704         field with the event, that means we have an event defined with its
22705         own accessors and we should flag error cs0070 since transforming
22706         ourselves into a field is not valid in that case.
22707
22708         * ecore.cs (SimpleName.DoResolve): Same as above.
22709
22710         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
22711         and charset to sane values.
22712
22713 2001-12-25  Ravi Pratap  <ravi@ximian.com>
22714
22715         * assign.cs (DoResolve): Perform check on events only if they 
22716         are being accessed outside the declaring type.
22717
22718         * cs-parser.jay (event_declarations): Update rules to correctly
22719         set the type of the implicit parameter etc.
22720
22721         (add_accessor, remove_accessor): Set current local parameters.
22722
22723         * expression.cs (Binary): For delegate addition and subtraction,
22724         cast the return value from the method into the appropriate delegate
22725         type.
22726
22727 2001-12-24  Ravi Pratap  <ravi@ximian.com>
22728
22729         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
22730         of these as the workaround is unnecessary.
22731
22732         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
22733         delegate data - none of that is needed at all.
22734
22735         Re-write bits to extract the instance expression and the delegate method
22736         correctly.
22737
22738         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
22739         on delegates too.
22740
22741         * attribute.cs (ApplyAttributes): New method to take care of common tasks
22742         of attaching attributes instead of duplicating code everywhere.
22743
22744         * everywhere : Update code to do attribute emission using the above method.
22745
22746 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22747
22748         * expression.cs (IsParamsMethodApplicable): if there are not
22749         parameters, return immediately.
22750
22751         * ecore.cs: The 0 literal can be implicity converted to an enum
22752         type. 
22753
22754         (SimpleName.DoResolve): First lookup the type, then lookup the
22755         members. 
22756
22757         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
22758         want to get its address.  If the InstanceExpression is not
22759         addressable, store the result in a temporary variable, then get
22760         the address of it.
22761
22762         * codegen.cs: Only display 219 errors on warning level or above. 
22763
22764         * expression.cs (ArrayAccess): Make it implement the
22765         IMemoryLocation interface.
22766
22767         (Binary.DoResolve): handle the operator == (object a, object b)
22768         and operator != (object a, object b) without incurring into a
22769         BoxedCast (because 5 != o should never be performed).
22770
22771         Handle binary enumerator operators.
22772
22773         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
22774         value type, otherwise use Ldelem_ref.
22775
22776         Use precomputed names;
22777
22778         (AddressOf): Implement address of
22779
22780         * cs-parser.jay (labeled_statement): Fix recursive block
22781         addition by reworking the production.
22782
22783         * expression.cs (New.DoEmit): New has a special case:
22784                 
22785                  If we are dealing with a ValueType, we have a few
22786                  situations to deal with:
22787                 
22788                     * The target of New is a ValueType variable, that is
22789                       easy, we just pass this as the variable reference
22790                 
22791                     * The target of New is being passed as an argument,
22792                       to a boxing operation or a function that takes a
22793                       ValueType.
22794                 
22795                       In this case, we need to create a temporary variable
22796                       that is the argument of New.
22797
22798
22799 2001-12-23  Ravi Pratap  <ravi@ximian.com>
22800
22801         * rootcontext.cs (LookupType): Check that current_type is not null before
22802         going about looking at nested types.
22803
22804         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
22805         not implement the IAssignMethod interface any more.
22806
22807         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
22808         where we tranform them into FieldExprs if they are being resolved from within
22809         the declaring type.
22810
22811         * ecore.cs (SimpleName.DoResolve): Do the same here.
22812
22813         * assign.cs (DoResolve, Emit): Clean up code considerably. 
22814
22815         * ../errors/bug10.cs : Add.
22816
22817         * ../errors/cs0070.cs : Add.
22818
22819         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
22820
22821         * assign.cs : Get rid of EventIsLocal everywhere.
22822
22823 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22824
22825         * ecore.cs (ConvertIntLiteral): finished the implementation.
22826
22827         * statement.cs (SwitchLabel): Convert the value we are using as a
22828         key before looking up the table.
22829
22830 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22831
22832         * codegen.cs (EmitTopBlock): Require a Location argument now.
22833
22834         * cs-parser.jay (constructor_declarator): We need to setup
22835         current_local_parameters before we parse the
22836         opt_constructor_initializer, to allow the variables to be bound
22837         to the constructor arguments.
22838
22839         * rootcontext.cs (LookupType): First lookup nested classes in our
22840         class and our parents before we go looking outside our class.
22841
22842         * expression.cs (ConstantFold): Extract/debox the values at the
22843         beginnning. 
22844
22845         * rootcontext.cs (EmitCode): Resolve the constants first before we
22846         resolve the types.  This is not really needed, but it helps debugging.
22847
22848         * statement.cs: report location.
22849
22850         * cs-parser.jay: pass location to throw statement.
22851
22852         * driver.cs: Small bug fix.
22853
22854         * report.cs: Updated format to be 4-zero filled digits.
22855
22856 2001-12-22  Ravi Pratap  <ravi@ximian.com>
22857
22858         * expression.cs (CheckIndices): Fix minor bug where the wrong
22859         variable was being referred to ;-)
22860
22861         (DoEmit): Do not call EmitStaticInitializers when the 
22862         underlying type is System.Object.
22863
22864 2001-12-21  Ravi Pratap  <ravi@ximian.com>
22865
22866         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
22867         and do the usual workaround for SRE.
22868
22869         * class.cs (MyEventBuilder.EventType): New member to get at the type
22870         of the event, quickly.
22871
22872         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
22873
22874         * assign.cs (Assign.DoResolve): Handle the case when the target
22875         is an EventExpr and perform the necessary checks.
22876
22877         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
22878         interface.
22879
22880         (SimpleName.MemberStaticCheck): Include check for EventExpr.
22881
22882         (EventExpr): Set the type in the constructor itself since we 
22883         are meant to be born fully resolved.
22884
22885         (EventExpr.Define): Revert code I wrote earlier.
22886                 
22887         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
22888         instance expression is null. The instance expression is a This in that case
22889         or a null, depending on whether it is a static method or not.
22890
22891         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
22892         refers to more than one method.
22893
22894         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
22895         and accordingly flag errors.
22896
22897 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22898
22899         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
22900
22901 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22902
22903         * location.cs (ToString): Provide useful rutine.
22904
22905 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22906
22907         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
22908         objects, return the actual integral boxed.
22909
22910         * statement.cs (SwitchLabel): define an ILLabel for each
22911         SwitchLabel. 
22912
22913         (Switch.CheckSwitch): If the value is a Literal, extract
22914         the underlying literal.
22915
22916         Also in the unused hashtable we had, add the SwitchLabel so we can
22917         quickly look this value up.
22918
22919         * constant.cs: Implement a bunch of new constants.  Rewrite
22920         Literal based on this.  Made changes everywhere to adapt to this.
22921
22922         * expression.cs (Expression.MakeByteBlob): Optimize routine by
22923         dereferencing array only once, and also copes with enumrations.
22924
22925         bytes are two bytes wide, not one.
22926
22927         (Cast): Perform constant conversions.
22928
22929         * ecore.cs (TryImplicitIntConversion): Return literals instead of
22930         wrappers to the literals here.
22931
22932         * expression.cs (DoNumericPromotions): long literals can converted
22933         to ulong implicity (this is taken care of elsewhere, but I was
22934         missing this spot).
22935
22936         * ecore.cs (Expression.Literalize): Make the return type Literal,
22937         to improve type checking.
22938
22939         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
22940
22941 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22942
22943         * literal.cs: Revert code from ravi that checked the bounds.  The
22944         bounds are sane by the definition of the type itself. 
22945
22946         * typemanager.cs: Fix implementation of ImplementsInterface.  We
22947         need to actually look up in our parent hierarchy for interfaces
22948         implemented. 
22949
22950         * const.cs: Use the underlying type for enumerations
22951
22952         * delegate.cs: Compute the basename for the delegate creation,
22953         that should fix the delegate test case, and restore the correct
22954         Type Lookup semantics in rootcontext
22955
22956         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
22957         referencing a nested type with the Reflection API is using the "+"
22958         sign. 
22959
22960         * cs-parser.jay: Do not require EOF token at the end.
22961
22962 2001-12-20  Ravi Pratap  <ravi@ximian.com>
22963
22964         * rootcontext.cs (LookupType): Concatenate type names with
22965         a '.' instead of a '+' The test suite passes again.
22966
22967         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
22968         field of the enumeration.
22969
22970         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
22971         the case when the member is an EventExpr.
22972
22973         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
22974         static has an associated instance expression.
22975
22976         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
22977
22978         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
22979
22980         * class.cs (Event.Define): Register event and perform appropriate checks
22981         for error #111.
22982
22983         We define the Add and Remove methods even if the use provides none because
22984         in that case, we provide default implementations ourselves.
22985
22986         Define a private field of the type of the event. This is done by the CSC compiler
22987         and we should be doing it too ;-)
22988
22989         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
22990         More methods we use in code we generate.
22991
22992         (multicast_delegate_type, delegate_type): Two separate types since the distinction
22993         is important.
22994
22995         (InitCoreTypes): Update accordingly for the above.
22996
22997         * class.cs (Event.Emit): Generate code for default accessors that we provide
22998
22999         (EmitDefaultMethod): Do the job in the above.
23000
23001         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
23002         appropriate place.
23003
23004 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
23005
23006         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
23007         builders even if we were missing one.
23008
23009         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
23010         pass the Basename as our class name instead of the Name.  The
23011         basename will be correctly composed for us.
23012
23013         * parameter.cs (Paramters): Now takes a Location argument.
23014
23015         * decl.cs (DeclSpace.LookupType): Removed convenience function and
23016         make all the code call directly LookupType in RootContext and take
23017         this chance to pass the Location information everywhere.
23018
23019         * Everywhere: pass Location information.
23020
23021 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
23022
23023         * class.cs (Constructor.Define): Updated way of detecting the
23024         length of the parameters.
23025
23026         (TypeContainer.DefineType): Use basename as the type name for
23027         nested types.
23028
23029         (TypeContainer.Define): Do not recursively define types here, as
23030         definition is taken care in order by the RootContext.
23031
23032         * tree.cs: Keep track of namespaces in a per-file basis.
23033
23034         * parameter.cs (Parameter.ComputeSignature): Update to use
23035         DeclSpace. 
23036
23037         (Parameters.GetSignature): ditto.
23038
23039         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
23040         instead of a TypeContainer.
23041
23042         (Interface.SemanticAnalysis): Use `this' instead of our parent to
23043         resolve names.  Because we need to be resolve in our context, not
23044         our parents.
23045
23046         * driver.cs: Implement response files.
23047
23048         * class.cs (TypeContainer.DefineType): If we are defined, do not
23049         redefine ourselves.
23050
23051         (Event.Emit): Emit the code for add/remove handlers.
23052         (Event.Define): Save the MethodBuilders for add/remove.
23053
23054         * typemanager.cs: Use pair here too.
23055
23056         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
23057         DictionaryEntry requires the first argument to be non-null.  
23058
23059         (enum_declaration): Compute full name for registering the
23060         enumeration.
23061
23062         (delegate_declaration): Instead of using
23063         formal_parameter_list, use opt_formal_parameter_list as the list
23064         can be empty.
23065
23066         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
23067         (EventParsing): New property that controls whether `add' and
23068         `remove' are returned as tokens or identifiers (for events);
23069
23070 2001-12-19  Ravi Pratap  <ravi@ximian.com>
23071
23072         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
23073         use MyEventBuilder only and let it wrap the real builder for us.
23074
23075         (MyEventBuilder): Revamp constructor etc.
23076
23077         Implement all operations that we perform on EventBuilder in precisely the same
23078         way here too.
23079
23080         (FindMembers): Update to use the EventBuilder member.
23081
23082         (Event.Emit): Update accordingly.
23083
23084 2001-12-18  Ravi Pratap  <ravi@ximian.com>
23085
23086         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
23087         by calling the appropriate methods.
23088
23089         (GetCustomAttributes): Make stubs as they cannot possibly do anything
23090         useful.
23091
23092         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
23093
23094 2001-12-17  Ravi Pratap  <ravi@ximian.com>
23095
23096         * delegate.cs (Delegate.Populate): Check that the return type
23097         and various parameters types are indeed accessible.
23098
23099         * class.cs (Constructor.Define): Same here.
23100
23101         (Field.Define): Ditto.
23102
23103         (Event.Define): Ditto.
23104
23105         (Operator.Define): Check that the underlying Method defined itself
23106         correctly - so it's MethodBuilder should not be null.
23107
23108         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
23109         expression happens to be null.
23110
23111         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
23112         members but as of now we don't seem to be able to do anything really useful with it.
23113
23114         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
23115         not the EventBuilder.
23116
23117 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
23118
23119         * cs-tokenizer.cs: Add support for defines.
23120         Add support for #if, #elif, #else, #endif
23121
23122         (eval_var): evaluates a variable.
23123         (eval): stubbed for evaluating functions.
23124
23125         * cs-parser.jay: Pass the defines information
23126
23127         * driver.cs: Add --define command line option.
23128
23129         * decl.cs: Move MemberCore here.
23130
23131         Make it the base class for DeclSpace.  This allows us to catch and
23132         report 108 and 109 for everything now.
23133
23134         * class.cs (TypeContainer.Define): Extract all the members
23135         before populating and emit the warning 108 (new keyword required
23136         to override) instead of having each member implement this.
23137
23138         (MemberCore.Define): New abstract method, we will be using this in
23139         the warning reporting engine in Populate.
23140
23141         (Operator.Define): Adjust to new MemberCore protocol. 
23142
23143         * const.cs (Const): This does not derive from Expression, it is a
23144         temporary object we use to create fields, it is a MemberCore. 
23145
23146         * class.cs (Method.Define): Allow the entry point to be in a
23147         specific class.
23148
23149         * driver.cs: Rewrite the argument handler to clean it up a bit.
23150
23151         * rootcontext.cs: Made it just an auxiliary namespace feature by
23152         making everything static.
23153
23154         * driver.cs: Adapt code to use RootContext type name instead of
23155         instance variable.
23156
23157         * delegate.cs: Remove RootContext argument.
23158
23159         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
23160         argument. 
23161
23162         * class.cs (Event.Define): The lookup can fail.
23163
23164         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
23165
23166         * expression.cs: Resolve the this instance before invoking the code.
23167
23168 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
23169
23170         * cs-parser.jay: Add a production in element_access that allows
23171         the thing to become a "type" reference.  This way we can parse
23172         things like "(string [])" as a type.
23173
23174         Note that this still does not handle the more complex rules of
23175         casts. 
23176
23177
23178         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
23179
23180         * ecore.cs: (CopyNewMethods): new utility function used to
23181         assemble the list of methods from running FindMembers.
23182
23183         (MemberLookup): Rework FindMembers so that 
23184
23185 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
23186
23187         * class.cs (TypeContainer): Remove Delegates who fail to be
23188         defined.
23189
23190         * delegate.cs (Populate): Verify that we dont get null return
23191         values.   TODO: Check for AsAccessible.
23192
23193         * cs-parser.jay: Use basename to emit error 574 (destructor should
23194         have the same name as container class), not the full name.
23195
23196         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
23197         possible representation.  
23198
23199         Also implements integer type suffixes U and L.
23200
23201 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
23202
23203         * expression.cs (ArrayCreation.DoResolve): We need to do the
23204         argument resolution *always*.
23205
23206         * decl.cs: Make this hold the namespace.  Hold the root context as
23207         well.
23208         (LookupType): Move here.
23209
23210         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
23211
23212         * location.cs (Row, Name): Fixed the code, it was always returning
23213         references to the first file.
23214
23215         * interface.cs: Register properties defined through interfaces.
23216
23217         * driver.cs: Add support for globbing on the command line
23218
23219         * class.cs (Field): Make it derive from MemberCore as well.
23220         (Event): ditto.
23221
23222 2001-12-15  Ravi Pratap  <ravi@ximian.com>
23223
23224         * class.cs (Event::Define): Check that the type of the event is a delegate
23225         type else flag error #66.
23226
23227         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
23228         same.
23229
23230         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
23231         values of EntryPoint, CharSet etc etc.
23232
23233         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
23234
23235         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
23236         be null and we should ignore this. I am not sure if this is really clean. Apparently,
23237         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
23238         which needs this to do its work.
23239
23240         * ../errors/cs0066.cs : Add.
23241
23242 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
23243
23244         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
23245         helper functions.
23246
23247         * class.cs: (MethodSignature.MethodSignature): Removed hack that
23248         clears out the parameters field.
23249         (MemberSignatureCompare): Cleanup
23250
23251         (MemberCore): New base class used to share code between MethodCore
23252         and Property.
23253
23254         (RegisterRequiredImplementations) BindingFlags.Public requires
23255         either BindingFlags.Instace or Static.  Use instance here.
23256
23257         (Property): Refactored code to cope better with the full spec.
23258
23259         * parameter.cs (GetParameterInfo): Return an empty array instead
23260         of null on error.
23261
23262         * class.cs (Property): Abstract or extern properties have no bodies.
23263
23264         * parameter.cs (GetParameterInfo): return a zero-sized array.
23265
23266         * class.cs (TypeContainer.MethodModifiersValid): Move all the
23267         method modifier validation to the typecontainer so we can reuse
23268         this on properties.
23269
23270         (MethodCore.ParameterTypes): return an empty sized array of types.
23271
23272         (Property.Define): Test property modifier validity.
23273
23274         Add tests for sealed/override too.
23275
23276         (Method.Emit): abstract or extern methods have no bodies.
23277
23278 2001-12-14  Ravi Pratap  <ravi@ximian.com>
23279
23280         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
23281         thing.
23282
23283         (Method::Define, ::Emit): Modify accordingly.
23284
23285         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
23286
23287         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
23288
23289         * makefile: Pass in /unsafe.
23290
23291 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
23292
23293         * class.cs (MakeKey): Kill routine.
23294
23295         * class.cs (TypeContainer.Define): Correctly define explicit
23296         method implementations (they require the full interface name plus
23297         the method name).
23298
23299         * typemanager.cs: Deply the PtrHashtable here and stop using the
23300         lame keys.  Things work so much better.
23301
23302         This of course broke everyone who depended on `RegisterMethod' to
23303         do the `test for existance' test.  This has to be done elsewhere.
23304
23305         * support.cs (PtrHashtable): A hashtable that avoid comparing with
23306         the object stupid Equals method (because, that like fails all over
23307         the place).  We still do not use it.
23308
23309         * class.cs (TypeContainer.SetRequiredInterface,
23310         TypeContainer.RequireMethods): Killed these two routines and moved
23311         all the functionality to RegisterRequiredImplementations.
23312
23313         (TypeContainer.RegisterRequiredImplementations): This routine now
23314         registers all the implementations required in an array for the
23315         interfaces and abstract methods.  We use an array of structures
23316         which can be computed ahead of time to reduce memory usage and we
23317         also assume that lookups are cheap as most classes will not
23318         implement too many interfaces.
23319
23320         We also avoid creating too many MethodSignatures.
23321
23322         (TypeContainer.IsInterfaceMethod): Update and optionally does not
23323         clear the "pending" bit if we find that there are problems with
23324         the declaration.
23325
23326         (TypeContainer.VerifyPendingMethods): Update to report errors of
23327         methods that look like implementations but are not.
23328
23329         (TypeContainer.Define): Add support for explicit interface method
23330         implementation. 
23331
23332 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
23333
23334         * typemanager.cs: Keep track of the parameters here instead of
23335         being a feature of the TypeContainer.
23336
23337         * class.cs: Drop the registration of parameters here, as
23338         InterfaceMethods are also interface declarations.
23339
23340         * delegate.cs: Register methods with the TypeManager not only with
23341         the TypeContainer.  This code was buggy.
23342
23343         * interface.cs: Full registation here.
23344
23345 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
23346
23347         * expression.cs: Remove reducer for binary expressions, it can not
23348         be done this way.
23349
23350         * const.cs: Put here the code that used to go into constant.cs
23351
23352         * constant.cs: Put here the code for constants, this is a new base
23353         class for Literals.
23354
23355         * literal.cs: Make Literal derive from Constant.
23356
23357 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
23358
23359         * statement.cs (Return.Emit): Report error 157 if the user
23360         attempts to return from a finally block.
23361
23362         (Return.Emit): Instead of emitting a return, jump to the end of
23363         the function.
23364
23365         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
23366         LocalBuilder to store the result of the function.  ReturnLabel is
23367         the target where we jump.
23368
23369
23370 2001-12-09  Radek Doulik  <rodo@ximian.com>
23371
23372         * cs-parser.jay: remember alias in current namespace
23373
23374         * ecore.cs (SimpleName::DoResolve): use aliases for types or
23375         namespaces
23376
23377         * class.cs (LookupAlias): lookup alias in my_namespace
23378
23379         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
23380         aliases hashtable
23381         (LookupAlias): lookup alias in this and if needed in parent
23382         namespaces
23383
23384 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
23385
23386         * support.cs: 
23387
23388         * rootcontext.cs: (ModuleBuilder) Made static, first step into
23389         making things static.  I need this to avoid passing the
23390         TypeContainer when calling ParameterType.
23391
23392         * support.cs (InternalParameters.ParameterType): Remove ugly hack
23393         that did string manipulation to compute the type and then call
23394         GetType.  Use Parameter.ParameterType instead.
23395
23396         * cs-tokenizer.cs: Consume the suffix for floating values.
23397
23398         * expression.cs (ParameterReference): figure out whether this is a
23399         reference parameter or not.  Kill an extra variable by computing
23400         the arg_idx during emission.
23401
23402         * parameter.cs (Parameters.GetParameterInfo): New overloaded
23403         function that returns whether a parameter is an out/ref value or not.
23404
23405         (Parameter.ParameterType): The type of the parameter (base,
23406         without ref/out applied).
23407
23408         (Parameter.Resolve): Perform resolution here.
23409         (Parameter.ExternalType): The full type (with ref/out applied).
23410
23411         * statement.cs (Using.Emit, Using.EmitExpression): Implement
23412         support for expressions on the using statement.
23413
23414 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
23415
23416         * statement.cs (Using.EmitLocalVariableDecls): Split the
23417         localvariable handling of the using statement.
23418
23419         (Block.EmitMeta): Keep track of variable count across blocks.  We
23420         were reusing slots on separate branches of blocks.
23421
23422         (Try.Emit): Emit the general code block, we were not emitting it. 
23423
23424         Check the type of the declaration to be an IDisposable or
23425         something that can be implicity converted to it. 
23426
23427         Emit conversions if required.
23428
23429         * ecore.cs (EmptyExpression): New utility class.
23430         (Expression.ImplicitConversionExists): New utility function.
23431
23432 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
23433
23434         * statement.cs (Using): Implement.
23435
23436         * expression.cs (LocalVariableReference): Support read only variables.
23437
23438         * statement.cs: Remove the explicit emit for the Leave opcode.
23439         (VariableInfo): Add a readonly field.
23440
23441 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
23442
23443         * ecore.cs (ConvCast): new class used to encapsulate the various
23444         explicit integer conversions that works in both checked and
23445         unchecked contexts.
23446
23447         (Expression.ConvertNumericExplicit): Use new ConvCast class to
23448         properly generate the overflow opcodes.
23449
23450 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23451
23452         * statement.cs: The correct type for the EmptyExpression is the
23453         element_type, not the variable type.  Ravi pointed this out.
23454
23455 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23456
23457         * class.cs (Method::Define): Handle PInvoke methods specially
23458         by using DefinePInvokeMethod instead of the usual one.
23459
23460         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
23461         above to do the task of extracting information and defining the method.
23462
23463 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23464
23465         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
23466         of the condition for string type.
23467
23468         (Emit): Move that here. 
23469
23470         (ArrayCreation::CheckIndices): Keep string literals in their expression
23471         form.
23472
23473         (EmitDynamicInitializers): Handle strings appropriately.
23474
23475 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23476
23477         * codegen.cs (EmitContext): Replace multiple variables with a
23478         single pointer to the current Switch statement.
23479
23480         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
23481         EmitContext.
23482
23483 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23484
23485         * statement.cs 
23486
23487         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
23488         default'.
23489
23490         (Foreach.Emit): Foreach on arrays was not setting
23491         up the loop variables (for break/continue).
23492
23493         (GotoCase): Semi-implented.
23494
23495 2001-12-03  Ravi Pratap  <ravi@ximian.com>
23496
23497         * attribute.cs (CheckAttribute): Handle system attributes by using
23498         Attribute.GetAttributes to examine information we need.
23499
23500         (GetValidPlaces): Same here.
23501
23502         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
23503
23504         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
23505
23506         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
23507
23508         (Method::Define): Set appropriate flags if we have a DllImport attribute.
23509
23510         (Method::Emit): Handle the case when we are a PInvoke method.
23511
23512 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23513
23514         * expression.cs: Use ResolveWithSimpleName on compound names.
23515
23516 2001-12-02  Ravi Pratap  <ravi@ximian.com>
23517
23518         * constant.cs (EmitConstant): Make sure we resolve the associated expression
23519         before trying to reduce it.
23520
23521         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
23522
23523         * constant.cs (LookupConstantValue): Implement.
23524
23525         (EmitConstant): Use the above in emitting the constant.
23526
23527         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
23528         that are user-defined by doing a LookupConstantValue on them.
23529
23530         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
23531         too, like above.
23532
23533 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
23534
23535         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
23536
23537         (BaseAccess.DoResolve): Implement.
23538
23539         (MemberAccess.DoResolve): Split this routine into a
23540         ResolveMemberAccess routine that can be used independently
23541
23542 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
23543
23544         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
23545         As that share bits of the implementation.  Is returns a boolean,
23546         while As returns the Type that is being probed.
23547
23548 2001-12-01  Ravi Pratap  <ravi@ximian.com>
23549
23550         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
23551         instead of a Literal - much easier.
23552
23553         (EnumInTransit): Remove - utterly useless :-)
23554
23555         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
23556
23557         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
23558
23559         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
23560         chain when we have no associated expression.
23561
23562 2001-11-30  Ravi Pratap  <ravi@ximian.com>
23563
23564         * constant.cs (Define): Use Location while reporting the errror.
23565
23566         Also emit a warning when 'new' is used and there is no inherited
23567         member to hide.
23568
23569         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
23570         populated.
23571
23572         (LookupEnumValue): Implement to lookup an enum member's value and define it
23573         if necessary.
23574
23575         (Populate): Re-write accordingly to use the above routine.
23576
23577 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
23578
23579         * expression.cs (This): Fix prototype for DoResolveLValue to
23580         override the base class DoResolveLValue.
23581
23582         * cs-parser.cs: Report errors cs574 and cs575 (destructor
23583         declarations) 
23584
23585         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
23586         (we need to load the address of the field here).  This fixes
23587         test-22. 
23588
23589         (FieldExpr.DoResolveLValue): Call the DoResolve
23590         function to initialize the Instance expression.
23591
23592         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
23593         correctly the GetEnumerator operation on a value type.
23594
23595         * cs-parser.jay: Add more simple parsing error catches.
23596
23597         * statement.cs (Switch): Add support for string switches.
23598         Handle null specially.
23599
23600         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
23601
23602 2001-11-28  Ravi Pratap  <ravi@ximian.com>
23603
23604         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
23605
23606         (declare_local_constant): New helper function.
23607
23608         * statement.cs (AddConstant): Keep a separate record of constants
23609
23610         (IsConstant): Implement to determine if a variable is a constant.
23611
23612         (GetConstantExpression): Implement.
23613
23614         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
23615
23616         * statement.cs (IsVariableDefined): Re-write.
23617
23618 2001-11-27  Ravi Pratap  <ravi@ximian.com>
23619
23620         * class.cs (TypeContainer::FindMembers): Look for constants
23621         in the case when we are looking for MemberTypes.Field
23622
23623         * expression.cs (MemberAccess::DoResolve): Check that in the
23624         case we are a FieldExpr and a Literal, we are not being accessed
23625         by an instance reference.
23626
23627         * cs-parser.jay (local_constant_declaration): Implement.
23628
23629         (declaration_statement): Implement for constant declarations.
23630
23631 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
23632
23633         * statement.cs (Switch): Catch double defaults.
23634
23635         (Switch): More work on the switch() statement
23636         implementation.  It works for integral values now, need to finish
23637         string support.
23638
23639
23640 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23641
23642         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
23643         integer literals into other integer literals.  To be used by
23644         switch. 
23645
23646 2001-11-24  Ravi Pratap  <ravi@ximian.com>
23647
23648         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
23649         some memory.
23650
23651         (EmitDynamicInitializers): Cope with the above since we extract data
23652         directly from ArrayData now.
23653
23654         (ExpectInitializers): Keep track of whether initializers are mandatory
23655         or not.
23656
23657         (Bounds): Make it a hashtable to prevent the same dimension being 
23658         recorded for every element in that dimension.
23659
23660         (EmitDynamicInitializers): Fix bug which prevented the Set array method
23661         from being found.
23662
23663         Also fix bug which was causing the indices to be emitted in the reverse
23664         order.
23665
23666 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23667
23668         * expression.cs (ArrayCreation): Implement the bits that Ravi left
23669         unfinished.  They do not work, because the underlying code is
23670         sloppy.
23671
23672 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23673
23674         * cs-parser.jay: Remove bogus fixme.
23675
23676         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
23677         on Switch statement.
23678
23679 2001-11-23  Ravi Pratap  <ravi@ximian.com>
23680
23681         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
23682         the same. 
23683
23684         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
23685         parameter. Apparently, any expression is allowed. 
23686
23687         (ValidateInitializers): Update accordingly.
23688
23689         (CheckIndices): Fix some tricky bugs thanks to recursion.
23690
23691         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
23692         I was being completely brain-dead.
23693
23694         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
23695         and re-write acordingly.
23696
23697         (DelegateInvocation): Re-write accordingly.
23698
23699         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
23700
23701         (MakeByteBlob): Handle types more correctly.
23702
23703         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
23704         initialization from expressions but it is incomplete because I am a complete
23705         Dodo :-|
23706
23707 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23708
23709         * statement.cs (If.Emit): Fix a bug that generated incorrect code
23710         on If.  Basically, we have to return `true' (ie, we do return to
23711         our caller) only if both branches of the if return.
23712
23713         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
23714         short-circuit operators, handle them as short circuit operators. 
23715
23716         (Cast.DoResolve): Resolve type.
23717         (Cast.Cast): Take an expression as the target type.
23718
23719         * cs-parser.jay (cast_expression): Remove old hack that only
23720         allowed a limited set of types to be handled.  Now we take a
23721         unary_expression and we resolve to a type during semantic
23722         analysis.
23723
23724         Use the grammar productions from Rhys to handle casts (this is
23725         not complete like Rhys syntax yet, we fail to handle that corner
23726         case that C# has regarding (-x), but we will get there.
23727
23728 2001-11-22  Ravi Pratap  <ravi@ximian.com>
23729
23730         * class.cs (EmitFieldInitializer): Take care of the case when we have a
23731         field which is an array type.
23732
23733         * cs-parser.jay (declare_local_variables): Support array initialization too.
23734
23735         * typemanager.cs (MakeKey): Implement.
23736
23737         (everywhere): Use the above appropriately.
23738
23739         * cs-parser.jay (for_statement): Update for array initialization while
23740         declaring variables.
23741
23742         * ecore.cs : The error message was correct, it's the variable's names that
23743         were misleading ;-) Make the code more readable.
23744
23745         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
23746         the correct type etc.
23747
23748         (ConvertExplicit): Handle Enum types by examining the underlying type.
23749
23750 2001-11-21  Ravi Pratap  <ravi@ximian.com>
23751
23752         * parameter.cs (GetCallingConvention): Always return
23753         CallingConventions.Standard for now.
23754
23755 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23756
23757         * expression.cs (Binary.ResolveOperator): Update the values of `l'
23758         and `r' after calling DoNumericPromotions.
23759
23760         * ecore.cs: Fix error message (the types were in the wrong order).
23761
23762         * statement.cs (Foreach.ProbeCollectionType): Need to pass
23763         BindingFlags.Instance as well 
23764
23765         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
23766         implicit int literal conversion in an empty cast so that we
23767         propagate the right type upstream.
23768
23769         (UnboxCast): new class used to unbox value types.
23770         (Expression.ConvertExplicit): Add explicit type conversions done
23771         by unboxing.
23772
23773         (Expression.ImplicitNumericConversion): Oops, forgot to test for
23774         the target type before applying the implicit LongLiterals to ULong
23775         literal cast.
23776
23777 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
23778
23779         * cs-parser.jay (for_statement): Reworked the way For works: now
23780         we declare manually any variables that are introduced in
23781         for_initializer to solve the problem of having out-of-band code
23782         emition (that is what got for broken).
23783
23784         (declaration_statement): Perform the actual variable declaration
23785         that used to be done in local_variable_declaration here.
23786
23787         (local_variable_declaration): Do not declare anything, just pass
23788         the information on a DictionaryEntry
23789
23790 2001-11-20  Ravi Pratap  <ravi@ximian.com>
23791
23792         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
23793         re-write of the logic to now make it recursive.
23794
23795         (UpdateIndices): Re-write accordingly.
23796
23797         Store element data in a separate ArrayData list in the above methods.
23798
23799         (MakeByteBlob): Implement to dump the array data into a byte array.
23800
23801 2001-11-19  Ravi Pratap  <ravi@ximian.com>
23802
23803         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
23804         into CheckIndices.
23805
23806         * constant.cs (Define): Implement.
23807
23808         (EmitConstant): Re-write fully.
23809
23810         Pass in location info.
23811
23812         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
23813         respectively.
23814
23815         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
23816         DictionaryEntry since we need location info too.
23817
23818         (constant_declaration): Update accordingly.
23819
23820         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
23821         code into another method : UpdateIndices.
23822
23823 2001-11-18  Ravi Pratap  <ravi@ximian.com>
23824
23825         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
23826         some type checking etc.
23827
23828 2001-11-17  Ravi Pratap  <ravi@ximian.com>
23829
23830         * expression.cs (ArrayCreation::ValidateInitializers): Implement
23831         bits to provide dimension info if the user skips doing that.
23832
23833         Update second constructor to store the rank correctly.
23834
23835 2001-11-16  Ravi Pratap  <ravi@ximian.com>
23836
23837         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
23838         and try to implement.
23839
23840         * ../errors/cs0150.cs : Add.
23841
23842         * ../errors/cs0178.cs : Add.
23843
23844 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
23845
23846         * statement.cs: Implement foreach on multi-dimensional arrays. 
23847
23848         * parameter.cs (Parameters.GetParameterByName): Also lookup the
23849         name of the params argument.
23850
23851         * expression.cs: Use EmitStoreOpcode to get the right opcode while
23852         initializing the array.
23853
23854         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
23855         we can use this elsewhere.
23856
23857         * statement.cs: Finish implementation of foreach for single
23858         dimension arrays.
23859
23860         * cs-parser.jay: Use an out-of-band stack to pass information
23861         around, I wonder why I need this.
23862
23863         foreach_block: Make the new foreach_block the current_block.
23864
23865         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
23866         function used to return a static Parameters structure.  Used for
23867         empty parameters, as those are created very frequently.
23868
23869         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
23870
23871 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23872
23873         * interface.cs : Default modifier is private, not public. The
23874         make verify test passes again.
23875
23876 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23877
23878         * support.cs (ReflectionParameters): Fix logic to determine
23879         whether the last parameter is a params one. Test 9 passes again.
23880
23881         * delegate.cs (Populate): Register the builders we define with
23882         RegisterParameterForBuilder. Test 19 passes again.
23883
23884         * cs-parser.jay (property_declaration): Reference $6 instead
23885         of $$ to get at the location.
23886
23887         (indexer_declaration): Similar stuff.
23888
23889         (attribute): Ditto.
23890
23891         * class.cs (Property): Register parameters for the Get and Set methods
23892         if they exist. Test 23 passes again.
23893
23894         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
23895         call to EmitArguments as we are sure there aren't any params arguments. 
23896         Test 32 passes again.
23897
23898         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
23899         IndexOutOfRangeException. 
23900
23901         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
23902         Test 33 now passes again.
23903
23904 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
23905
23906         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
23907         broke a bunch of things.  Will have to come up with a better way
23908         of tracking locations.
23909
23910         * statement.cs: Implemented foreach for single dimension arrays.
23911
23912 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23913
23914         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
23915         an error.  This removes the lookup from the critical path.
23916
23917         * cs-parser.jay: Removed use of temporary_loc, which is completely
23918         broken. 
23919
23920 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
23921
23922         * support.cs (ReflectionParameters.ParameterModifier): Report
23923         whether the argument is a PARAMS argument or not.
23924
23925         * class.cs: Set the attribute `ParamArrayAttribute' on the
23926         parameter argument.
23927
23928         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
23929         and cons_param_array_attribute (ConstructorInfo for
23930         ParamArrayAttribute)., 
23931
23932         * codegen.cs: Emit the return using the `Return' statement, that
23933         way we can report the error correctly for missing return values. 
23934
23935         * class.cs (Method.Emit): Clean up.
23936
23937         * expression.cs (Argument.Resolve): Take another argument: the
23938         location where this argument is used.  Notice that this is not
23939         part of the "Argument" class as to reduce the size of the
23940         structure (we know the approximate location anyways).
23941
23942         Test if the argument is a variable-reference, if not, then
23943         complain with a 206.
23944
23945         (Argument.Emit): Emit addresses of variables.
23946
23947         (Argument.FullDesc): Simplify.
23948
23949         (Invocation.DoResolve): Update for Argument.Resolve.
23950
23951         (ElementAccess.DoResolve): ditto.
23952
23953         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
23954         method should be virtual, as this method is always virtual.
23955
23956         (NewDelegate.DoResolve): Update for Argument.Resolve.
23957
23958         * class.cs (ConstructorInitializer.DoResolve): ditto.
23959
23960         * attribute.cs (Attribute.Resolve): ditto.
23961
23962 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
23963
23964         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
23965
23966         * expression.cs (ParameterReference): Drop IStackStorage and implement
23967         IAssignMethod instead. 
23968
23969         (LocalVariableReference): ditto.
23970
23971         * ecore.cs (FieldExpr): Drop IStackStorage and implement
23972         IAssignMethod instead. 
23973
23974 2001-11-13  Miguel de Icaza <miguel@ximian.com>
23975
23976         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
23977         enumerations that are used in heavily used structures derive from
23978         byte in a laughable and pathetic attempt to reduce memory usage.
23979         This is the kind of pre-optimzations that you should not do at
23980         home without adult supervision.
23981
23982         * expression.cs (UnaryMutator): New class, used to handle ++ and
23983         -- separatedly from the other unary operators.  Cleans up the
23984         code, and kills the ExpressionStatement dependency in Unary.
23985
23986         (Unary): Removed `method' and `Arguments' from this class, making
23987         it smaller, and moving it all to SimpleCall, so I can reuse this
23988         code in other locations and avoid creating a lot of transient data
23989         strucutres when not required.
23990
23991         * cs-parser.jay: Adjust for new changes.
23992
23993 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
23994
23995         * enum.cs (Enum.Populate): If there is a failure during
23996         definition, return
23997
23998         * cs-parser.jay (opt_enum_base): we used to catch type errors
23999         here, but this is really incorrect.  The type error should be
24000         catched during semantic analysis.
24001
24002 2001-12-11  Ravi Pratap  <ravi@ximian.com>
24003
24004         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
24005         current_local_parameters as expected since I, in my stupidity, had forgotten
24006         to do this :-)
24007
24008         * attribute.cs (GetValidPlaces): Fix stupid bug.
24009
24010         * class.cs (Method::Emit): Perform check on applicability of attributes.
24011
24012         (Constructor::Emit): Ditto.
24013
24014         (Field::Emit): Ditto.
24015
24016         (Field.Location): Store location information.
24017
24018         (Property, Event, Indexer, Operator): Ditto.
24019
24020         * cs-parser.jay (field_declaration): Pass in location for each field.
24021
24022         * ../errors/cs0592.cs : Add.
24023
24024 2001-11-12  Ravi Pratap  <ravi@ximian.com>
24025
24026         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
24027
24028         (InitCoreTypes): Update accordingly.
24029
24030         (RegisterAttrType, LookupAttr): Implement.
24031
24032         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
24033         info about the same.
24034
24035         (Resolve): Update to populate the above as necessary.
24036
24037         (Error592): Helper.
24038
24039         (GetValidPlaces): Helper to the above.
24040
24041         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
24042
24043         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
24044
24045 2001-11-12  Ravi Pratap  <ravi@ximian.com>
24046
24047         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
24048
24049         * ../errors/cs0617.cs : Add.
24050
24051 2001-11-11  Ravi Pratap  <ravi@ximian.com>
24052
24053         * enum.cs (Emit): Rename to Populate to be more consistent with what
24054         we expect it to do and when exactly it is called.
24055
24056         * class.cs, rootcontext.cs : Update accordingly.
24057
24058         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
24059         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
24060
24061         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
24062
24063         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
24064         of a fieldinfo using the above, when dealing with a FieldBuilder.
24065
24066 2001-11-10  Ravi Pratap  <ravi@ximian.com>
24067
24068         * ../errors/cs0031.cs : Add.
24069
24070         * ../errors/cs1008.cs : Add.
24071
24072         * ../errrors/cs0543.cs : Add.
24073
24074         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
24075         enum type.
24076
24077         (FindMembers): Implement.
24078
24079         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
24080         enums and delegates too.
24081
24082         (enum_types): Rename to builder_to_enum.
24083
24084         (delegate_types): Rename to builder_to_delegate.
24085
24086         * delegate.cs (FindMembers): Implement.
24087
24088 2001-11-09  Ravi Pratap  <ravi@ximian.com>
24089
24090         * typemanager.cs (IsEnumType): Implement.
24091
24092         * enum.cs (Emit): Re-write parts to account for the underlying type
24093         better and perform checking etc.
24094
24095         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
24096         of the underlying type.
24097
24098         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
24099         value
24100
24101         * enum.cs (error31): Helper to report error #31.
24102
24103         * cs-parser.jay (enum_declaration): Store location of each member too.
24104
24105         * enum.cs (member_to_location): New hashtable. 
24106
24107         (AddEnumMember): Update location hashtable.
24108
24109         (Emit): Use the location of each member while reporting errors.
24110
24111 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
24112
24113         * cs-parser.jay: A for_initializer if is a
24114         local_variable_declaration really ammount to have an implicit
24115         block with the variable declaration and no initializer for for.
24116
24117         * statement.cs (For.Emit): Cope with null initializers.
24118
24119         This fixes the infinite loop on for initializers.
24120
24121 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
24122
24123         * enum.cs: More cleanup.
24124
24125         * ecore.cs: Remove dead code.
24126
24127         * class.cs (Property.Emit): More simplification.
24128         (Event.Emit): ditto.
24129
24130         Reworked to have less levels of indentation.
24131
24132 2001-11-08  Ravi Pratap  <ravi@ximian.com>
24133
24134         * class.cs (Property): Emit attributes.
24135
24136         (Field): Ditto.
24137
24138         (Event): Ditto.
24139
24140         (Indexer): Ditto.
24141
24142         (Operator): Ditto.
24143
24144         * enum.cs (Emit): Ditto.
24145
24146         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
24147         Enums too.
24148
24149         * class.cs (Field, Event, etc.): Move attribute generation into the
24150         Emit method everywhere.
24151
24152         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
24153         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
24154         as we had no way of defining nested enums !
24155
24156         * rootcontext.cs : Adjust code accordingly.
24157
24158         * typemanager.cs (AddEnumType): To keep track of enum types separately.
24159
24160 2001-11-07  Ravi Pratap  <ravi@ximian.com>
24161
24162         * expression.cs (EvalConstantExpression): Move into ecore.cs
24163
24164         * enum.cs (Enum): Rename some members and make them public and readonly
24165         according to our convention.
24166
24167         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
24168         nothing else.
24169
24170         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
24171
24172         (Enum::Emit): Write a simple version for now which doesn't try to compute
24173         expressions. I shall modify this to be more robust in just a while.
24174
24175         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
24176
24177         (TypeContainer::CloseType): Create the Enum types too.
24178
24179         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
24180
24181         * expression.cs (EvalConstantExpression): Get rid of completely.
24182
24183         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
24184         user-defined values and other cases.
24185
24186         (IsValidEnumLiteral): Helper function.
24187
24188         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
24189         out there in the case we had a literal FieldExpr.
24190
24191         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
24192
24193         (Literalize): Revamp a bit to take two arguments.
24194
24195         (EnumLiteral): New class which derives from Literal to wrap enum literals.
24196
24197 2001-11-06  Ravi Pratap  <ravi@ximian.com>
24198
24199         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
24200
24201         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
24202
24203         (Resolve): Use the above to ensure we have proper initializers.
24204
24205 2001-11-05  Ravi Pratap  <ravi@ximian.com>
24206
24207         * expression.cs (Expression::EvalConstantExpression): New method to 
24208         evaluate constant expressions.
24209
24210         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
24211
24212 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
24213
24214         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
24215         in an array.
24216
24217         (Binary.ResolveOperator): Handle operator != (object a, object b)
24218         and operator == (object a, object b);
24219
24220         (Binary.DoNumericPromotions): Indicate whether the numeric
24221         promotion was possible.
24222
24223         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
24224         Implement.  
24225
24226         Made the ArrayAccess implement interface IAssignMethod instead of
24227         IStackStore as the order in which arguments are passed reflects
24228         this.
24229
24230         * assign.cs: Instead of using expr.ExprClass to select the way of
24231         assinging, probe for the IStackStore/IAssignMethod interfaces.
24232
24233         * typemanager.cs: Load InitializeArray definition.
24234
24235         * rootcontext.cs (RootContext.MakeStaticData): Used to define
24236         static data that can be used to initialize arrays. 
24237
24238 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
24239
24240         * expression.cs: Handle operator== and operator!= for booleans.
24241
24242         (Conditioal.Reduce): Implement reducer for the ?: operator.
24243
24244         (Conditional.Resolve): Implement dead code elimination.
24245
24246         (Binary.Resolve): Catch string literals and return a new
24247         concatenated string.
24248
24249         (Unary.Reduce): Implement reduction of unary expressions.
24250
24251         * ecore.cs: Split out the expression core handling here.
24252
24253         (Expression.Reduce): New method used to perform constant folding
24254         and CSE.  This is needed to support constant-expressions. 
24255
24256         * statement.cs (Statement.EmitBoolExpression): Pass true and false
24257         targets, and optimize for !x.
24258
24259 2001-11-04  Ravi Pratap  <ravi@ximian.com>
24260
24261         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
24262         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
24263         set custom atttributes.
24264
24265         * literal.cs (Literal::GetValue): New abstract method to return the actual
24266         value of the literal, cast as an object.
24267
24268         (*Literal): Implement GetValue method.
24269
24270         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
24271         expressions to the arraylist but objects of type Argument.
24272
24273         * class.cs (TypeContainer::Emit): Emit our attributes too.
24274
24275         (Method::Emit, Constructor::Emit): Ditto.
24276
24277         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
24278         to be ignoring earlier.
24279
24280 2001-11-03  Ravi Pratap  <ravi@ximian.com>
24281
24282         * attribute.cs (AttributeSection::Define): Implement to do the business
24283         of constructing a CustomAttributeBuilder.
24284
24285         (Attribute): New trivial class. Increases readability of code.  
24286
24287         * cs-parser.jay : Update accordingly.
24288
24289         (positional_argument_list, named_argument_list, named_argument): New rules
24290
24291         (attribute_arguments): Use the above so that we are more correct.
24292
24293 2001-11-02  Ravi Pratap  <ravi@ximian.com>
24294
24295         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
24296         to perform all checks for a method with a params parameter.
24297
24298         (Invocation::OverloadResolve): Update to use the above method and therefore
24299         cope correctly with params method invocations.
24300
24301         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
24302         params too.
24303
24304         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
24305         constructors in our parent too because we can't afford to miss out on 
24306         protected ones ;-)
24307
24308         * attribute.cs (AttributeSection): New name for the class Attribute
24309
24310         Other trivial changes to improve readability.
24311
24312         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
24313         use the new class names.
24314
24315 2001-11-01  Ravi Pratap  <ravi@ximian.com>
24316
24317         * class.cs (Method::Define): Complete definition for params types too
24318
24319         (Indexer::Define): Ditto.
24320
24321         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
24322         Cope everywhere with a request for info about the array parameter.
24323
24324 2001-11-01  Ravi Pratap  <ravi@ximian.com>
24325
24326         * tree.cs (RecordNamespace): Fix up to check for the correct key.
24327
24328         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
24329         local_variable_type to extract the string corresponding to the type.
24330
24331         (local_variable_type): Fixup the action to use the new helper method.
24332
24333         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
24334         go.
24335
24336         * expression.cs : Clean out code which uses the above.
24337
24338 2001-10-31  Ravi Pratap  <ravi@ximian.com>
24339
24340         * typemanager.cs (RegisterMethod): Check if we already have an existing key
24341         and bale out if necessary by returning a false.
24342
24343         (RegisterProperty): Ditto.
24344
24345         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
24346         and print out appropriate error messages.
24347
24348         * interface.cs (everywhere): Ditto.
24349
24350         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
24351         location to constructor.
24352
24353         * class.cs (Property, Event, Indexer): Update accordingly.
24354
24355         * ../errors/cs111.cs : Added.
24356
24357         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
24358         of a method, as laid down by the spec.
24359
24360         (Invocation::OverloadResolve): Use the above method.
24361
24362 2001-10-31  Ravi Pratap  <ravi@ximian.com>
24363
24364         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
24365         now take a TypeContainer and a Parameters object.
24366
24367         (ParameterData): Modify return type of ParameterModifier method to be 
24368         Parameter.Modifier and not a string.
24369
24370         (ReflectionParameters, InternalParameters): Update accordingly.
24371
24372         * expression.cs (Argument::GetParameterModifier): Same here.
24373
24374         * support.cs (InternalParameters::ParameterType): Find a better way of determining
24375         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
24376         symbol in it at all so maybe this is only for now.
24377
24378 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24379
24380         * support.cs (InternalParameters): Constructor now takes an extra argument 
24381         which is the actual Parameters class.
24382
24383         (ParameterDesc): Update to provide info on ref/out modifiers.
24384
24385         * class.cs (everywhere): Update call to InternalParameters to pass in
24386         the second argument too.
24387
24388         * support.cs (ParameterData): Add ParameterModifier, which is a method 
24389         to return the modifier info [ref/out etc]
24390
24391         (InternalParameters, ReflectionParameters): Implement the above.
24392
24393         * expression.cs (Argument::ParameterModifier): Similar function to return
24394         info about the argument's modifiers.
24395
24396         (Invocation::OverloadResolve): Update to take into account matching modifiers 
24397         too.
24398
24399         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
24400         a new SetFormalParameters object which we pass to InternalParameters.
24401
24402 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24403
24404         * expression.cs (NewArray): Merge into the ArrayCreation class.
24405
24406 2001-10-29  Ravi Pratap  <ravi@ximian.com>
24407
24408         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
24409         NewUserdefinedArray into one as there wasn't much of a use in having
24410         two separate ones.
24411
24412         * expression.cs (Argument): Change field's name to ArgType from Type.
24413
24414         (Type): New readonly property which returns the proper type, taking into 
24415         account ref/out modifiers.
24416
24417         (everywhere): Adjust code accordingly for the above.
24418
24419         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
24420         whether we are emitting for a ref or out parameter.
24421
24422         * expression.cs (Argument::Emit): Use the above field to set the state.
24423
24424         (LocalVariableReference::Emit): Update to honour the flag and emit the
24425         right stuff.
24426
24427         * parameter.cs (Attributes): Set the correct flags for ref parameters.
24428
24429         * expression.cs (Argument::FullDesc): New function to provide a full desc.
24430
24431         * support.cs (ParameterData): Add method ParameterDesc to the interface.
24432
24433         (ReflectionParameters, InternalParameters): Implement the above method.
24434
24435         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
24436         reporting errors.
24437
24438         (Invocation::FullMethodDesc): Ditto. 
24439
24440 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
24441
24442         * cs-parser.jay: Add extra production for the second form of array
24443         creation. 
24444
24445         * expression.cs (ArrayCreation): Update to reflect the above
24446         change. 
24447
24448         * Small changes to prepare for Array initialization.
24449
24450 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
24451
24452         * typemanager.cs (ImplementsInterface): interface might be null;
24453         Deal with this problem;
24454
24455         Also, we do store negative hits on the cache (null values), so use
24456         this instead of calling t.GetInterfaces on the type everytime.
24457
24458 2001-10-28  Ravi Pratap  <ravi@ximian.com>
24459
24460         * typemanager.cs (IsBuiltinType): New method to help determine the same.
24461
24462         * expression.cs (New::DoResolve): Get rid of array creation code and instead
24463         split functionality out into different classes.
24464
24465         (New::FormArrayType): Move into NewBuiltinArray.
24466
24467         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
24468         quite useless.
24469
24470         (NewBuiltinArray): New class to handle creation of built-in arrays.
24471
24472         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
24473         account creation of one-dimensional arrays.
24474
24475         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
24476
24477         (NewUserdefinedArray::DoResolve): Implement.
24478
24479         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
24480
24481         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
24482         we maintain inside the TypeManager. This is necessary to perform lookups on the
24483         module builder.
24484
24485         (LookupType): Update to perform GetType on the module builders too.     
24486
24487         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
24488
24489         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
24490
24491 2001-10-23  Ravi Pratap  <ravi@ximian.com>
24492
24493         * expression.cs (New::DoResolve): Implement guts of array creation.
24494
24495         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
24496
24497 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
24498
24499         * expression.cs: Fix bug I introduced lsat night that broke
24500         Delegates. 
24501
24502         (Expression.Resolve): Report a 246 error (can not resolve name)
24503         if we find a SimpleName in the stream.
24504
24505         (Expression.ResolveLValue): Ditto.
24506
24507         (Expression.ResolveWithSimpleName): This function is a variant of
24508         ResolveName, this one allows SimpleNames to be returned without a
24509         warning.  The only consumer of SimpleNames is MemberAccess
24510
24511 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
24512
24513         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
24514         might arrive here.  I have my doubts that this is correct.
24515
24516         * statement.cs (Lock): Implement lock statement.
24517
24518         * cs-parser.jay: Small fixes to support `lock' and `using'
24519
24520         * cs-tokenizer.cs: Remove extra space
24521
24522         * driver.cs: New flag --checked, allows to turn on integer math
24523         checking. 
24524
24525         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
24526         Threading.Monitor.Exit 
24527
24528 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
24529
24530         * expression.cs (IndexerAccess::DoResolveLValue): Set the
24531         Expression Class to be IndexerAccess.
24532
24533         Notice that Indexer::DoResolve sets the eclass to Value.
24534
24535 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
24536
24537         * class.cs (TypeContainer::Emit): Emit code for indexers.
24538
24539         * assign.cs (IAssignMethod): New interface implemented by Indexers
24540         and Properties for handling assignment.
24541
24542         (Assign::Emit): Simplify and reuse code. 
24543
24544         * expression.cs (IndexerAccess, PropertyExpr): Implement
24545         IAssignMethod, clean up old code. 
24546
24547 2001-10-22  Ravi Pratap  <ravi@ximian.com>
24548
24549         * typemanager.cs (ImplementsInterface): New method to determine if a type
24550         implements a given interface. Provides a nice cache too.
24551
24552         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
24553         method.
24554
24555         (ConvertReferenceExplicit): Ditto.
24556
24557         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
24558         various methods, with correct names etc.
24559
24560         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
24561         Operator.UnaryNegation.
24562
24563         * cs-parser.jay (operator_declarator): Be a little clever in the case where
24564         we have a unary plus or minus operator.
24565
24566         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
24567         UnaryMinus.
24568
24569         * everywhere : update accordingly.
24570
24571         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
24572         respectively.
24573
24574         * class.cs (Method::Define): For the case where we are implementing a method
24575         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
24576         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
24577
24578 2001-10-21  Ravi Pratap  <ravi@ximian.com>
24579
24580         * interface.cs (FindMembers): Implement to work around S.R.E
24581         lameness.
24582
24583         * typemanager.cs (IsInterfaceType): Implement.
24584
24585         (FindMembers): Update to handle interface types too.
24586
24587         * expression.cs (ImplicitReferenceConversion): Re-write bits which
24588         use IsAssignableFrom as that is not correct - it doesn't work.
24589
24590         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
24591         and accordingly override EmitStatement.
24592
24593         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
24594         using the correct logic :-)
24595
24596 2001-10-19  Ravi Pratap  <ravi@ximian.com>
24597
24598         * ../errors/cs-11.cs : Add to demonstrate error -11 
24599
24600 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
24601
24602         * assign.cs (Assign::Resolve): Resolve right hand side first, and
24603         then pass this as a hint to ResolveLValue.
24604
24605         * expression.cs (FieldExpr): Add Location information
24606
24607         (FieldExpr::LValueResolve): Report assignment to readonly
24608         variable. 
24609
24610         (Expression::ExprClassFromMemberInfo): Pass location information.
24611
24612         (Expression::ResolveLValue): Add new method that resolves an
24613         LValue. 
24614
24615         (Expression::DoResolveLValue): Default invocation calls
24616         DoResolve. 
24617
24618         (Indexers): New class used to keep track of indexers in a given
24619         Type. 
24620
24621         (IStackStore): Renamed from LValue, as it did not really describe
24622         what this did.  Also ResolveLValue is gone from this interface and
24623         now is part of Expression.
24624
24625         (ElementAccess): Depending on the element access type
24626
24627         * typemanager.cs: Add `indexer_name_type' as a Core type
24628         (System.Runtime.CompilerServices.IndexerNameAttribute)
24629
24630         * statement.cs (Goto): Take a location.
24631
24632 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24633
24634         * delegate.cs (Delegate::VerifyDelegate): New method to verify
24635         if two delegates are compatible.
24636
24637         (NewDelegate::DoResolve): Update to take care of the case when
24638         we instantiate a delegate from another delegate.
24639
24640         * typemanager.cs (FindMembers): Don't even try to look up members
24641         of Delegate types for now.
24642
24643 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24644
24645         * delegate.cs (NewDelegate): New class to take care of delegate
24646         instantiation.
24647
24648         * expression.cs (New): Split the delegate related code out into 
24649         the NewDelegate class.
24650
24651         * delegate.cs (DelegateInvocation): New class to handle delegate 
24652         invocation.
24653
24654         * expression.cs (Invocation): Split out delegate related code into
24655         the DelegateInvocation class.
24656
24657 2001-10-17  Ravi Pratap  <ravi@ximian.com>
24658
24659         * expression.cs (New::DoResolve): Implement delegate creation fully
24660         and according to the spec.
24661
24662         (New::DoEmit): Update to handle delegates differently.
24663
24664         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
24665         because of which we were printing out arguments in reverse order !
24666
24667         * delegate.cs (VerifyMethod): Implement to check if the given method
24668         matches the delegate.
24669
24670         (FullDelegateDesc): Implement.
24671
24672         (VerifyApplicability): Implement.
24673
24674         * expression.cs (Invocation::DoResolve): Update to accordingly handle
24675         delegate invocations too.
24676
24677         (Invocation::Emit): Ditto.
24678
24679         * ../errors/cs1593.cs : Added.
24680
24681         * ../errors/cs1594.cs : Added.
24682
24683         * delegate.cs (InstanceExpression, TargetMethod): New properties.
24684
24685 2001-10-16  Ravi Pratap  <ravi@ximian.com>
24686
24687         * typemanager.cs (intptr_type): Core type for System.IntPtr
24688
24689         (InitCoreTypes): Update for the same.
24690
24691         (iasyncresult_type, asynccallback_type): Ditto.
24692
24693         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
24694         correct.
24695
24696         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
24697         too.
24698
24699         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
24700         the builders for the 4 members of a delegate type :-)
24701
24702         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
24703         type.
24704
24705         * expression.cs (New::DoResolve): Implement guts for delegate creation.
24706
24707         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
24708
24709 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
24710
24711         * statement.cs (Break::Emit): Implement.   
24712         (Continue::Emit): Implement.
24713
24714         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24715         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24716         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24717         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
24718         end loop
24719
24720         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
24721         properties that track the label for the current loop (begin of the
24722         loop and end of the loop).
24723
24724 2001-10-15  Ravi Pratap  <ravi@ximian.com>
24725
24726         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
24727         use of emitting anything at all.
24728
24729         * class.cs, rootcontext.cs : Get rid of calls to the same.
24730
24731         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
24732
24733         (Populate): Define the constructor correctly and set the implementation
24734         attributes.
24735
24736         * typemanager.cs (delegate_types): New hashtable to hold delegates that
24737         have been defined.
24738
24739         (AddDelegateType): Implement.
24740
24741         (IsDelegateType): Implement helper method.
24742
24743         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
24744
24745         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
24746         and accordingly handle it.
24747
24748         * delegate.cs (Populate): Take TypeContainer argument.
24749         Implement bits to define the Invoke method. However, I still haven't figured out
24750         how to take care of the native int bit :-(
24751
24752         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
24753         Qualify the name of the delegate, not its return type !
24754
24755         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
24756         conversion.
24757
24758         (StandardConversionExists): Checking for array types turns out to be recursive.
24759
24760         (ConvertReferenceExplicit): Implement array conversion.
24761
24762         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
24763
24764 2001-10-12  Ravi Pratap  <ravi@ximian.com>
24765
24766         * cs-parser.jay (delegate_declaration): Store the fully qualified
24767         name as it is a type declaration.
24768
24769         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
24770         readonly.
24771
24772         (DefineDelegate): Renamed from Define. Does the same thing essentially,
24773         as TypeContainer::DefineType.
24774
24775         (Populate): Method in which all the definition of the various methods (Invoke)
24776         etc is done.
24777
24778         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
24779         see.
24780
24781         (CloseDelegate): Finally creates the delegate.
24782
24783         * class.cs (TypeContainer::DefineType): Update to define delegates.
24784         (Populate, Emit and CloseType): Do the same thing here too.
24785
24786         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
24787         delegates in all these operations.
24788
24789 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
24790
24791         * expression.cs: LocalTemporary: a new expression used to
24792         reference a temporary that has been created.
24793
24794         * assign.cs: Handle PropertyAccess back here, so that we can
24795         provide the proper semantic access to properties.
24796
24797         * expression.cs (Expression::ConvertReferenceExplicit): Implement
24798         a few more explicit conversions. 
24799
24800         * modifiers.cs: `NEW' modifier maps to HideBySig.
24801
24802         * expression.cs (PropertyExpr): Make this into an
24803         ExpressionStatement, and support the EmitStatement code path. 
24804
24805         Perform get/set error checking, clean up the interface.
24806
24807         * assign.cs: recognize PropertyExprs as targets, and if so, turn
24808         them into toplevel access objects.
24809
24810 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
24811
24812         * expression.cs: PropertyExpr::PropertyExpr: use work around the
24813         SRE.
24814
24815         * typemanager.cs: Keep track here of our PropertyBuilders again to
24816         work around lameness in SRE.
24817
24818 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
24819
24820         * expression.cs (LValue::LValueResolve): New method in the
24821         interface, used to perform a second resolution pass for LValues. 
24822
24823         (This::DoResolve): Catch the use of this in static methods.
24824
24825         (This::LValueResolve): Implement.
24826
24827         (This::Store): Remove warning, assigning to `this' in structures
24828         is 
24829
24830         (Invocation::Emit): Deal with invocation of
24831         methods on value types.  We need to pass the address to structure
24832         methods rather than the object itself.  (The equivalent code to
24833         emit "this" for structures leaves the entire structure on the
24834         stack instead of a pointer to it). 
24835
24836         (ParameterReference::DoResolve): Compute the real index for the
24837         argument based on whether the method takes or not a `this' pointer
24838         (ie, the method is static).
24839
24840         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
24841         value types returned from functions when we need to invoke a
24842         method on the sturcture.
24843
24844
24845 2001-10-11  Ravi Pratap  <ravi@ximian.com>
24846
24847         * class.cs (TypeContainer::DefineType): Method to actually do the business of
24848         defining the type in the Modulebuilder or Typebuilder. This is to take
24849         care of nested types which need to be defined on the TypeBuilder using
24850         DefineNestedMethod.
24851
24852         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
24853         methods in RootContext, only ported to be part of TypeContainer.
24854
24855         (TypeContainer::GetInterfaceOrClass): Ditto.
24856
24857         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
24858
24859         * interface.cs (Interface::DefineInterface): New method. Does exactly
24860         what RootContext.CreateInterface did earlier, only it takes care of nested types 
24861         too.
24862
24863         (Interface::GetInterfaces): Move from RootContext here and port.
24864
24865         (Interface::GetInterfaceByName): Same here.
24866
24867         * rootcontext.cs (ResolveTree): Re-write.
24868
24869         (PopulateTypes): Re-write.
24870
24871         * class.cs (TypeContainer::Populate): Populate nested types too.
24872         (TypeContainer::Emit): Emit nested members too.
24873
24874         * typemanager.cs (AddUserType): Do not make use of the FullName property,
24875         instead just use the name argument passed in as it is already fully
24876         qualified.
24877
24878         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
24879         to TypeContainer mapping to see if a type is user-defined.
24880
24881         * class.cs (TypeContainer::CloseType): Implement. 
24882
24883         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
24884         the default constructor.
24885
24886         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
24887         twice.
24888
24889         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
24890
24891         * interface.cs (CloseType): Create the type here.
24892
24893         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
24894         the hierarchy.
24895
24896         Remove all the methods which are now in TypeContainer.
24897
24898 2001-10-10  Ravi Pratap  <ravi@ximian.com>
24899
24900         * delegate.cs (Define): Re-write bits to define the delegate
24901         correctly.
24902
24903 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
24904
24905         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
24906
24907         * expression.cs (ImplicitReferenceConversion): handle null as well
24908         as a source to convert to any reference type.
24909
24910         * statement.cs (Return): Perform any implicit conversions to
24911         expected return type.  
24912
24913         Validate use of return statement.  
24914
24915         * codegen.cs (EmitContext): Pass the expected return type here.
24916
24917         * class.cs (Method, Constructor, Property): Pass expected return
24918         type to EmitContext.
24919
24920 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
24921
24922         * expression.cs: Make DoResolve take an EmitContext instead of a
24923         TypeContainer.
24924
24925         Replaced `l' and `location' for `loc', for consistency.
24926
24927         (Error, Warning): Remove unneeded Tc argument.
24928
24929         * assign.cs, literal.cs, constant.cs: Update to new calling
24930         convention. 
24931
24932         * codegen.cs: EmitContext now contains a flag indicating whether
24933         code is being generated in a static method or not.
24934
24935         * cs-parser.jay: DecomposeQI, new function that replaces the old
24936         QualifiedIdentifier.  Now we always decompose the assembled
24937         strings from qualified_identifier productions into a group of
24938         memberaccesses.
24939
24940 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
24941
24942         * rootcontext.cs: Deal with field-less struct types correctly now
24943         by passing the size option to Define Type.
24944
24945         * class.cs: Removed hack that created one static field. 
24946
24947 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24948
24949         * statement.cs: Moved most of the code generation here. 
24950
24951 2001-10-09  Ravi Pratap  <ravi@ximian.com>
24952
24953         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
24954         seem very right.
24955
24956         (ElementAccess): Remove useless bits for now - keep checks as the spec
24957         says.
24958
24959 2001-10-08  Ravi Pratap  <ravi@ximian.com>
24960
24961         * expression.cs (ElementAccess::DoResolve): Remove my crap code
24962         and start performing checks according to the spec.
24963
24964 2001-10-07  Ravi Pratap  <ravi@ximian.com>
24965
24966         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
24967         rank_specifiers instead.
24968
24969         (rank_specifiers): Change the order in which the rank specifiers are stored
24970
24971         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
24972
24973         * expression.cs (ElementAccess): Implement the LValue interface too.
24974
24975 2001-10-06  Ravi Pratap  <ravi@ximian.com>
24976
24977         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
24978         except that user defined conversions are not included.
24979
24980         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
24981         perform the conversion of the return type, if necessary.
24982
24983         (New::DoResolve): Check whether we are creating an array or an object
24984         and accordingly do the needful.
24985
24986         (New::Emit): Same here.
24987
24988         (New::DoResolve): Implement guts of array creation.
24989
24990         (New::FormLookupType): Helper function.
24991
24992 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24993
24994         * codegen.cs: Removed most of the code generation here, and move the
24995         corresponding code generation bits to the statement classes. 
24996
24997         Added support for try/catch/finalize and throw.
24998
24999         * cs-parser.jay: Added support for try/catch/finalize.
25000
25001         * class.cs: Catch static methods having the flags override,
25002         virtual or abstract.
25003
25004         * expression.cs (UserCast): This user cast was not really doing
25005         what it was supposed to do.  Which is to be born in fully resolved
25006         state.  Parts of the resolution were being performed at Emit time! 
25007
25008         Fixed this code.
25009
25010 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
25011
25012         * expression.cs: Implicity convert the result from UserCast.
25013
25014 2001-10-05  Ravi Pratap  <ravi@ximian.com>
25015
25016         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
25017         prevented it from working correctly. 
25018
25019         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
25020         merely ConvertImplicit.
25021
25022 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
25023
25024         * typemanager.cs: Make the LookupTypeContainer function static,
25025         and not per-instance.  
25026
25027         * class.cs: Make static FindMembers (the one that takes a Type
25028         argument). 
25029
25030         * codegen.cs: Add EmitForeach here.
25031
25032         * cs-parser.jay: Make foreach a toplevel object instead of the
25033         inline expansion, as we need to perform semantic analysis on it. 
25034
25035 2001-10-05  Ravi Pratap  <ravi@ximian.com>
25036
25037         * expression.cs (Expression::ImplicitUserConversion): Rename to
25038         UserDefinedConversion.
25039
25040         (Expression::UserDefinedConversion): Take an extra argument specifying 
25041         whether we look for explicit user conversions too.
25042
25043         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
25044
25045         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
25046
25047         (ExplicitUserConversion): Make it a call to UserDefinedConversion
25048         with the appropriate arguments.
25049
25050         * cs-parser.jay (cast_expression): Record location too.
25051
25052         * expression.cs (Cast): Record location info.
25053
25054         (Expression::ConvertExplicit): Take location argument.
25055
25056         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
25057         to determine if we are doing explicit conversions.
25058
25059         (UserCast::Emit): Update accordingly.
25060
25061         (Expression::ConvertExplicit): Report an error if everything fails.
25062
25063         * ../errors/cs0030.cs : Add.
25064
25065 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
25066
25067         * modifiers.cs: If the ABSTRACT keyword is present, also set the
25068         virtual and newslot bits. 
25069
25070         * class.cs (TypeContainer::RegisterRequiredImplementations):
25071         Record methods we need.
25072
25073         (TypeContainer::MakeKey): Helper function to make keys for
25074         MethodBases, since the Methodbase key is useless.
25075
25076         (TypeContainer::Populate): Call RegisterRequiredImplementations
25077         before defining the methods.   
25078
25079         Create a mapping for method_builders_to_methods ahead of time
25080         instead of inside a tight loop.
25081
25082         (::RequireMethods):  Accept an object as the data to set into the
25083         hashtable so we can report interface vs abstract method mismatch.
25084
25085 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
25086
25087         * report.cs: Make all of it static.
25088
25089         * rootcontext.cs: Drop object_type and value_type computations, as
25090         we have those in the TypeManager anyways.
25091
25092         Drop report instance variable too, now it is a global.
25093
25094         * driver.cs: Use try/catch on command line handling.
25095
25096         Add --probe option to debug the error reporting system with a test
25097         suite. 
25098
25099         * report.cs: Add support for exiting program when a probe
25100         condition is reached.
25101
25102 2001-10-03  Ravi Pratap  <ravi@ximian.com>
25103
25104         * expression.cs (Binary::DoNumericPromotions): Fix the case when
25105         we do a forcible conversion regardless of type, to check if 
25106         ForceConversion returns a null.
25107
25108         (Binary::error19): Use location to report error.
25109
25110         (Unary::error23): Use location here too.
25111
25112         * ../errors/cs0019.cs : Check in.
25113
25114         * ../errors/cs0023.cs : Check in.
25115
25116         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
25117         case of a non-null MethodInfo object with a length of 0 !
25118
25119         (Binary::ResolveOperator): Flag error if overload resolution fails to find
25120         an applicable member - according to the spec :-)
25121         Also fix logic to find members in base types.
25122
25123         (Unary::ResolveOperator): Same here.
25124
25125         (Unary::report23): Change name to error23 and make first argument a TypeContainer
25126         as I was getting thoroughly confused between this and error19 :-)
25127
25128         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
25129         (::FindMostEncompassedType): Implement.
25130         (::FindMostEncompassingType): Implement.
25131         (::StandardConversionExists): Implement.
25132
25133         (UserImplicitCast): Re-vamp. We now need info about most specific
25134         source and target types so that we can do the necessary conversions.
25135
25136         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
25137         mathematical union with no duplicates.
25138
25139 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
25140
25141         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
25142         in order from base classes to child classes, so that we can in
25143         child classes look up in our parent for method names and
25144         attributes (required for handling abstract, virtual, new, override
25145         constructs: we need to instrospect our base class, and if we dont
25146         populate the classes in order, the introspection might be
25147         incorrect.  For example, a method could query its parent before
25148         the parent has any methods and would determine that the parent has
25149         no abstract methods (while it could have had them)).
25150
25151         (RootContext::CreateType): Record the order in which we define the
25152         classes.
25153
25154 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
25155
25156         * class.cs (TypeContainer::Populate): Also method definitions can
25157         fail now, keep track of this.
25158
25159         (TypeContainer::FindMembers): Implement support for
25160         DeclaredOnly/noDeclaredOnly flag.
25161
25162         (Constructor::Emit) Return the ConstructorBuilder.
25163
25164         (Method::Emit) Return the MethodBuilder. 
25165         Check for abstract or virtual methods to be public.
25166
25167         * rootcontext.cs (RootContext::CreateType): Register all the
25168         abstract methods required for the class to be complete and the
25169         interface methods that must be implemented. 
25170
25171         * cs-parser.jay: Report error 501 (method requires body if it is
25172         not marked abstract or extern).
25173
25174         * expression.cs (TypeOf::Emit): Implement.
25175
25176         * typemanager.cs: runtime_handle_type, new global type.
25177
25178         * class.cs (Property::Emit): Generate code for properties.
25179
25180 2001-10-02  Ravi Pratap  <ravi@ximian.com>
25181
25182         * expression.cs (Unary::ResolveOperator): Find operators on base type
25183         too - we now conform exactly to the spec.
25184
25185         (Binary::ResolveOperator): Same here.
25186
25187         * class.cs (Operator::Define): Fix minor quirk in the tests.
25188
25189         * ../errors/cs0215.cs : Added.
25190
25191         * ../errors/cs0556.cs : Added.
25192
25193         * ../errors/cs0555.cs : Added.
25194
25195 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
25196
25197         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
25198         single integer which is really efficient
25199
25200 2001-10-01  Ravi Pratap  <ravi@ximian.com>
25201
25202         *  expression.cs (Expression::ImplicitUserConversion): Use location
25203         even in the case when we are examining True operators.
25204  
25205         * class.cs (Operator::Define): Perform extensive checks to conform
25206         with the rules for operator overloading in the spec.
25207
25208         * expression.cs (Expression::ImplicitReferenceConversion): Implement
25209         some of the other conversions mentioned in the spec.
25210
25211         * typemanager.cs (array_type): New static member for the System.Array built-in
25212         type.
25213
25214         (cloneable_interface): For System.ICloneable interface.
25215
25216         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
25217         we start resolving the tree and populating types.
25218
25219         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
25220  
25221 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
25222
25223         * expression.cs (Expression::ExprClassFromMemberInfo,
25224         Expression::Literalize): Create literal expressions from
25225         FieldInfos which are literals.
25226
25227         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
25228         type casts, because they were wrong.  The test suite in tests
25229         caught these ones.
25230
25231         (ImplicitNumericConversion): ushort to ulong requires a widening
25232         cast. 
25233
25234         Int32 constant to long requires widening cast as well.
25235
25236         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
25237         for integers because the type on the stack is not i4.
25238
25239 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
25240
25241         * expression.cs (report118): require location argument. 
25242
25243         * parameter.cs: Do not dereference potential null value.
25244
25245         * class.cs: Catch methods that lack the `new' keyword when
25246         overriding a name.  Report warnings when `new' is used without
25247         anything being there to override.
25248
25249         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
25250
25251         * class.cs: Only add constructor to hashtable if it is non-null
25252         (as now constructors can fail on define).
25253
25254         (TypeManager, Class, Struct): Take location arguments.
25255
25256         Catch field instance initialization in structs as errors.
25257
25258         accepting_filter: a new filter for FindMembers that is static so
25259         that we dont create an instance per invocation.
25260
25261         (Constructor::Define): Catch errors where a struct constructor is
25262         parameterless 
25263
25264         * cs-parser.jay: Pass location information for various new
25265         constructs. 
25266
25267         * delegate.cs (Delegate): take a location argument.
25268
25269         * driver.cs: Do not call EmitCode if there were problesm in the
25270         Definition of the types, as many Builders wont be there. 
25271
25272         * decl.cs (Decl::Decl): Require a location argument.
25273
25274         * cs-tokenizer.cs: Handle properly hex constants that can not fit
25275         into integers, and find the most appropiate integer for it.
25276
25277         * literal.cs: Implement ULongLiteral.
25278
25279         * rootcontext.cs: Provide better information about the location of
25280         failure when CreateType fails.
25281
25282 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
25283
25284         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
25285         as well.
25286
25287         * expression.cs (Binary::CheckShiftArguments): Add missing type
25288         computation.
25289         (Binary::ResolveOperator): Add type to the logical and and logical
25290         or, Bitwise And/Or and Exclusive Or code paths, it was missing
25291         before.
25292
25293         (Binary::DoNumericPromotions): In the case where either argument
25294         is ulong (and most signed types combined with ulong cause an
25295         error) perform implicit integer constant conversions as well.
25296
25297 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
25298
25299         * expression.cs (UserImplicitCast): Method should always be
25300         non-null. 
25301         (Invocation::BetterConversion): Simplified test for IntLiteral.
25302
25303         (Expression::ImplicitNumericConversion): Split this routine out.
25304         Put the code that performs implicit constant integer conversions
25305         here. 
25306
25307         (Expression::Resolve): Become a wrapper around DoResolve so we can
25308         check eclass and type being set after resolve.
25309
25310         (Invocation::Badness): Remove this dead function
25311
25312         (Binary::ResolveOperator): Do not compute the expensive argumnets
25313         unless we have a union for it.
25314
25315         (Probe::Emit): Is needs to do an isinst and then
25316         compare against null.
25317
25318         (::CanConvert): Added Location argument.  If the Location argument
25319         is null (Location.Null), then we do not report errors.  This is
25320         used by the `probe' mechanism of the Explicit conversion.  We do
25321         not want to generate an error for something that the user
25322         explicitly requested to be casted.  But the pipeline for an
25323         explicit cast first tests for potential implicit casts.
25324
25325         So for now, if the Location is null, it means `Probe only' to
25326         avoid adding another argument.   Might have to revise this
25327         strategy later.
25328
25329         (ClassCast): New class used to type cast objects into arbitrary
25330         classes (used in Explicit Reference Conversions).
25331
25332         Implement `as' as well.
25333
25334         Reverted all the patches from Ravi below: they were broken:
25335
25336                 * The use of `level' as a mechanism to stop recursive
25337                   invocations is wrong.  That was there just to catch the
25338                   bug with a strack trace but not as a way of addressing
25339                   the problem.
25340
25341                   To fix the problem we have to *understand* what is going
25342                   on and the interactions and come up with a plan, not
25343                   just get things going.
25344
25345                 * The use of the type conversion cache that I proposed
25346                   last night had an open topic: How does this work across
25347                   protection domains.  A user defined conversion might not
25348                   be public in the location where we are applying the
25349                   conversion, a different conversion might be selected
25350                   (ie, private A->B (better) but public B->A (worse),
25351                   inside A, A->B applies, but outside it, B->A will
25352                   apply).
25353
25354                 * On top of that (ie, even if the above is solved),
25355                   conversions in a cache need to be abstract.  Ie, `To
25356                   convert from an Int to a Short use an OpcodeCast', not
25357                   `To convert from an Int to a Short use the OpcodeCast on
25358                   the variable 5' (which is what this patch was doing).
25359
25360 2001-09-28  Ravi Pratap  <ravi@ximian.com>
25361
25362         * expression.cs (Invocation::ConversionExists): Re-write to use
25363         the conversion cache
25364
25365         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
25366         cache all conversions done, not just user-defined ones.
25367
25368         (Invocation::BetterConversion): The real culprit. Use ConversionExists
25369         to determine if a conversion exists instead of acutually trying to 
25370         perform the conversion. It's faster too.
25371
25372         (Expression::ConvertExplicit): Modify to use ConversionExists to check
25373         and only then attempt the implicit conversion.
25374
25375 2001-09-28  Ravi Pratap  <ravi@ximian.com>
25376
25377         * expression.cs (ConvertImplicit): Use a cache for conversions
25378         already found. Check level of recursion and bail out if necessary.
25379
25380 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
25381
25382         * typemanager.cs (string_concat_string_string, string_concat_object_object):
25383         Export standard methods that we expect for string operations.
25384
25385         * statement.cs (Block::UsageWarning): Track usage of variables and
25386         report the errors for not used variables.
25387
25388         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
25389         operator. 
25390
25391 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25392
25393         * codegen.cs: remove unnneded code 
25394
25395         * expression.cs: Removed BuiltinTypeAccess class
25396
25397         Fix the order in which implicit conversions are
25398         done.  
25399
25400         The previous fixed dropped support for boxed conversions (adding a
25401         test to the test suite now)
25402
25403         (UserImplicitCast::CanConvert): Remove test for source being null,
25404         that code is broken.  We should not feed a null to begin with, if
25405         we do, then we should track the bug where the problem originates
25406         and not try to cover it up here.
25407
25408         Return a resolved expression of type UserImplicitCast on success
25409         rather than true/false.  Ravi: this is what I was talking about,
25410         the pattern is to use a static method as a "constructor" for
25411         objects. 
25412
25413         Also, do not create arguments until the very last minute,
25414         otherwise we always create the arguments even for lookups that
25415         will never be performed. 
25416
25417         (UserImplicitCast::Resolve): Eliminate, objects of type
25418         UserImplicitCast are born in a fully resolved state. 
25419
25420         * typemanager.cs (InitCoreTypes): Init also value_type
25421         (System.ValueType). 
25422
25423         * expression.cs (Cast::Resolve): First resolve the child expression.
25424
25425         (LValue): Add new method AddressOf to be used by
25426         the `&' operator.  
25427
25428         Change the argument of Store to take an EmitContext instead of an
25429         ILGenerator, because things like FieldExpr need to be able to call
25430         their children expression to generate the instance code. 
25431
25432         (Expression::Error, Expression::Warning): Sugar functions for
25433         reporting errors.
25434
25435         (Expression::MemberLookup): Accept a TypeContainer instead of a
25436         Report as the first argument.
25437
25438         (Expression::ResolvePrimary): Killed.  I still want to improve
25439         this as currently the code is just not right.
25440
25441         (Expression::ResolveMemberAccess): Simplify, but it is still
25442         wrong. 
25443
25444         (Unary::Resolve): Catch errors in AddressOf operators.
25445
25446         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
25447         index to a byte for the short-version, or the compiler will choose
25448         the wrong Emit call, which generates the wrong data.
25449
25450         (ParameterReference::Emit, ::Store): same.
25451
25452         (FieldExpr::AddressOf): Implement.
25453
25454         * typemanager.cs: TypeManager: made public variable instead of
25455         property.
25456
25457         * driver.cs: document --fatal.
25458
25459         * report.cs (ErrorMessage, WarningMessage): new names for the old
25460         Error and Warning classes.
25461
25462         * cs-parser.jay (member_access): Turn built-in access to types
25463         into a normal simplename
25464
25465 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25466
25467         * expression.cs (Invocation::BetterConversion): Fix to cope
25468         with q being null, since this was introducing a bug.
25469
25470         * expression.cs (ConvertImplicit): Do built-in conversions first.
25471
25472 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25473
25474         * expression.cs (UserImplicitCast::Resolve): Fix bug.
25475
25476 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25477
25478         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
25479         I had introduced long ago (what's new ?).
25480
25481         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
25482         the work of all the checking. 
25483         (ConvertImplicit): Call CanConvert and only then create object if necessary.
25484         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
25485
25486         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
25487         that is the right way. 
25488
25489         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
25490         overloading resolution. Use everywhere instead of cutting and pasting code.
25491
25492         (Binary::ResolveOperator): Use MakeUnionSet.
25493
25494         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
25495         we have to convert to bool types. Not complete yet.
25496
25497 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25498
25499         * typemanager.cs (TypeManager::CSharpName): support ushort.
25500
25501         * expression.cs (Expression::TryImplicitIntConversion): Attempts
25502         to provide an expression that performsn an implicit constant int
25503         conversion (section 6.1.6).
25504         (Expression::ConvertImplicitRequired): Reworked to include
25505         implicit constant expression conversions.
25506
25507         (Expression::ConvertNumericExplicit): Finished.
25508
25509         (Invocation::Emit): If InstanceExpression is null, then it means
25510         that we perform a call on this.
25511
25512 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25513
25514         * expression.cs (Unary::Emit): Remove some dead code.
25515         (Probe): Implement Resolve and Emit for `is'.
25516         (Expression::ConvertImplicitRequired): Attempt to do constant
25517         expression conversions here.  Maybe should be moved to
25518         ConvertImplicit, but I am not sure.
25519         (Expression::ImplicitLongConstantConversionPossible,
25520         Expression::ImplicitIntConstantConversionPossible): New functions
25521         that tell whether is it possible to apply an implicit constant
25522         expression conversion.
25523
25524         (ConvertNumericExplicit): Started work on explicit numeric
25525         conversions.
25526
25527         * cs-parser.jay: Update operator constants.
25528
25529         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
25530         (Parameters::GetSignature): Hook up VerifyArgs here.
25531         (Parameters::VerifyArgs): Verifies that no two arguments have the
25532         same name. 
25533
25534         * class.cs (Operator): Update the operator names to reflect the
25535         ones that the spec expects (as we are just stringizing the
25536         operator names).
25537
25538         * expression.cs (Unary::ResolveOperator): Fix bug: Use
25539         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
25540         previous usage did only work for our methods.
25541         (Expression::ConvertImplicit): Handle decimal implicit numeric
25542         conversions as well.
25543         (Expression::InternalTypeConstructor): Used to invoke constructors
25544         on internal types for default promotions.
25545
25546         (Unary::Emit): Implement special handling for the pre/post
25547         increment/decrement for overloaded operators, as they need to have
25548         the same semantics as the other operators.
25549
25550         (Binary::ResolveOperator): ditto.
25551         (Invocation::ConversionExists): ditto.
25552         (UserImplicitCast::Resolve): ditto.
25553
25554 2001-09-26  Ravi Pratap  <ravi@ximian.com>
25555
25556         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
25557         operator, return after emitting body. Regression tests pass again !
25558
25559         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
25560         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
25561         (Invocation::OverloadResolve): Ditto.
25562         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
25563
25564         * everywhere : update calls to the above methods accordingly.
25565
25566 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25567
25568         * assign.cs (Assign): Make it inherit from ExpressionStatement.
25569
25570         * expression.cs (ExpressionStatement): New base class used for
25571         expressions that can appear in statements, so that we can provide
25572         an alternate path to generate expression that do not leave a value
25573         on the stack.
25574
25575         (Expression::Emit, and all the derivatives): We no longer return
25576         whether a value is left on the stack or not.  Every expression
25577         after being emitted leaves a single value on the stack.
25578
25579         * codegen.cs (EmitContext::EmitStatementExpression): Use the
25580         facilties of ExpressionStatement if possible.
25581
25582         * cs-parser.jay: Update statement_expression.
25583
25584 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
25585
25586         * driver.cs: Change the wording of message
25587
25588 2001-09-25  Ravi Pratap  <ravi@ximian.com>
25589
25590         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
25591         the type of the expression to the return type of the method if
25592         we have an overloaded operator match ! The regression tests pass again !
25593         (Unary::ResolveOperator): Ditto.
25594
25595         * expression.cs (Invocation::ConversionExists): Correct the member lookup
25596         to find "op_Implicit", not "implicit" ;-)
25597         (UserImplicitCast): New class to take care of user-defined implicit conversions.
25598         (ConvertImplicit, ForceConversion): Take TypeContainer argument
25599
25600         * everywhere : Correct calls to the above accordingly.
25601
25602         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
25603         (ConvertImplicit): Do user-defined conversion if it exists.
25604
25605 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
25606
25607         * assign.cs: track location.
25608         (Resolve): Use implicit conversions on assignment.
25609
25610         * literal.cs: Oops.  Not good, Emit of short access values should
25611         pass (Bytes) or the wrong argument will be selected.
25612
25613         * expression.cs (Unary::Emit): Emit code for -expr.
25614
25615         (Unary::ResolveOperator): Handle `Substract' for non-constants
25616         (substract from zero from the non-constants).
25617         Deal with Doubles as well. 
25618
25619         (Expression::ConvertImplicitRequired): New routine that reports an
25620         error if no implicit conversion exists. 
25621
25622         (Invocation::OverloadResolve): Store the converted implicit
25623         expressions if we make them
25624
25625 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25626
25627         * class.cs (ConstructorInitializer): Take a Location argument.
25628         (ConstructorBaseInitializer): Same here.
25629         (ConstructorThisInitializer): Same here.
25630
25631         * cs-parser.jay : Update all calls accordingly.
25632
25633         * expression.cs (Unary, Binary, New): Take location argument.
25634         Update accordingly everywhere.
25635
25636         * cs-parser.jay : Update all calls to the above to take a location
25637         argument.
25638
25639         * class.cs : Ditto.
25640
25641 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25642
25643         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
25644         (Invocation::BetterConversion): Same here
25645         (Invocation::ConversionExists): Ditto.
25646
25647         (Invocation::ConversionExists): Implement.
25648
25649 2001-09-22  Ravi Pratap  <ravi@ximian.com>
25650
25651         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
25652         Also take an additional TypeContainer argument.
25653
25654         * All over : Pass in TypeContainer as argument to OverloadResolve.
25655
25656         * typemanager.cs (CSharpName): Update to check for the string type and return
25657         that too.
25658
25659         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
25660         a given method.
25661
25662 2001-09-21  Ravi Pratap  <ravi@ximian.com>
25663
25664         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
25665         (Invocation::BetterFunction): Implement.
25666         (Invocation::BetterConversion): Implement.
25667         (Invocation::ConversionExists): Skeleton, no implementation yet.
25668
25669         Okay, things work fine !
25670
25671 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
25672
25673         * typemanager.cs: declare and load enum_type, delegate_type and
25674         void_type. 
25675
25676         * expression.cs (Expression::Emit): Now emit returns a value that
25677         tells whether a value is left on the stack or not.  This strategy
25678         might be reveted tomorrow with a mechanism that would address
25679         multiple assignments.
25680         (Expression::report118): Utility routine to report mismatches on
25681         the ExprClass.
25682
25683         (Unary::Report23): Report impossible type/operator combination
25684         utility function.
25685
25686         (Unary::IsIncrementableNumber): Whether the type can be
25687         incremented or decremented with add.
25688         (Unary::ResolveOperator): Also allow enumerations to be bitwise
25689         complemented. 
25690         (Unary::ResolveOperator): Implement ++, !, ~,
25691
25692         (Invocation::Emit): Deal with new Emit convetion.
25693
25694         * All Expression derivatives: Updated their Emit method to return
25695         whether they leave values on the stack or not.
25696
25697         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
25698         stack for expressions that are statements. 
25699
25700 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25701
25702         * expression.cs (LValue): New interface.  Must be implemented by
25703         LValue objects.
25704         (LocalVariableReference, ParameterReference, FieldExpr): Implement
25705         LValue interface.
25706
25707         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
25708         interface for generating code, simplifies the code.
25709
25710 2001-09-20  Ravi Pratap  <ravi@ximian.com>
25711
25712         * expression.cs (everywhere): Comment out return statements in ::Resolve
25713         methods to avoid the warnings.
25714
25715 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25716
25717         * driver.cs (parse): Report error 2001 if we can not open the
25718         source file.
25719
25720         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
25721         not resolve it.
25722
25723         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
25724         object. 
25725
25726         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
25727         otherwise nested blocks end up with the same index.
25728
25729         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
25730
25731         * expression.cs:  Instead of having FIXMEs in the Resolve
25732         functions, throw exceptions so it is obvious that we are facing a
25733         bug. 
25734
25735         * cs-parser.jay (invocation_expression): Pass Location information.
25736
25737         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
25738         Use a basename for those routines because .NET does not like paths
25739         on them. 
25740
25741         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
25742         already defined.
25743
25744 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
25745
25746         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
25747         are loading the correct data types (throws an exception if not).
25748         (TypeManager::InitCoreTypes): Use CoreLookupType
25749
25750         * expression.cs (Unary::ResolveOperator): return the child
25751         expression for expressions which are just +expr.
25752         (Unary::ResolveOperator): Return negative literals for -LITERAL
25753         expressions (otherwise they are Unary {Literal}).
25754         (Invocation::Badness): Take into account `Implicit constant
25755         expression conversions'.
25756
25757         * literal.cs (LongLiteral): Implement long literal class.
25758         (IntLiteral): export the `Value' of the intliteral. 
25759
25760 2001-09-19  Ravi Pratap  <ravi@ximian.com>
25761
25762         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
25763
25764         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
25765         instead of 'Operator'
25766
25767         * expression.cs (Binary::ResolveOperator): Update accordingly.
25768         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
25769         and 'Minus'
25770
25771         * cs-parser.jay (unary_expression): Update to use the new names.
25772
25773         * gen-treedump.cs (GetUnary): Same here.
25774
25775         * expression.cs (Unary::Resolve): Implement.
25776         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
25777         operators are found instead of making noise ;-)
25778         (Unary::ResolveOperator): New method to do precisely the same thing which
25779         Binary::ResolveOperator does for Binary expressions.
25780         (Unary.method, .Arguments): Add.
25781         (Unary::OperName): Implement.   
25782         (Unary::ForceConversion): Copy and Paste !
25783
25784         * class.cs (Operator::Define): Fix a small bug for the case when we have 
25785         a unary operator.
25786
25787         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
25788         for the inbuilt operators. Only overloading works for now ;-)
25789
25790 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
25791
25792         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
25793         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
25794
25795         * expression.cs (This::Emit): Implement. 
25796         (This::Resolve): Implement.
25797         (TypeOf:Resolve): Implement.
25798         (Expression::ResolveSimpleName): Add an implicit this to instance
25799         field references. 
25800         (MemberAccess::Resolve): Deal with Parameters and Fields. 
25801         Bind instance variable to Field expressions.
25802         (FieldExpr::Instance): New field used to track the expression that
25803         represents the object instance.
25804         (FieldExpr::Resolve): Track potential errors from MemberLookup not
25805         binding 
25806         (FieldExpr::Emit): Implement.
25807
25808         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
25809         the last instruction contains a return opcode to avoid generating
25810         the last `ret' instruction (this generates correct code, and it is
25811         nice to pass the peverify output).
25812
25813         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
25814         initializer for static and instance variables.
25815         (Constructor::Emit): Allow initializer to be null in the case of
25816         static constructors.  Only emit initializer for instance
25817         constructors. 
25818
25819         (TypeContainer::FindMembers): Return a null array if there are no
25820         matches.
25821
25822         Also fix the code for the MemberTypes.Method branch, as it was not
25823         scanning that for operators (or tried to access null variables before).
25824
25825         * assign.cs (Assign::Emit): Handle instance and static fields. 
25826
25827         * TODO: Updated.
25828
25829         * driver.cs: Stop compilation if there are parse errors.
25830
25831         * cs-parser.jay (constructor_declaration): Provide default base
25832         initializer for non-static constructors.
25833         (constructor_declarator): Do not provide a default base
25834         initializers if none was specified.
25835         Catch the fact that constructors should not have parameters.
25836
25837         * class.cs: Do not emit parent class initializers for static
25838         constructors, that should be flagged as an error.
25839
25840 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25841
25842         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
25843         Move back code into TypeContainer::Populate.
25844
25845 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25846
25847         * class.cs (TypeContainer::AddConstructor): Fix the check to
25848         compare against Name, not Basename. 
25849         (Operator::OpType): Change Plus and Minus to Add and Subtract.
25850
25851         * cs-parser.jay : Update accordingly.
25852
25853         * class.cs (TypeContainer::FindMembers): For the case where we are searching
25854         for methods, don't forget to look into the operators too.
25855         (RegisterMethodBuilder): Helper method to take care of this for
25856         methods, constructors and operators.
25857         (Operator::Define): Completely revamp.
25858         (Operator.OperatorMethod, MethodName): New fields.
25859         (TypeContainer::Populate): Move the registering of builders into
25860         RegisterMethodBuilder.
25861         (Operator::Emit): Re-write.
25862
25863         * expression.cs (Binary::Emit): Comment out code path to emit method
25864         invocation stuff for the case when we have a user defined operator. I am
25865         just not able to get it right !
25866
25867 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25868
25869         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
25870         argument. 
25871
25872         (Expression::MemberLookup): Provide a version that allows to
25873         specify the MemberTypes and BindingFlags. 
25874
25875         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
25876         so it was not fetching variable information from outer blocks.
25877
25878         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
25879         Beforefieldinit as it was buggy.
25880
25881         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
25882         that Ravi put here.  
25883
25884         * class.cs (Constructor::Emit): Only emit if block is not null.
25885         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
25886         deal with this by semantically definining it as if the user had
25887         done it.
25888
25889         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
25890         constructors as we now "emit" them at a higher level.
25891
25892         (TypeContainer::DefineDefaultConstructor): Used to define the
25893         default constructors if none was provided.
25894
25895         (ConstructorInitializer): Add methods Resolve and Emit. 
25896
25897         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
25898
25899 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25900
25901         * class.cs (TypeContainer::EmitDefaultConstructor): Register
25902         the default constructor builder with our hashtable for methodbuilders
25903         to methodcores.
25904
25905         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
25906         and argument_count is 0 in which case we have a match.
25907         (Binary::ResolveOperator): More null checking and miscellaneous coding
25908         style cleanup.
25909
25910 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25911
25912         * rootcontext.cs (IsNameSpace): Compare against null.
25913
25914         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
25915
25916         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
25917         and Unary::Operator.
25918
25919         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
25920         accordingly.
25921
25922         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
25923         we have overloaded operators.
25924         (Binary::ResolveOperator): Implement the part which does the operator overload
25925         resolution.
25926
25927         * class.cs (Operator::Emit): Implement.
25928         (TypeContainer::Emit): Emit the operators we have too.
25929
25930         * expression.cs (Binary::Emit): Update to emit the appropriate code for
25931         the case when we have a user-defined operator.
25932
25933 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25934
25935         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
25936
25937 2001-09-16  Ravi Pratap  <ravi@ximian.com>
25938
25939         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
25940         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
25941         (Constructor::Emit): Implement.
25942         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
25943         if we have no work to do. 
25944         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
25945         Emit method.
25946
25947         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
25948         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
25949
25950         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
25951         of parent.parent.
25952
25953 2001-09-15  Ravi Pratap  <ravi@ximian.com>
25954
25955         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
25956         in the source.
25957         (Tree::RecordNamespace): Method to do what the name says ;-)
25958         (Tree::Namespaces): Property to get at the namespaces hashtable.
25959
25960         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
25961         keep track.
25962
25963         * rootcontext.cs (IsNamespace): Fixed it :-)
25964
25965 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25966
25967         * class.cs (TypeContainer::FindMembers): Add support for
25968         constructors. 
25969         (MethodCore): New class that encapsulates both the shared aspects
25970         of a Constructor and a Method.  
25971         (Method, Constructor): Factored pieces into MethodCore.
25972
25973         * driver.cs: Added --fatal which makes errors throw exceptions.
25974         Load System assembly as well as part of the standard library.
25975
25976         * report.cs: Allow throwing exceptions on errors for debugging.
25977
25978         * modifiers.cs: Do not use `parent', instead use the real type
25979         container to evaluate permission settings.
25980
25981         * class.cs: Put Ravi's patch back in.  He is right, and we will
25982         have to cope with the
25983
25984 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25985
25986         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
25987         FamORAssem, not FamANDAssem.
25988
25989 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25990
25991         * driver.cs: Added --parse option that only parses its input files
25992         and terminates.
25993
25994         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
25995         incorrect.  IsTopLevel is not used to tell whether an object is
25996         root_types or not (that can be achieved by testing this ==
25997         root_types).  But to see if this is a top-level *class* (not
25998         necessarly our "toplevel" container). 
25999
26000 2001-09-14  Ravi Pratap  <ravi@ximian.com>
26001
26002         * enum.cs (Enum::Define): Modify to call the Lookup method on the
26003         parent instead of a direct call to GetType.
26004
26005 2001-09-14  Ravi Pratap  <ravi@ximian.com>
26006
26007         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
26008         Modifiers.TypeAttr. This should just be a call to that method.
26009
26010         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
26011         object so that we can determine if we are top-level or not.
26012
26013         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
26014         TypeContainer too.
26015
26016         * enum.cs (Enum::Define): Ditto.
26017
26018         * modifiers.cs (FieldAttr): Re-write.
26019
26020         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
26021         (TypeContainer::HaveStaticConstructor): New property to provide access
26022         to precisely that info.
26023
26024         * modifiers.cs (MethodAttr): Re-write.
26025         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
26026
26027         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
26028         of top-level types as claimed.
26029
26030 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
26031
26032         * expression.cs (MemberLookup): Fruitless attempt to lookup
26033         constructors.  Maybe I need to emit default constructors?  That
26034         might be it (currently .NET emits this for me automatically).
26035         (Invocation::OverloadResolve): Cope with Arguments == null.
26036         (Invocation::EmitArguments): new function, shared by the new
26037         constructor and us.
26038         (Invocation::Emit): Handle static and instance methods.  Emit
26039         proper call instruction for virtual or non-virtual invocations.
26040         (New::Emit): Implement.
26041         (New::Resolve): Implement.
26042         (MemberAccess:Resolve): Implement.
26043         (MethodGroupExpr::InstanceExpression): used conforming to the spec
26044         to track instances.
26045         (FieldExpr::Resolve): Set type.
26046
26047         * support.cs: Handle empty arguments.
26048                 
26049         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
26050         SimpleLookup): Auxiliary routines to help parse a qualifier
26051         identifier.  
26052
26053         Update qualifier_identifier rule.
26054
26055         * codegen.cs: Removed debugging messages.
26056
26057         * class.cs: Make this a global thing, this acts just as a "key" to
26058         objects that we might have around.
26059
26060         (Populate): Only initialize method_builders_to_methods once.
26061
26062         * expression.cs (PropertyExpr): Initialize type from the
26063         PropertyType. 
26064
26065         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
26066         Resolve pattern.  Attempt to implicitly convert value to boolean.
26067         Emit code.
26068
26069         * expression.cs: Set the type for the int32/int32 argument case.
26070         (Binary::ResolveOperator): Set the return type to boolean for
26071         comparission operators
26072
26073         * typemanager.cs: Remove debugging print code.
26074
26075         (Invocation::Resolve): resolve type.
26076
26077         * class.cs: Allocate a MemberInfo of the correct size, as the code
26078         elsewhere depends on the test to reflect the correct contents.
26079
26080         (Method::) Keep track of parameters, due to System.Reflection holes
26081
26082         (TypeContainer::Populate): Keep track of MethodBuilders to Method
26083         mapping here.
26084
26085         (TypeContainer::FindMembers): Use ArrayList and then copy an array
26086         of the exact size and return that.
26087
26088         (Class::LookupMethodByBuilder): New function that maps
26089         MethodBuilders to its methods.  Required to locate the information
26090         on methods because System.Reflection bit us again.
26091
26092         * support.cs: New file, contains an interface ParameterData and
26093         two implementations: ReflectionParameters and InternalParameters
26094         used to access Parameter information.  We will need to grow this
26095         as required.
26096
26097         * expression.cs (Invocation::GetParameterData): implement a cache
26098         and a wrapper around the ParameterData creation for methods. 
26099         (Invocation::OverloadResolve): Use new code.
26100
26101 2001-09-13  Ravi Pratap  <ravi@ximian.com>
26102
26103         * class.cs (TypeContainer::EmitField): Remove and move into 
26104         (Field::Define): here and modify accordingly.
26105         (Field.FieldBuilder): New member.
26106         (TypeContainer::Populate): Update accordingly.
26107         (TypeContainer::FindMembers): Implement.
26108
26109 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
26110
26111         * statement.cs: (VariableInfo::VariableType): New field to be
26112         initialized with the full type once it is resolved. 
26113
26114 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
26115
26116         * parameter.cs (GetParameterInfo): Use a type cache to compute
26117         things only once, and to reuse this information
26118
26119         * expression.cs (LocalVariableReference::Emit): Implement.
26120         (OpcodeCast::Emit): fix.
26121
26122         (ParameterReference::Resolve): Implement.
26123         (ParameterReference::Emit): Implement.
26124
26125         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
26126         that are expressions need to stay as Expressions.
26127
26128         * typemanager.cs (CSharpName): Returns the C# name of a type if
26129         possible. 
26130
26131         * expression.cs (Expression::ConvertImplicit): New function that
26132         implements implicit type conversions.
26133
26134         (Expression::ImplicitReferenceConversion): Implements implicit
26135         reference conversions.
26136
26137         (EmptyCast): New type for transparent casts.
26138
26139         (OpcodeCast): New type for casts of types that are performed with
26140         a sequence of bytecodes.
26141
26142         (BoxedCast): New type used for casting value types into reference
26143         types.  Emits a box opcode.
26144
26145         (Binary::DoNumericPromotions): Implements numeric promotions of
26146         and computation of the Binary::Type.
26147
26148         (Binary::EmitBranchable): Optimization.
26149
26150         (Binary::Emit): Implement code emission for expressions.
26151
26152         * typemanager.cs (TypeManager): Added two new core types: sbyte
26153         and byte.
26154
26155 2001-09-12  Ravi Pratap  <ravi@ximian.com>
26156
26157         * class.cs (TypeContainer::FindMembers): Method which does exactly
26158         what Type.FindMembers does, only we don't have to use reflection. No
26159         implementation yet.
26160
26161         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
26162         typecontainer objects as we need to get at them.
26163         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
26164
26165         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
26166         typecontainer object.
26167
26168         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
26169         of just a Report object.
26170
26171 2001-09-11  Ravi Pratap  <ravi@ximian.com>
26172
26173         * class.cs (Event::Define): Go back to using the prefixes "add_" and
26174         "remove_"
26175         (TypeContainer::Populate): Now define the delegates of the type too.
26176         (TypeContainer.Delegates): Property to access the list of delegates defined
26177         in the type.
26178
26179         * delegates.cs (Delegate::Define): Implement partially.
26180
26181         * modifiers.cs (TypeAttr): Handle more flags.
26182
26183 2001-09-11  Ravi Pratap  <ravi@ximian.com>
26184
26185         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
26186         and not <=
26187         (Operator::Define): Re-write logic to get types by using the LookupType method
26188         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
26189         (Indexer::Define): Ditto.
26190         (Event::Define): Ditto.
26191         (Property::Define): Ditto.
26192
26193 2001-09-10  Ravi Pratap  <ravi@ximian.com>
26194
26195         * class.cs (TypeContainer::Populate): Now define operators too. 
26196         (TypeContainer.Operators): New property to access the list of operators
26197         in a type.
26198         (Operator.OperatorMethodBuilder): New member to hold the method builder
26199         for the operator we are defining.
26200         (Operator::Define): Implement.
26201
26202 2001-09-10  Ravi Pratap  <ravi@ximian.com>
26203
26204         * class.cs (Event::Define): Make the prefixes of the accessor methods
26205         addOn_ and removeOn_ 
26206
26207         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
26208         of the location being passed in too. Ideally, this should go later since all
26209         error reporting should be done through the Report object.
26210
26211         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
26212         (Populate): Iterate thru the indexers we have and define them too.
26213         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
26214         for the get and set accessors.
26215         (Indexer::Define): Implement.
26216
26217 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
26218
26219         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
26220         my previous implementation, did not work.
26221
26222         * typemanager.cs: Add a couple of missing types (the longs).
26223
26224         * literal.cs: Use TypeManager.bool_type instead of getting it.
26225
26226         * expression.cs (EventExpr): New kind of expressions.
26227         (Expressio::ExprClassFromMemberInfo): finish
26228
26229 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
26230
26231         * assign.cs: Emit stores to static fields differently.
26232
26233 2001-09-08  Ravi Pratap  <ravi@ximian.com>
26234
26235         * Merge in changes and adjust code to tackle conflicts. Backed out my
26236         code in Assign::Resolve ;-) 
26237
26238 2001-09-08  Ravi Pratap  <ravi@ximian.com>
26239
26240         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
26241         instead Report.Error and also pass in the location.
26242         (CSharpParser::Lexer): New readonly property to return the reference
26243         to the Tokenizer object.
26244         (declare_local_variables): Use Report.Error with location instead of plain 
26245         old error.
26246         (CheckDef): Ditto.
26247
26248         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
26249         (Operator.CheckBinaryOperator): Ditto.
26250
26251         * cs-parser.jay (operator_declarator): Update accordingly.
26252
26253         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
26254         (CheckBinaryOperator): Same here.
26255
26256         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
26257         on the name without any prefixes of namespace names etc. This is because we
26258         already might have something already fully qualified like 
26259         'System.Console.WriteLine'
26260
26261         * assign.cs (Resolve): Begin implementation. Stuck ;-)
26262
26263 2001-09-07  Ravi Pratap  <ravi@ximian.com>
26264
26265         * cs-tokenizer.cs (location): Return a string which also contains
26266         the file name.
26267
26268         * expression.cs (ElementAccess): New class for expressions of the
26269         type 'element access.'
26270         (BaseAccess): New class for expressions of the type 'base access.'
26271         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
26272         respectively.
26273
26274         * cs-parser.jay (element_access): Implement action.
26275         (base_access): Implement actions.
26276         (checked_expression, unchecked_expression): Implement.
26277
26278         * cs-parser.jay (local_variable_type): Correct and implement.
26279         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
26280
26281         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
26282
26283         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
26284         name and the specifiers.
26285
26286         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
26287
26288         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
26289         making them all public ;-)
26290
26291         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
26292         class anyways.
26293
26294 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
26295
26296         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
26297         PropertyExprs.
26298         (FieldExpr, PropertyExprs): New resolved expressions.
26299         (SimpleName::MemberStaticCheck): Perform static checks for access
26300         to non-static fields on static methods. Maybe this should be
26301         generalized for MemberAccesses. 
26302         (SimpleName::ResolveSimpleName): More work on simple name
26303         resolution. 
26304
26305         * cs-parser.jay (primary_expression/qualified_identifier): track
26306         the parameter index.
26307
26308         * codegen.cs (CodeGen::Save): Catch save exception, report error.
26309         (EmitContext::EmitBoolExpression): Chain to expression generation
26310         instead of temporary hack.
26311         (::EmitStatementExpression): Put generic expression code generation.
26312
26313         * assign.cs (Assign::Emit): Implement variable assignments to
26314         local variables, parameters and fields.
26315
26316 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
26317
26318         * statement.cs (Block::GetVariableInfo): New method, returns the
26319         VariableInfo for a variable name in a block.
26320         (Block::GetVariableType): Implement in terms of GetVariableInfo
26321
26322         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
26323         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
26324
26325 2001-09-06  Ravi Pratap  <ravi@ximian.com>
26326
26327         * cs-parser.jay (operator_declaration): Continue on my quest : update
26328         to take attributes argument.
26329         (event_declaration): Ditto.
26330         (enum_declaration): Ditto.
26331         (indexer_declaration): Ditto.
26332
26333         * class.cs (Operator::Operator): Update constructor accordingly.
26334         (Event::Event): Ditto.
26335
26336         * delegate.cs (Delegate::Delegate): Same here.
26337
26338         * enum.cs (Enum::Enum): Same here.
26339
26340 2001-09-05  Ravi Pratap  <ravi@ximian.com>
26341
26342         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
26343
26344         * ../tests/cs0658.cs : New file to demonstrate error 0658.
26345
26346         * attribute.cs (Attributes): New class to encapsulate all attributes which were
26347         being passed around as an arraylist.
26348         (Attributes::AddAttribute): Method to add attribute sections.
26349
26350         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
26351         (struct_declaration): Update accordingly.
26352         (constant_declaration): Update.
26353         (field_declaration): Update.
26354         (method_header): Update.
26355         (fixed_parameter): Update.
26356         (parameter_array): Ditto.
26357         (property_declaration): Ditto.
26358         (destructor_declaration): Ditto.
26359
26360         * class.cs (Struct::Struct): Update constructors accordingly.
26361         (Class::Class): Ditto.
26362         (Field::Field): Ditto.
26363         (Method::Method): Ditto.
26364         (Property::Property): Ditto.
26365         (TypeContainer::OptAttribute): update property's return type.
26366
26367         * interface.cs (Interface.opt_attributes): New member.
26368         (Interface::Interface): Update to take the extra Attributes argument.
26369
26370         * parameter.cs (Parameter::Parameter): Ditto.
26371
26372         * constant.cs (Constant::Constant): Ditto.
26373
26374         * interface.cs (InterfaceMemberBase): New OptAttributes field.
26375         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
26376         the attributes as a parameter.
26377         (InterfaceProperty): Update constructor call.
26378         (InterfaceEvent): Ditto.
26379         (InterfaceMethod): Ditto.
26380         (InterfaceIndexer): Ditto.
26381
26382         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
26383         pass the attributes too.
26384         (interface_event_declaration): Ditto.
26385         (interface_property_declaration): Ditto.
26386         (interface_method_declaration): Ditto.
26387         (interface_declaration): Ditto.
26388
26389 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
26390
26391         * class.cs (Method::Define): Track the "static Main" definition to
26392         create an entry point. 
26393
26394         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
26395         EntryPoint if we find it. 
26396
26397         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
26398         (EmitContext::ig): Make this variable public.
26399
26400         * driver.cs: Make the default output file be the first file name
26401         with the .exe extension.  
26402
26403         Detect empty compilations
26404
26405         Handle various kinds of output targets.  Handle --target and
26406         rename -t to --dumper.
26407
26408         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
26409         methods inherited from Expression return now an Expression.  This
26410         will is used during the tree rewriting as we resolve them during
26411         semantic analysis.
26412
26413         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
26414         the spec.  Missing entirely is the information about
26415         accessability of elements of it.
26416
26417         (Expression::ExprClassFromMemberInfo): New constructor for
26418         Expressions that creates a fully initialized Expression based on
26419         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
26420         a Type.
26421
26422         (Invocation::Resolve): Begin implementing resolution of invocations.
26423
26424         * literal.cs (StringLiteral):  Implement Emit.
26425
26426 2001-09-05  Ravi Pratap  <ravi@ximian.com>
26427
26428         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
26429         member.
26430
26431 2001-09-04  Ravi Pratap  <ravi@ximian.com>
26432
26433         * cs-parser.jay (attribute_arguments): Implement actions.
26434         (attribute): Fix bug in production. Implement action.
26435         (attribute_list): Implement.
26436         (attribute_target): Implement.
26437         (attribute_target_specifier, opt_target_specifier): Implement
26438         (CheckAttributeTarget): New method to check if the attribute target
26439         is valid.
26440         (attribute_section): Implement.
26441         (opt_attributes): Implement.
26442
26443         * attribute.cs : New file to handle attributes.
26444         (Attribute): Class to hold attribute info.
26445
26446         * cs-parser.jay (opt_attribute_target_specifier): Remove production
26447         (attribute_section): Modify production to use 2 different rules to 
26448         achieve the same thing. 1 s/r conflict down !
26449         Clean out commented, useless, non-reducing dimension_separator rules.
26450
26451         * class.cs (TypeContainer.attributes): New member to hold list
26452         of attributes for a type.
26453         (Struct::Struct): Modify to take one more argument, the attribute list.
26454         (Class::Class): Ditto.
26455         (Field::Field): Ditto.
26456         (Method::Method): Ditto.
26457         (Property::Property): Ditto.
26458
26459         * cs-parser.jay (struct_declaration): Update constructor call to
26460         pass in the attributes too.
26461         (class_declaration): Ditto.
26462         (constant_declaration): Ditto.
26463         (field_declaration): Ditto.
26464         (method_header): Ditto.
26465         (fixed_parameter): Ditto.
26466         (parameter_array): Ditto.
26467         (property_declaration): Ditto.
26468
26469         * constant.cs (Constant::Constant): Update constructor similarly.
26470         Use System.Collections.
26471
26472         * parameter.cs (Parameter::Parameter): Update as above.
26473
26474 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26475
26476         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
26477         (TypeContainer.delegates): New member to hold list of delegates.
26478
26479         * cs-parser.jay (delegate_declaration): Implement the action correctly 
26480         this time as I seem to be on crack ;-)
26481
26482 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
26483
26484         * rootcontext.cs (RootContext::IsNamespace): new function, used to
26485         tell whether an identifier represents a namespace.
26486
26487         * expression.cs (NamespaceExpr): A namespace expression, used only
26488         temporarly during expression resolution.
26489         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
26490         utility functions to resolve names on expressions.
26491
26492 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
26493
26494         * codegen.cs: Add hook for StatementExpressions. 
26495
26496         * class.cs: Fix inverted test for static flag in methods.
26497
26498 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26499
26500         * class.cs (Operator::CheckUnaryOperator): Correct error number used
26501         to make it coincide with MS' number.
26502         (Operator::CheckBinaryOperator): Ditto.
26503
26504         * ../errors/errors.txt : Remove error numbers added earlier.
26505
26506         * ../errors/cs1019.cs : Test case for error # 1019
26507
26508         * ../errros/cs1020.cs : Test case for error # 1020
26509
26510         * cs-parser.jay : Clean out commented cruft.
26511         (dimension_separators, dimension_separator): Comment out. Ostensibly not
26512         used anywhere - non-reducing rule.
26513         (namespace_declarations): Non-reducing rule - comment out.
26514
26515         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
26516         with TypeContainer::AddEnum.
26517
26518         * delegate.cs : New file for delegate handling classes.
26519         (Delegate): Class for declaring delegates.
26520
26521         * makefile : Update.
26522
26523         * cs-parser.jay (delegate_declaration): Implement.
26524
26525 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
26526
26527         * class.cs (Event::Define): Implement.
26528         (Event.EventBuilder): New member.
26529
26530         * class.cs (TypeContainer::Populate): Update to define all enums and events
26531         we have.
26532         (Events): New property for the events arraylist we hold. Shouldn't we move to using
26533         readonly fields for all these cases ?
26534
26535 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26536
26537         * class.cs (Property): Revamp to use the convention of making fields readonly.
26538         Accordingly modify code elsewhere.
26539
26540         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
26541         the Define method of the Property class.
26542
26543         * class.cs : Clean up applied patch and update references to variables etc. Fix 
26544         trivial bug.
26545         (TypeContainer::Populate): Update to define all the properties we have. Also
26546         define all enumerations.
26547
26548         * enum.cs (Define): Implement.
26549
26550 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26551
26552         * cs-parser.jay (overloadable_operator): The semantic value is an
26553         enum of the Operator class.
26554         (operator_declarator): Implement actions.
26555         (operator_declaration): Implement.
26556
26557         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
26558         validity of definitions.
26559         (Operator::CheckBinaryOperator): Static method to check for binary operators
26560         (TypeContainer::AddOperator): New method to add an operator to a type.
26561
26562         * cs-parser.jay (indexer_declaration): Added line to actually call the
26563         AddIndexer method so it gets added ;-)
26564
26565         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
26566         already taken care of by the MS compiler ?  
26567
26568 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26569
26570         * class.cs (Operator): New class for operator declarations.
26571         (Operator::OpType): Enum for the various operators.
26572
26573 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26574
26575         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
26576         ostensibly handle this in semantic analysis.
26577
26578         * cs-parser.jay (general_catch_clause): Comment out
26579         (specific_catch_clauses, specific_catch_clause): Ditto.
26580         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
26581         (catch_args, opt_catch_args): New productions.
26582         (catch_clause): Rewrite to use the new productions above
26583         (catch_clauses): Modify accordingly.
26584         (opt_catch_clauses): New production to use in try_statement
26585         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
26586         and re-write the code in the actions to extract the specific and
26587         general catch clauses by being a little smart ;-)
26588
26589         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
26590         Hooray, try and catch statements parse fine !
26591
26592 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26593
26594         * statement.cs (Block::GetVariableType): Fix logic to extract the type
26595         string from the hashtable of variables.
26596
26597         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
26598         I end up making that mistake ;-)
26599         (catch_clauses): Fixed gross error which made Key and Value of the 
26600         DictionaryEntry the same : $1 !!
26601
26602 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26603
26604         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
26605
26606         * cs-parser.jay (event_declaration): Correct to remove the semicolon
26607         when the add and remove accessors are specified. 
26608
26609 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26610
26611         * cs-parser.jay (IndexerDeclaration): New helper class to hold
26612         information about indexer_declarator.
26613         (indexer_declarator): Implement actions.
26614         (parsing_indexer): New local boolean used to keep track of whether
26615         we are parsing indexers or properties. This is necessary because 
26616         implicit_parameters come into picture even for the get accessor in the 
26617         case of an indexer.
26618         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
26619
26620         * class.cs (Indexer): New class for indexer declarations.
26621         (TypeContainer::AddIndexer): New method to add an indexer to a type.
26622         (TypeContainer::indexers): New member to hold list of indexers for the
26623         type.
26624
26625 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26626
26627         * cs-parser.jay (add_accessor_declaration): Implement action.
26628         (remove_accessor_declaration): Implement action.
26629         (event_accessors_declaration): Implement
26630         (variable_declarators): swap statements for first rule - trivial.
26631
26632         * class.cs (Event): New class to hold information about event
26633         declarations.
26634         (TypeContainer::AddEvent): New method to add an event to a type
26635         (TypeContainer::events): New member to hold list of events.
26636
26637         * cs-parser.jay (event_declaration): Implement actions.
26638
26639 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26640
26641         * cs-parser.jay (dim_separators): Implement. Make it a string
26642         concatenating all the commas together, just as they appear.
26643         (opt_dim_separators): Modify accordingly
26644         (rank_specifiers): Update accordingly. Basically do the same
26645         thing - instead, collect the brackets here.
26646         (opt_rank_sepcifiers): Modify accordingly.
26647         (array_type): Modify to actually return the complete type string
26648         instead of ignoring the rank_specifiers.
26649         (expression_list): Implement to collect the expressions
26650         (variable_initializer): Implement. We make it a list of expressions
26651         essentially so that we can handle the array_initializer case neatly too.
26652         (variable_initializer_list): Implement.
26653         (array_initializer): Make it a list of variable_initializers
26654         (opt_array_initializer): Modify accordingly.
26655
26656         * expression.cs (New::NType): Add enumeration to help us
26657         keep track of whether we have an object/delegate creation
26658         or an array creation.
26659         (New:NewType, New::Rank, New::Indices, New::Initializers): New
26660         members to hold data about array creation.
26661         (New:New): Modify to update NewType
26662         (New:New): New Overloaded contructor for the array creation
26663         case.
26664
26665         * cs-parser.jay (array_creation_expression): Implement to call
26666         the overloaded New constructor.
26667
26668 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
26669
26670         * class.cs (TypeContainer::Constructors): Return member
26671         constructors instead of returning null.
26672
26673 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
26674
26675         * typemanager.cs (InitCoreTypes): Initialize the various core
26676         types after we have populated the type manager with the user
26677         defined types (this distinction will be important later while
26678         compiling corlib.dll)
26679
26680         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
26681         on Expression Classification.  Now all expressions have a method
26682         `Resolve' and a method `Emit'.
26683
26684         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
26685         generation from working.     Also add some temporary debugging
26686         code. 
26687
26688 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
26689
26690         * codegen.cs: Lots of code generation pieces.  This is only the
26691         beginning, will continue tomorrow with more touches of polish.  We
26692         handle the fundamentals of if, while, do, for, return.  Others are
26693         trickier and I need to start working on invocations soon.
26694
26695         * gen-treedump.cs: Bug fix, use s.Increment here instead of
26696         s.InitStatement. 
26697
26698         * codegen.cs (EmitContext): New struct, used during code
26699         emission to keep a context.   Most of the code generation will be
26700         here. 
26701
26702         * cs-parser.jay: Add embedded blocks to the list of statements of
26703         this block.  So code generation proceeds in a top down fashion.
26704
26705 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
26706
26707         * statement.cs: Add support for multiple child blocks.
26708
26709 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
26710
26711         * codegen.cs (EmitCode): New function, will emit the code for a
26712         Block of code given a TypeContainer and its ILGenerator. 
26713
26714         * statement.cs (Block): Standard public readonly optimization.
26715         (Block::Block constructors): Link children. 
26716         (Block::Child): Child Linker.
26717         (Block::EmitVariables): Emits IL variable declarations.
26718
26719         * class.cs: Drop support for MethodGroups here, delay until
26720         Semantic Analysis.
26721         (Method::): Applied the same simplification that I did before, and
26722         move from Properties to public readonly fields.
26723         (Method::ParameterTypes): Returns the parameter types for the
26724         function, and implements a cache that will be useful later when I
26725         do error checking and the semantic analysis on the methods is
26726         performed.
26727         (Constructor::GetCallingConvention): Renamed from CallingConvetion
26728         and made a method, optional argument tells whether this is a class
26729         or a structure to apply the `has-this' bit.
26730         (Method::GetCallingConvention): Implement, returns the calling
26731         convention. 
26732         (Method::Define): Defines the type, a second pass is performed
26733         later to populate the methods.
26734
26735         (Constructor::ParameterTypes): implement a cache similar to the
26736         one on Method::ParameterTypes, useful later when we do semantic
26737         analysis. 
26738
26739         (TypeContainer::EmitMethod):  New method.  Emits methods.
26740
26741         * expression.cs: Removed MethodGroup class from here.
26742
26743         * parameter.cs (Parameters::GetCallingConvention): new method.
26744
26745 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
26746
26747         * class.cs (TypeContainer::Populate): Drop RootContext from the
26748         argument. 
26749
26750         (Constructor::CallingConvention): Returns the calling convention.
26751         (Constructor::ParameterTypes): Returns the constructor parameter
26752         types. 
26753
26754         (TypeContainer::AddConstructor): Keep track of default constructor
26755         and the default static constructor.
26756
26757         (Constructor::) Another class that starts using `public readonly'
26758         instead of properties. 
26759
26760         (Constructor::IsDefault): Whether this is a default constructor. 
26761
26762         (Field::) use readonly public fields instead of properties also.
26763
26764         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
26765         track of static constructors;  If none is used, turn on
26766         BeforeFieldInit in the TypeAttributes. 
26767
26768         * cs-parser.jay (opt_argument_list): now the return can be null
26769         for the cases where there are no arguments. 
26770
26771         (constructor_declarator): If there is no implicit `base' or
26772         `this', then invoke the default parent constructor. 
26773
26774         * modifiers.cs (MethodAttr): New static function maps a set of
26775         modifiers flags into a MethodAttributes enum
26776         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
26777         MethodAttr, TypeAttr to represent the various mappings where the
26778         modifiers are used.
26779         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
26780
26781 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
26782
26783         * parameter.cs (GetParameterInfo): Fix bug where there would be no
26784         method arguments.
26785
26786         * interface.cs (PopulateIndexer): Implemented the code generator
26787         for interface indexers.
26788
26789 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
26790
26791         * interface.cs (InterfaceMemberBase): Now we track the new status
26792         here.  
26793
26794         (PopulateProperty): Implement property population.  Woohoo!  Got
26795         Methods and Properties going today. 
26796
26797         Removed all the properties for interfaces, and replaced them with
26798         `public readonly' fields. 
26799
26800 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
26801
26802         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
26803         initialize their hashtables/arraylists only when they are needed
26804         instead of doing this always.
26805
26806         * parameter.cs: Handle refs and out parameters.
26807
26808         * cs-parser.jay: Use an ArrayList to construct the arguments
26809         instead of the ParameterCollection, and then cast that to a
26810         Parameter[] array.
26811
26812         * parameter.cs: Drop the use of ParameterCollection and use
26813         instead arrays of Parameters.
26814
26815         (GetParameterInfo): Use the Type, not the Name when resolving
26816         types. 
26817
26818 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
26819
26820         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
26821         and instead use public readonly fields.
26822
26823         * class.cs: Put back walking code for type containers.
26824
26825 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
26826
26827         * class.cs (MakeConstant): Code to define constants.
26828
26829         * rootcontext.cs (LookupType): New function.  Used to locate types 
26830
26831
26832 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
26833
26834         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
26835         this System.Reflection code is.  Kudos to Microsoft
26836
26837         * typemanager.cs: Implement a type cache and avoid loading all
26838         types at boot time.  Wrap in LookupType the internals.  This made
26839         the compiler so much faster.  Wow.  I rule!
26840
26841         * driver.cs: Make sure we always load mscorlib first (for
26842         debugging purposes, nothing really important).
26843
26844         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
26845         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
26846
26847         * rootcontext.cs: Lookup types on their namespace;  Lookup types
26848         on namespaces that have been imported using the `using' keyword.
26849
26850         * class.cs (TypeContainer::TypeAttr): Virtualize.
26851         (Class::TypeAttr): Return attributes suitable for this bad boy.
26852         (Struct::TypeAttr): ditto.
26853         Handle nested classes.
26854         (TypeContainer::) Remove all the type visiting code, it is now
26855         replaced with the rootcontext.cs code
26856
26857         * rootcontext.cs (GetClassBases): Added support for structs. 
26858
26859 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
26860
26861         * interface.cs, statement.cs, class.cs, parameter.cs,
26862         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
26863         Drop use of TypeRefs, and use strings instead.
26864
26865 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
26866
26867         * rootcontext.cs: 
26868
26869         * class.cs (Struct::Struct): set the SEALED flags after
26870         checking the modifiers.
26871         (TypeContainer::TypeAttr): new property, returns the
26872         TypeAttributes for a class.  
26873
26874         * cs-parser.jay (type_list): Oops, list production was creating a
26875         new list of base types.
26876
26877         * rootcontext.cs (StdLib): New property.
26878         (GetInterfaceTypeByName): returns an interface by type name, and
26879         encapsulates error handling here.
26880         (GetInterfaces): simplified.
26881         (ResolveTree): Encapsulated all the tree resolution here.
26882         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
26883         types. 
26884
26885         * driver.cs: Add support for --nostdlib, to avoid loading the
26886         default assemblies.
26887         (Main): Do not put tree resolution here. 
26888
26889         * rootcontext.cs: Beginning of the class resolution.
26890
26891 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
26892
26893         * rootcontext.cs: Provide better error reporting. 
26894
26895         * cs-parser.jay (interface_base): set our $$ to be interfaces.
26896
26897         * rootcontext.cs (CreateInterface): Handle the case where there
26898         are no parent interfaces.
26899
26900         (CloseTypes): Routine to flush types at the end.
26901         (CreateInterface): Track types.
26902         (GetInterfaces): Returns an array of Types from the list of
26903         defined interfaces.
26904
26905         * typemanager.c (AddUserType): Mechanism to track user types (puts
26906         the type on the global type hash, and allows us to close it at the
26907         end). 
26908
26909 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
26910
26911         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
26912         RecordInterface instead.
26913
26914         * cs-parser.jay: Updated to reflect changes above.
26915
26916         * decl.cs (Definition): Keep track of the TypeBuilder type that
26917         represents this type here.  Not sure we will use it in the long
26918         run, but wont hurt for now.
26919
26920         * driver.cs: Smaller changes to accomodate the new code.
26921
26922         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
26923         when done. 
26924
26925         * rootcontext.cs (CreateInterface):  New method, used to create
26926         the System.TypeBuilder type for interfaces.
26927         (ResolveInterfaces): new entry point to resolve the interface
26928         hierarchy. 
26929         (CodeGen): Property, used to keep track of the code generator.
26930
26931 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
26932
26933         * cs-parser.jay: Add a second production for delegate_declaration
26934         with `VOID'.
26935
26936         (enum_body): Put an opt_comma here instead of putting it on
26937         enum_body or enum_member_declarations so we can handle trailing
26938         commas on enumeration members.  Gets rid of a shift/reduce.
26939
26940         (type_list): Need a COMMA in the middle.
26941
26942         (indexer_declaration): Tell tokenizer to recognize get/set
26943
26944         * Remove old targets.
26945
26946         * Re-add the parser target.
26947
26948 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26949
26950         * cs-parser.jay: Add precendence rules for a number of operators
26951         ot reduce the number of shift/reduce conflicts in the grammar.
26952
26953 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
26954
26955         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
26956         and put it here.
26957
26958         Get rid of old crufty code.
26959
26960         * rootcontext.cs: Use this to keep track of the parsed
26961         representation and the defined types available to the program. 
26962
26963         * gen-treedump.cs: adjust for new convention.
26964
26965         * type.cs: Split out the type manager, and the assembly builder
26966         from here. 
26967
26968         * typemanager.cs: the type manager will live here now.
26969
26970         * cil-codegen.cs: And the code generator here. 
26971
26972 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
26973
26974         * makefile: Fixed up for easy making.
26975
26976 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26977
26978         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
26979         the 
26980
26981         (unary_expression): Expand pre_increment_expression and
26982         post_decrement_expression to reduce a shift/reduce.
26983
26984 2001-07-11  Simon Cozens
26985
26986         * cs-tokenizer.cs: Hex numbers should begin with a 0.
26987
26988         Improve allow_keyword_as_indent name.
26989
26990 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
26991
26992         * Adjustments for Beta2. 
26993
26994 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
26995
26996         * decl.cs: Added `Define' abstract method.
26997         (InTransit): new property, used to catch recursive definitions. 
26998
26999         * interface.cs: Implement `Define'. 
27000
27001         * modifiers.cs: Map Modifiers.constants to
27002         System.Reflection.TypeAttribute flags.
27003
27004         * class.cs: Keep track of types and user-defined types.
27005         (BuilderInit): New method for creating an assembly
27006         (ResolveType): New function to launch the resolution process, only
27007         used by interfaces for now.
27008
27009         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
27010         that are inserted into the name space. 
27011
27012 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
27013
27014         * ARGH.  I have screwed up my tree so many times due to the use of
27015         rsync rather than using CVS.  Going to fix this at once. 
27016
27017         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
27018         load types.
27019
27020 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
27021
27022         * Experiment successful: Use System.Type rather that our own
27023         version of Type.  
27024
27025 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
27026
27027         * cs-parser.jay: Removed nsAliases from here.
27028
27029         Use new namespaces, handle `using XXX;' 
27030
27031         * namespace.cs: Reimplemented namespace handling, use a recursive
27032         definition of the class.  Now we can keep track of using clauses
27033         and catch invalid using clauses.
27034
27035 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
27036
27037         * gen-treedump.cs: Adapted for all the renaming.
27038
27039         * expression.cs (Expression): this class now has a Type property
27040         which returns an expression Type.
27041
27042         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
27043         `Type', as this has a different meaning now in the base
27044
27045 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
27046
27047         * interface.cs, class.cs: Removed from all the sources the
27048         references to signature computation, as we can not do method
27049         signature computation during the parsing time, as we are not
27050         trying to solve at that point distinguishing:
27051
27052         class X {
27053                 void a (Blah x) {}
27054                 void a (NS.Blah x) {}
27055         }
27056
27057         Which depending on the context might be valid or not, as we do not
27058         know if Blah is the same thing as NS.Blah at that point.
27059
27060         * Redid everything so the code uses TypeRefs now instead of
27061         Types.  TypeRefs are just temporary type placeholders, that need
27062         to be resolved.  They initially have a pointer to a string and the
27063         current scope in which they are used.  This is used later by the
27064         compiler to resolve the reference to an actual Type. 
27065
27066         * DeclSpace is no longer a CIR.Type, and neither are
27067         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
27068         are all DeclSpaces, but no Types. 
27069
27070         * type.cs (TypeRefManager): This implements the TypeRef manager,
27071         which keeps track of all the types that need to be resolved after
27072         the parsing has finished. 
27073
27074 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
27075
27076         * ARGH.  We are going to have to store `foreach' as a class rather
27077         than resolving it, as we need to verify error 1579 after name
27078         resolution.   *OR* we could keep a flag that says `This request to
27079         IEnumerator comes from a foreach statement' which we can then use
27080         to generate the error.
27081
27082 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
27083
27084         * class.cs (TypeContainer.AddMethod): we now add methods to the
27085         MethodGroup instead of the method hashtable.  
27086
27087         * expression.cs: Add MethodGroup abstraction, which gets us one
27088         step closer to the specification in the way we handle method
27089         declarations.  
27090
27091         * cs-parser.jay (primary_expression): qualified_identifier now
27092         tried to match up an identifier to a local variable reference or
27093         to a parameter reference.
27094
27095         current_local_parameters is now a parser global variable that
27096         points to the current parameters for the block, used during name
27097         lookup.
27098
27099         (property_declaration): Now creates an implicit `value' argument to
27100         the set accessor.
27101
27102 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
27103
27104         * parameter.cs: Do not use `param' arguments as part of the
27105         signature, per the spec.
27106
27107 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
27108
27109         * decl.cs: Base class for classes, structs and interfaces.  This
27110         is the "Declaration Space" 
27111
27112         * cs-parser.jay: Use CheckDef for checking declaration errors
27113         instead of having one on each function.
27114
27115         * class.cs: Factor out some code for handling error handling in
27116         accordance to the "Declarations" section in the "Basic Concepts"
27117         chapter in the ECMA C# spec.
27118
27119         * interface.cs: Make all interface member classes derive from
27120         InterfaceMemberBase.
27121
27122 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
27123
27124         * Many things: all interfaces are parsed and generated in
27125         gen-treedump.  Support for member variables, constructors,
27126         destructors, properties, constants is there.
27127
27128         Beginning of the IL backend, but very little done, just there for
27129         testing purposes. 
27130
27131 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
27132
27133         * cs-parser.jay: Fix labeled statement.
27134
27135         * cs-tokenizer.cs (escape): Escape " and ' always.
27136         ref_line, ref_name: keep track of the line/filename as instructed
27137         by #line by the compiler.
27138         Parse #line.
27139
27140 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
27141
27142         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
27143         to match the values in System.CodeDOM.
27144
27145         Divid renamed to Divide.
27146
27147         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
27148         statements. 
27149         (Statements.set): remove.
27150
27151         * System.CodeDOM/CodeCatchClause.cs: always have a valid
27152         statements. 
27153
27154         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
27155         falseStatements always have valid values. 
27156
27157         * cs-parser.jay: Use System.CodeDOM now.
27158