2007-09-12 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / gmcs / ChangeLog
1 2007-09-12  Marek Safar  <marek.safar@gmail.com>
2         
3         * cs-parser.jay: GroupJoin clause connected.
4         
5         * generic.cs (TypeInferenceContext.InflateGenericArgument): Uses 
6         inferred types to inflate delegate type argument.
7         
8         * linq.cs: Fixed couple of typos.
9         (GroupJoin): Implemented group join clause.
10         
11 2007-09-11  Marek Safar  <marek.safar@gmail.com>
12         
13         * cs-parser.jay: Single join clause connected.
14         
15         * linq.cs: Moved argument creation into CreateSelector and renamed to
16         CreateSelectorArguments.
17         (ARangeVariableQueryClause.BuildQueryClause): Consider all lambda
18         arguments to be implicit.
19         (Join): Implemented single join clause.
20         
21 2007-09-10  Marek Safar  <marek.safar@gmail.com>
22         
23         * cs-parser.jay: Create QueryStartClause for the first implicit from.
24         
25         * generic.cs (TypeInterferenceContext.LowerBoundInference): Fixed crash
26         both U and V are not generic.
27         
28         * linq.cs: Use standard method overload resolution for all methods.
29         
30 2007-09-05  Marek Safar  <marek.safar@gmail.com>
31
32         * cs-parser.jay: Plug into let clause.
33         
34         * linq.cs: Implemented let clause, parameters refactoring.
35         
36 2007-08-31  Marek Safar  <marek.safar@gmail.com>
37
38         * generic.cs (TypeParameter): Uses common Emit.
39         (.IsClsComplianceRequired): Is never required.
40
41 2007-08-31  Marek Safar  <marek.safar@gmail.com>
42
43         * cs-parser.jay: Terminates query block correctly. Fixed orderby 
44         chaining.
45         
46         * generic.cs (TypeInferenceContext): Better error resistance.
47         
48         * linq.cs: Implemented range variables, transparent identifiers and
49         SelectMany clause.
50         
51 2007-08-28  Marek Safar  <marek.safar@gmail.com>
52
53         * cs-parser.jay: Anonymous type arguments can be simple name, syntax error
54         handling.
55
56 2007-08-23  Marek Safar  <marek.safar@gmail.com>
57
58         * generic.cs (TypeInferenceV3.DoSecondPhase): Handle nested delegate
59          type parameters.
60          (IsTypeNonDependent, RemoveDependentTypes): Handle nested delegate
61          type parameters.
62         
63 2007-08-21  Marek Safar  <marek.safar@gmail.com>
64
65         * cs-parser.jay, linq.cs: Implemented orderby clause.
66         
67 2007-08-20  Marek Safar  <marek.safar@gmail.com>
68
69         * linq.cs: Switch to lambda expressions.
70
71 2007-08-20  Marek Safar  <marek.safar@gmail.com>
72
73         * cs-parser.jay: An anonymous type can be empty.
74
75 2007-08-17  Marek Safar  <marek.safar@gmail.com>
76
77         * linq.cs: MethodGroupExpr update.
78         
79 2007-08-14  Marek Safar  <marek.safar@gmail.com>
80
81         ** C# 3.0 Object and collection initializers
82         
83         * cs-parser.jay: Grammar update.
84         
85 2007-08-11  Marek Safar  <marek.safar@gmail.com>
86
87         A fix for bug #82412
88         * generics.cs (TypeInferenceContext.LowerBoundInference): Don't 
89         terminate type inference when an array is not paired.
90         
91 2007-08-10  Miguel de Icaza  <miguel@novell.com>
92
93         * generic.cs (DefaultValueExpression): Add CloneTo support to this
94         as well. 
95
96 2007-08-09  Marek Safar  <marek.safar@gmail.com>
97  
98         ** C# 3.0 Anonymous Types (update to the latest standard)
99         
100         * cs-parser.jay: Updated parameters and type names.
101
102 2007-08-03  Raja R Harinath  <harinath@gmail.com>
103
104         * cs-parser.jay (class_declaration): Update to changes in class.cs.
105         Move calling of 'AddBasesForPart' to ...
106         (class_bases): ... here.
107         (struct_declaration, interface_declaration): Update to changes.
108
109 2007-08-02  Raja R Harinath  <harinath@gmail.com>
110
111         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
112         * cs-parser.jay: Some whitespace cleanups.
113         (method_header): Refer to the correct symbol for parameters.
114
115 2007-08-01  Marek Safar  <marek.safar@gmail.com>
116
117         A fix for bug #82181
118         * cs-parser.jay: Ignore partial keyword inside block expression.
119         
120 2007-08-01  Marek Safar  <marek.safar@gmail.com>
121
122         ** C# 3.0 Type Inference (major bits are working)
123         
124         * generic.cs: Introduced new abstract class as an entry point to type
125         inference. Old type inference moved to TypeInferenceV2. Implemented C# 3.0
126         type inference as descibed in the standard in TypeInferenceV2 class.
127         
128         * linq.cs (ALinqExpression): Disabled caching because it's wrong.
129         
130 2007-07-25  Jb Evain  <jbevain@novell.com>
131
132         * Makefile: don't install on net_2_1.
133
134 2007-07-18  Marek Safar  <marek.safar@gmail.com>
135
136         * cs-parser.jay: Use ImplicitLambdaParameter everywhere.
137
138 2007-07-17  Marek Safar  <marek.safar@gmail.com>
139
140         * cs-parser.jay: Correct placeholder for implicit linq parameter.
141         
142         * linq: Add ImplicitArgument.
143
144 2007-07-03  Marek Safar  <marek.safar@gmail.com>
145
146         * cs-parser.jay: Switch to ImplicitLambdaParameter.
147
148 2007-07-03  Marek Safar  <marek.safar@gmail.com>
149
150         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
151         members too.
152         
153         * linq.cs (QueryExpression.DoResolve): Resolve implicitly typed query
154         variable.
155         
156 2007-06-20  Marek Safar  <marek.safar@gmail.com>
157
158         * cs-parser.jay: Reworked var keyword handling. We cannot handle var as
159         static keyword because var becomes keyword only if no type with the var
160         name exists in the scope of variable which uses var declaration.
161         
162 2007-06-18  Marek Safar  <marek.safar@gmail.com>
163
164         * cs-parser.jay: Add implicitly typed local variable checks.
165
166 2007-06-15  Marek Safar  <marek.safar@gmail.com>
167
168         * cs-parser.jay: Correctly split generic arguments and generic
169          parameters. Correctly implemented typeof of generic unbound types.
170
171 2007-06-14  Marek Safar  <marek.safar@gmail.com>
172
173         * cs-parser.jay: Assembly and module attributes must precede all other
174         elements except using clauses and extern alias declarations.
175
176 2007-06-08  Marek Safar  <marek.safar@gmail.com>
177
178         * cs-parser.jay: Uses newly defined GroupBy class.
179         
180         * linq.cs (GroupBy): Implemented.
181         (AQueryClause.BuildQueryClause): Refactored to allow customize query
182         method arguments.
183
184 2007-06-08  Marek Safar  <marek.safar@gmail.com>
185
186         * generics.cs (InferTypeArguments): Uses AnonymousMethodExpression
187         InferTypeArguments.
188
189 2007-06-06  Marek Safar  <marek.safar@gmail.com>
190
191         * generics.cs (TypeArguments): New contructor fow known number of
192         arguments.
193
194 2007-06-04  Raja R Harinath  <rharinath@novell.com>
195
196         * linq.cs (Select.DoResolve): Pass the created parameters to the
197         ToplevelBlock too.
198
199 2007-05-29  Raja R Harinath  <rharinath@novell.com>
200
201         * cs-parser.jay: Update to changes in ToplevelBlock.
202         (top_current_block): Remove.
203
204 2007-05-27  Raja R Harinath  <harinath@gmail.com>
205
206         * cs-parser.jay: Update to new ExplicitBlock invariant.
207
208         * cs-parser.jay: Update to changes introduced in Block and
209         ExplicitBlock.
210
211 2007-05-25  Raja R Harinath  <rharinath@novell.com>
212
213         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
214         modifying current_block directly.
215
216 2007-05-22  Scott Peterson  <lunchtimemama@gmail.com>
217         
218         * cs-parser.jay: Implemented automatic properties (C# 3.0)
219
220 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
221         
222         * cs-parser.jay: Improved grammar for object and collection
223           initialization.
224
225 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
226
227         This code is contributed under the MIT X11 license
228         
229         * cs-parser.jay: Added support for C# 3.0 language features:
230           Variable type inference (the "var" keyword)
231           Anonymous types
232           Array type inference
233           Object initialization
234           Collection initialization
235
236 2007-05-06  Marek Safar  <marek.safar@gmail.com>
237
238         A fix for bug #81500
239         * cs-parser.jay: Add special handling for coalescing operator.
240
241 2007-05-02  Raja R Harinath  <rharinath@novell.com>
242
243         Fix regression in cs0631-3.cs
244         * cs-parser.jay (operator_declarator): Add opt_attributes to error
245         fallback.  Make error fallback catch more cases.
246
247 2007-05-01  Miguel de Icaza  <miguel@novell.com>
248
249         * cs-parser.jay: Allow parameters in operator declarations to have
250         attributes. 
251
252 2007-04-27  Miguel de Icaza  <miguel@novell.com>
253
254         * generic.cs (TypeManager.LambdaInfer): now this routine will
255         make only one inference from the list of lambda expression that
256         have not participated in inferring a type.
257
258         (TypeManager.InferTypeArguments): The logic that drives the type
259         inference in lambda expressions is now driven here. 
260
261 2007-04-23  Miguel de Icaza  <miguel@novell.com>
262
263         * generic.cs: Large update to LambdaInfer, this is merely an
264         update to start the lambda type inference.   It is by no means
265         complete.  It is currently merely able to build a sample program
266         (with no iteration for the type parameters).
267
268 2007-04-12  Duncan Mak  <duncan@a-chinaman.com>
269
270         * cs-parser.jay (interface_method_declaration_body): Fixed typo.
271
272 2007-04-08  Marek Safar  <marek.safar@gmail.com>
273
274         * cs-parser.jay, linq.cs: First select implementation (hacky).
275
276         * generic.cs (InferTypeArguments): Simplified.
277
278 2007-03-31  Marek Safar  <marek.safar@gmail.com>
279
280         * generic.cs (InferTypeArguments): Restored validation check.
281         (InferTypeArguments): Move all logic to Compatible method for re-usability.
282
283 2007-03-25  Marek Safar  <marek.safar@gmail.com>
284
285         * generic.cs (InferTypeArguments): Infer arguments before they are used
286         for compatibility check.
287
288 2007-03-15  Marek Safar  <marek.safar@gmail.com>
289
290         * generic.cs (InflatedConstraints): Fixed the check order.
291         (TypeArguments.Resolve): Small optimization for generic parameters.
292         (InferTypeArguments): Add infering support for anonymous methods.
293
294 2007-03-15  Martin Baulig  <martin@ximian.com>
295
296         Fix #79984.
297
298         * generic.cs
299         (TypeParameter.HasConstructorConstraint): Removed.
300         (ConstraintChecker.HasDefaultConstructor): Removed the
301         `TypeBuilder' argument here; correctly check for the ctor
302         constraint on type parameters.
303
304 2007-03-15  Martin Baulig  <martin@ximian.com>
305
306         Fix #79302.
307
308         * generic.cs
309         (TypeParameter): Create a `MemberCache' here as well.  Note that
310         we need to create this on-demand when it's actually used.
311
312 2007-03-10  Marek Safar  <marek.safar@gmail.com>
313
314         * generic.cs (TypeArguments.Resolve): Avoid redundant checks.
315
316 2007-03-09  Raja R Harinath  <rharinath@novell.com>
317
318         * cs-parser.jay (WHERE): Move before QUERY_FIRST_TOKEN.  'where'
319         is a valid keyword outside a linq expression too.
320
321 2007-03-03  Marek Safar  <marek.safar@gmail.com>
322
323         * cs-parser.jay: Implemented basic linq grammar.
324
325         * linq.cs: New file for hosting query specific classes.
326
327 2007-02-26  Marek Safar  <marek.safar@gmail.com>
328
329         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
330
331 2007-02-20  Marek Safar  <marek.safar@gmail.com>
332
333         A fix for bug #80650
334         * cs-parser.jay: Anonymous container starts at constructor declaration
335         and not at block beginning because it has to be usable in constructor
336         initializer.
337
338 2007-02-18  Marek Safar  <marek.safar@gmail.com>
339
340         A fix for bug #80493 by Atsushi Enomoto
341         * cs-parser.jay: Ignore invalid attribute target.
342
343 2007-02-15  Miguel de Icaza  <miguel@novell.com>
344
345         * Remove the call to SetExpression for lambda expressions, we do
346         not actually need it.
347
348         Remove expression tracking code as its not needed.
349
350 2007-02-11  Miguel de Icaza  <miguel@novell.com>
351
352         * cs-parser.jay (lambda_expression_body): when the body is an
353         expression add a statement of the form:
354
355                 contextual-return expression.
356
357         Where `contextual-return' is similar to `return', the difference
358         being that if the delegate that the lambda will be converted to
359         has a void return type, it will check that the result is a
360         ExpressionStatement and the result is a plain ret (no return
361         values on the stack).  If the return type of the delegate is of a
362         given type, this turns into a return with a value and does the
363         regular checking to check that the computed value can be
364         implicitly converted to the delegate return.
365
366 2007-01-30  Miguel de Icaza  <miguel@novell.com>
367
368         * cs-parser.jay (anonymous_method_expression): move the
369         before/after productions to the start_anonymous and end_anonymous
370         methods so the code can be reused for lambda functions.
371
372         (lambda_expression_body): wrap expressions implicitly into a
373         block.
374
375         (block): factor out the setup/teardown of parsing a block so we
376         can reuse that in lambda_expression_body
377
378         (lambda_expression): use new anonymous method helper methods.
379
380 2007-01-29  Miguel de Icaza  <miguel@novell.com>
381
382         * cs-parser.jay: oob_stack make it static (am guessing that is why
383         we no longer initialize it anymore) and reuse it across
384         instances.
385
386 2007-01-28  Miguel de Icaza  <miguel@novell.com>
387
388         * cs-parser.jay (open_parens): Introduce new non-terminal that
389         abstracts OPEN_PARENS and OPEN_PARENS_LAMBDA as the later can now
390         be returned in places where types are followed by identifiers
391         (this is expected in declaration, fixed, using, foreach and catch
392         clauses). 
393
394         Use open_parens in those places, keep OPEN_PARENS in the
395         expressions.  
396
397         cs-parser.jay: New grammar bits for parsing lambda expressions. 
398
399 2007-01-28  Raja R Harinath  <rharinath@novell.com>
400
401         Fix #80534, gtest-309.cs
402         * generic.cs (UnifyType): Rename from InferType.  Make unification
403         of generic insts simpler and don't insist on inferring all generic
404         parameters in a single generic inst unification.
405         (UnifyTypes): New.
406         (InferGenericInstance): Remove.
407         Analysis and initial patch by David Mitchell <dmitchell@logos.com>.
408
409 2007-01-20  Marek Safar  <marek.safar@gmail.com>
410
411         * cs-parser.jay: Better parameter error handling.
412
413 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
414             Raja R Harinath  <rharinath@novell.com>
415
416         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
417         Note the order in which accessors are declared in the source.
418
419 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
420
421         * generic.cs (TypeParameter.FindMembers): Use the generic
422         constraints, not the constraints to check for methods (first fix
423         of 80518).
424
425 2006-12-30  Marek Safar  <marek.safar@gmail.com>
426
427         * cs-parser.jay: Better syntax errors handling.
428
429 2006-11-21  Marek Safar  <marek.safar@gmail.com>
430
431         * cs-parser.jay: Tiny change to work with mcs tokenizer.
432
433         * cs-tokenizer.cs: Remove after unification with mcs.
434
435 2006-10-28  Marek Safar  <marek.safar@gmail.com>
436
437         A fix for bug #78998
438         * generic.cs (ConstructedType.AsAccessible): Check accessibility of type
439         arguments as well.
440
441 2006-10-26  Marek Safar  <marek.safar@gmail.com>
442
443         A fix for bug #76591
444         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous methods.
445
446 2006-10-25  Brian Crowell  <brian@fluggo.com>
447
448         Fix #79703
449         * generic.cs (CheckConstraints): Allow generic parameters with
450         inheritance constraints to satisfy reference type constraints.
451
452 2006-10-09  Martin Baulig  <martin@ximian.com>
453
454         * generic.cs
455         (NullCoalescingOperator.DoResolve): Fix #78964; added gtest-294.cs.
456
457 2006-09-25  Martin Baulig  <martin@ximian.com>
458
459         * class.cs: Remove after unification with mcs source.
460
461 2006-09-24  Raja R Harinath  <harinath@gmail.com>
462
463         * convert.cs: Remove after unification with mcs source.
464
465 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
466
467         * class.cs (MemberBase.VerifyClsCompliance): When method has type
468         parameters verify them as well.
469
470         * generic.cs (Constraints.VerifyClsCompliance): Verify CLS-Compliance of
471         the type parameter constraints.
472         (Generics.VerifyClsCompliance): Ditto.
473
474 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
475
476         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
477         for anonymous block with out argument.
478
479 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
480
481         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
482         not used private events only.
483
484 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
485
486         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
487
488         * cs-parser.jay: Parse correctly cast of default (T).
489
490         * generic.cs (DefaultValueExpression.DoResolve): Check for void type.
491         Store original type via EmptyConstantCast.
492
493 2006-09-22  Martin Baulig  <martin@ximian.com>
494
495         * delegate.cs: Removed; this file is now shared with mcs.
496
497         * attribute.cs: Removed; this file is now shared with mcs.
498
499 2006-09-22  Martin Baulig  <martin@ximian.com>
500
501         * ecore.cs: Removed; this file is now shared with mcs.
502
503 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
504
505         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
506
507         * ecore.cs (NullCast): Derives from NullConstant.
508
509         * generic.cs (DefaultValueExpression): Fixed to cope with the constant
510         results.
511
512 2006-09-21  Martin Baulig  <martin@ximian.com>
513
514         * decl.cs: Removed; this file is now shared with mcs.
515
516 2006-09-21  Raja R Harinath  <rharinath@novell.com>
517
518         * rootcontext.cs: Remove after unification with mcs source.
519
520         * report.cs: Remove after unification with mcs source.
521         * generic.cs (AddTypeParameter, LookupTypeParameter): Move to
522         mcs/typemanager.cs.
523         (InitGenerics, CleanUpGenerics): Remove.
524
525         * support.cs: Remove after unification with mcs source.
526
527 2006-09-20  Raja R Harinath  <rharinath@novell.com>
528
529         * codegen.cs: Remove after unification with mcs source.
530
531 2006-09-19  Martin Baulig  <martin@ximian.com>
532
533         * expression.cs: Removed; this file is now shared with mcs.
534
535 2006-09-19  Martin Baulig  <martin@ximian.com>
536
537         * generic.cs
538         (TypeManager.IsEqual): Moved into ../mcs/typemanager.cs.
539         (TypeManager.DropGenericTypeArguments): Likewise.
540         (TypeManager.DropGenericMethodArguments): Likewise.
541         (TypeManager.GetTypeArguments): Likewise.
542         (TypeManager.HasGenericArguments): Likewise.
543
544 2006-09-19  Martin Baulig  <martin@ximian.com>
545
546         * ecore.cs (PropertyExpr.InstanceResolve): Fix the CS1540 check.
547
548 2006-09-19  Martin Baulig  <martin@ximian.com>
549
550         * typemanager.cs: Removed; this file is now shared with mcs.
551
552 2006-09-16  Raja R Harinath  <rharinath@novell.com>
553
554         * Makefile (LOCAL_MCS_FLAGS): Use instead of PROFILE_MCS_FLAGS.
555         * AssemblyInfo.cs, driver.cs: Remove after unification with mcs source.
556
557 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
558
559         A fix for #79401
560         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
561         only if parent type is class.
562         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
563         update.
564
565 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
566
567         * cs-parser.jay,
568         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
569         keywords are used.
570         * typemanager.cs(CSharpName): Converts NullType to null.
571
572 2006-09-15  Martin Baulig  <martin@ximian.com>
573
574         * pending.cs: Removed; this file is now shared with mcs.
575
576 2006-09-15  Martin Baulig  <martin@ximian.com>
577
578         * statement.cs: Removed; this file is now shared with mcs.
579
580 2006-09-15  Martin Baulig  <martin@ximian.com>
581
582         * rootcontext.cs (RootContext.BrokenCircularDeps): Removed.
583
584         * driver.cs: Removed the `--broken-cycles' argument.
585
586 2006-09-15  Martin Baulig  <martin@ximian.com>
587
588         * namespace.cs: Removed; this file is now shared with mcs.
589
590 2006-09-15  Martin Baulig  <martin@ximian.com>
591
592         * decl.cs (MemberName): Minor code cleanups.
593
594 2006-09-15  Martin Baulig  <martin@ximian.com>
595
596         * parameter.cs: Removed; this file is now shared with mcs.
597
598 2006-09-15  Martin Baulig  <martin@ximian.com>
599
600         * enum.cs: Removed; this file is now shared with mcs.
601
602 2006-09-15  Martin Baulig  <martin@ximian.com>
603
604         * Makefile: Define `GMCS_SOURCE'.
605
606         * flowanalysis.cs: Removed; this file is now shared with mcs.
607
608 2006-09-15  Martin Baulig  <martin@ximian.com>
609
610         Removed modifiers.cs, literal.cs, location.cs, roottypes.cs,
611         assign.cs, const.cs, cfold.cs, constant.cs, symbolwriter.cs and
612         doc.cs - they are now shared with mcs.
613
614         * gmcs.exe.sources: Include these files from ../mcs/.
615
616 2006-09-15  Martin Baulig  <martin@ximian.com>
617
618         * old-code.cs, gen-il.cs, gen-treedump.cs: Removed old stuff.
619         * g1.cs, sample-hello.cs, sample-stack.il: Likewise.
620
621 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
622
623         * assign.cs, ecore.cs, expression.cs: Share error message text.
624         * class.cs (FieldMember.Define): Check for variable of static type.
625         * decl.cs (check_type_parameter): Report correct type name.
626         * driver.cs (LoadAssembly): Uses error output for errors.
627         * generic.cs (Constraints.Resolve): Add check for constraint accessibility
628         (TypeArguments.Resolve): Static class cannot be used as an argument.
629         * statement.cs (ResolveMeta): Constants cannot be generic types.
630
631 2006-09-12  Martin Baulig  <martin@ximian.com>
632
633         * generic.cs (TypeManager.IsIList): Moved into convert.cs.
634
635         * convert.cs (Convert.Array_To_IList): Moved here and correctly
636         implement it; fixes #79345.
637
638 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
639
640         * decl.cs (DeclSpace.SetParameterInfo): Check for nonexistent type
641         parameter.
642         * expression.cs (TypeOf.GetAttributableValue): Check for open generic
643         types.
644         * generic.cs: Improved error messages.
645         * typemanager.cs (RemoveGenericArity): Made public.
646
647 2006-09-08  Martin Baulig  <martin@ximian.com>
648
649         * typemanager.cs (TypeManager.interlocked_type): New public field.
650         (TypeManager.int_interlocked_compare-exchange): New public field.
651         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
652         enumerator types here and call InitGenericCoreTypes().
653         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
654         after calling InitEnumUnderlyingTypes().
655
656         * rootcontext.cs
657         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
658         `classes_second_stage'. 
659
660 2006-09-07  Marek Safar  <marek.safar@seznam.cz>
661  
662         * class.cs, generic.cs (GenericMethod.Define): Check for type parameter
663         collisions.
664         * statement.cs (Block.Variables): Made public.
665
666 2006-09-07  Martin Baulig  <martin@ximian.com>
667
668         * driver.cs
669         (MainDriver): Revert r62663 from Marek; see #70506 for details.
670
671 2006-09-01  Martin Baulig  <martin@ximian.com>
672
673         * generic.cs
674         (TypeManager.IsIList): Also handle base classes and interfaces. 
675
676 2006-09-01  Raja R Harinath  <rharinath@novell.com>
677
678         Fix #79238
679         * expression.cs (Invocation.MoreSpecific): Check for reference
680         types earlier.
681
682 2006-08-29  Miguel de Icaza  <miguel@novell.com>
683
684         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
685
686 2006-08-17  Miguel de Icaza  <miguel@novell.com>
687
688         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
689         #52019 and #79064, the use of the \uXXXX sequence in source code
690         to represent unicode characters.
691
692 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
693  
694         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
695         support.
696         * class.cs, ecore.cs, statement.cs: Merged to one error message.
697
698 2006-08-14  Raja R Harinath  <rharinath@novell.com>
699
700         Fix #79067
701         * cs-tokenizer.cs (parse_less_than): Allow '*' to appear in a type
702         parameter too.  This only avoids a parse error -- the semantic
703         error is caught elsewhere.
704
705 2006-08-13  Miguel de Icaza  <miguel@novell.com>
706
707         * assign.cs: Catch attempts to assign to a method groups in += and
708         report as 1656
709
710 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
711
712         A fix for #79056
713         * cs-parser.jay: Don't destroy current array type by typeof of array's.
714
715 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
716
717         * cs-parser.jay: Check whether a constraint clause has already been
718         specified for type parameter.
719         * generic.cs (Constraints): Exposed location.
720
721 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
722
723         * class.cs (Method.Define): Issue a warning when generic method looks like
724         an entry point.
725         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
726         as well.
727         * report.cs: New warning number.
728
729 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
730  
731         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
732         looking for ctor.
733         * decl.cs (MemberCache.FindMembers): When container is interface we need to
734         search all base interfaces as a member can be ambiguous.
735         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
736         Constructor member type filter. 
737         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
738         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
739         reporting for returned memberinfos.
740         * report.cs: Updated.
741         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
742         version to work on all runtimes.
743         (TypeManager.RealMemberLookup): Removed members filtering.
744
745 2006-08-08  Raja R Harinath  <rharinath@novell.com>
746
747         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
748         (PropertyExpr.EmitAssign): Likewise.
749         * expression.cs (Indirection.EmitAssign): Likewise.
750         (LocalVariableReference.EmitAssign): Likewise.
751         (ParameterReference.EmitAssign): Likewise.
752         (Invocation.EmitArguments): Likewise.
753         (ArrayAccess.EmitAssign): Likewise.
754         (IndexerAccess.EmitAssign): Likewise.
755         (This.EmitAssign): Likewise.
756         (ConditionalLogicalOperator.Emit): Likewise.
757
758         Fix #79026
759         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
760         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
761         leave it in after returning it.
762         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
763
764 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
765
766         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
767         message.
768
769 2006-08-05  Marek Safar  <marek.safar@seznam.cz>
770
771         * class.cs (TypeContainer.AddPartial): Add check for partial declarations
772         with different type names.
773         (TypeContainer.UpdateTypeParameterConstraints): Updated an error message.
774
775 2006-08-03  Raja R Harinath  <rharinath@novell.com>
776
777         Fix cs0146-3.cs and cs0146-4.cs.
778         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
779         enclosing types don't depend on the current type.
780
781 2006-08-02  Raja R Harinath  <rharinath@novell.com>
782
783         Fix #77963
784         * class.cs (TypeContainer.DoDefineMembers): Use
785         FindBaseMemberWithSameName on Parent, since we're interested in
786         whether we hide inherited members or not.
787         (FindBaseMemberWithSameName): Make slightly more robust.
788
789         Fix #77396
790         * codegen.cs (IResolveContext.GenericDeclContainer): New.
791         (EmitContext): Implement new interface requirement.
792         * namespace.cs (UsingEntry, LocalAliasEntry): Likewise.
793         * decl.cs (MemberCore): Likewise.
794         (DeclSpace.GenericDeclContainer): Rename from DeclContainer.
795         * ecore.cs (SimpleName.ResolveAsTypeTerminal): Use
796         ec.GenericDeclContainer to check for generic parameters.
797         (SimpleName.DoSimpleNameResolve): Likewise.
798         * generic.cs (TypeParameter.DeclContainer): Remove override.
799
800         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
801         declspaces for doppelgangers too.
802         (UsingEntry): Implement IResolveContext.
803         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
804         'this' as the resolve context.
805         (LocalAliasEntry): Likewise.
806
807         Implement parts of #77403
808         * roottypes.cs (RootDeclSpace): New.  Used to represent the
809         toplevel declaration space.  Each namespace declaration introduces
810         a "partial" root declaretion space.
811         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
812         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
813         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
814         from 'current_namespace.SlaveDeclSpace'.
815         (namespace_declaration): Likewise.
816         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
817         check.  It can't happen now.
818         * decl.cs (DeclSpace.LookupType): Likewise.
819         * driver.cs (MainDriver): Sanity check.
820
821 2006-08-01  Raja R Harinath  <rharinath@novell.com>
822
823         * decl.cs (DeclSpace.FindNestedType): Remove.
824         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
825         LookupTypeContainer to get the container of the nested type.
826         * class.cs (TypeContainer.FindNestedType): Make non-override.
827
828 2006-07-31  Raja R Harinath  <rharinath@novell.com>
829
830         * decl.cs (DeclSpace.PartialContainer): Move field from ...
831         * class.cs (TypeContainer.PartialContainer): ... here.
832         (TypeContainer.AddBasesForPart): New helper.
833         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
834         instead.
835         * cs-parser.jay (current_class): Convert to DeclSpace.
836         (struct_declaration, interface_declaration, class_declaration):
837         Use AddBasesForPart instead of .Bases directly.
838         * const.cs, iterators.cs: Update to changes.
839
840 2006-07-28  Raja R Harinath  <rharinath@novell.com>
841
842         * class.cs (TypeContainer.AddMemberType): Rename from
843         AddToTypeContainer.
844         (TypeContainer.AddMember): Rename from AddToMemberContainer.
845         (AddTypeContainer): New.  Combine AddClassOrStruct and
846         AddInterface.
847         (AddPartial): Update.  Add 'is_partial' argument.
848         * roottypes.cs: Update to changes.
849         * cs-parser.jay (push_current_class): New helper for handling
850         current_container and current_class.
851         (struct_declaration, interface_declaration, class_declaration):
852         Use it.
853
854 2006-07-26  Raja R Harinath  <rharinath@novell.com>
855
856         * roottypes.cs: Rename from tree.cs.
857
858         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
859         * tree.cs (Tree, ITreeDump): Remove types.
860         * rootcontext.cs (tree, Tree): Remove fields.
861         (root, ToplevelTypes): New.
862         * *.cs: Update to rename.
863
864         * tree.cs (Tree.RecordDecl): Remove.
865         (RootTypes.AddToTypeContainer): Record the toplevel type in its
866         namespace here.
867         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
868
869 2006-07-23  Raja R Harinath  <harinath@gmail.com>
870
871         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
872         DoFlowAnalysis and OmitStructFlowAnalysis here.
873         (ec.With): Rename from WithUnsafe and generalize.
874         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
875         (ec.WithFlowAnalyis): New.
876         * ecore.cs, expression.cs, statement.cs: Update.
877
878 2006-07-22  Raja R Harinath  <harinath@gmail.com>
879
880         * statement.cs (Block.ResolveMeta): Simplify slightly.
881
882         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
883         multiple boolean fields.  Convert InUnsafe, constant_check_state,
884         check_state to flags.
885         (CheckState, ConstantCheckState): Update.
886         (InUnsafe): New read-only property.
887         (FlagsHandle): Rename from CheckStateHandle and convert to handle
888         arbitrary flags.
889         (WithUnsafe): New helper similar to WithCheckState.
890         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
891         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
892
893 2006-07-21  Raja R Harinath  <rharinath@novell.com>
894
895         Make comparisons use the same IL irrespective of whether they're
896         in a 'checked' or 'unchecked' context: one of the issues in #78899
897         * codegen.cs (EmitContext.CheckState): Make read-only property.
898         (EmitContext.ConstantCheckState): Likewise.
899         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
900         helper that implement a save/restore stack for CheckState
901         values.  This is the only way to change check-state.
902         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
903         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
904         (CheckedExpr.EmitBranchable): New forwarding method.
905         (UnCheckedExpr): Likewise.
906         * statement.cs (Block.ResolveMeta): Use WithCheckState.
907         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
908         (Checked.Resolve, checked.DoEmit): Likewise.
909
910 2006-07-21  Martin Baulig  <martin@ximian.com>
911
912         * generic.cs (TypeManager.InferType): When inferring an array
913         type, also allow IList<T> and ICollection<T>.  Fixes #78900.
914
915 2006-07-21  Martin Baulig  <martin@ximian.com>
916
917         * generic.cs (TypeManager.IsIEnumerable): Renamed into IsIList()
918         and allow IList`1 and all its base interfaces.
919
920         * convert.cs (Convert.ImplicitReferenceConversion): Allow
921         converting from an array-type of T to IList<T>.
922
923 2006-07-21  Martin Baulig  <martin@ximian.com>
924
925         * ecore.cs (SimpleName.DoSimpleNameResolve): Added CS0307 check.
926
927 2006-07-20  Miguel de Icaza  <miguel@novell.com>
928
929         * anonymous.cs: Cache the resolved anonymous delegate, and return
930         this so that the ResolveTopBlock is only triggered once, not
931         twice.
932
933         Currently we trigger ResolvetopBlock twice due to a first pass of
934         argument check compatibility, and a second pass that does the
935         actual resolution.   
936
937 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
938
939         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
940         modifiers.
941         * rootcontext.cs (Reset): Add helper_classes.
942
943 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
944
945         A fix for #78860
946         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
947         correctly.
948
949 2006-07-13  Miguel de Icaza  <miguel@novell.com>
950
951         * statement.cs (Lock): Handle expressions of type
952         TypeManager.null_type specially.  Fixes #78770
953
954 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
955
956         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
957         to an event.
958
959 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
960
961         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
962         for accessors as well.
963         * ecore.cs (EventExpr): Add AccessorTable.
964
965 2006-07-03  Martin Baulig  <martin@ximian.com>
966
967         * ecore.cs (UnboxCast.Emit): Also use `Unbox_Any' for generic
968         instances of value types.
969
970         * convert.cs (Convert.ExplicitConversion): Correctly handle
971         object->nullable conversions.   
972
973 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
974
975         A fix for #78738
976         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
977         for CS0122 where appropriate.
978         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
979         level attributes.
980         (Filter): Assembly can be null in the case of top level attributes.
981
982 2006-06-28  Raja R Harinath  <rharinath@novell.com>
983
984         Fix #78716
985         * generic.cs (TypeManager.InferParamsTypeArguments): If there are
986         no arguments, return 'false': nothing can be inferred.
987
988 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
989
990         A fix for #78690
991
992         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
993         is done at global level.
994
995 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
996
997         A fix for #77002, Implemented TypeForwarder support.
998
999         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
1000         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Add TypeForwarder
1001         attribute handling.
1002         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
1003         * typemanager.cs (): Add type_forwarder_attr_type.
1004
1005 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
1006
1007         * report.cs: Add CS0469 warning.
1008
1009 2006-06-22  Martin Baulig  <martin@ximian.com>
1010
1011         * class.cs
1012         (TypeContainer.GetNormalBases): Also use ResolveAsBaseTerminal()
1013         for interfaces; fixes #78686, which is a modification of #78380
1014         with interfaces instead of classes.
1015
1016 2006-06-21  Martin Baulig  <martin@ximian.com>
1017
1018         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
1019         the `try'-block, so we also report CS0016 etc. there.
1020
1021 2006-06-21  Martin Baulig  <martin@ximian.com>
1022
1023         * ecore.cs (FieldExpr.EmitAssign, FieldExpr.AddressOf): Correctly
1024         handle SetAssigned() and SetMemberIsUsed() for generic types;
1025         fixes #77545.
1026
1027 2006-06-21  Martin Baulig  <martin@ximian.com>
1028
1029         * delegate.cs
1030         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
1031
1032 2006-06-21  Martin Baulig  <martin@ximian.com>
1033
1034         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
1035         also report CS1686 for parameters.
1036
1037 2006-06-21  Martin Baulig  <martin@ximian.com>
1038
1039         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
1040         instead of an error if the value is not implicitly convertible to
1041         the switch types; fixes #77964.
1042
1043 2006-06-21  Raja R Harinath  <rharinath@novell.com>
1044
1045         Fix #78673
1046         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
1047         FieldBuilder is null.
1048
1049         Fix #78662
1050         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
1051         'left' and 'right' before error-checking.
1052
1053 2006-06-19  Martin Baulig  <martin@ximian.com>
1054
1055         * convert.cs
1056         (Convert.ImplicitConversionStandard): Cleanup and correctly
1057         implement nullable conversions.
1058         (Convert.ImplicitStandardConversionExists): Likewise.
1059         (Convert.ExplicitConversion): Likewise.
1060
1061 2006-06-19  Martin Baulig  <martin@ximian.com>
1062
1063         * generic.cs
1064         (Nullable.Wrap.Create, Nullable.Unwrap.Create): New public static
1065         methods; make the ctors protected.
1066
1067 2006-06-19  Martin Baulig  <martin@ximian.com>
1068
1069         Fixed #78380; added gtest-273.cs.
1070
1071         * ecore.cs
1072         (Expression.ResolveAsBaseTerminal): Move the constraint checking
1073         into ResolveAsTypeTerminal().
1074
1075         * generic.cs
1076         (ConstraintChecker.HasDefaultConstructor): Use the non-cache based
1077         TypeManager.FindMembers() to check for the default ctor.
1078
1079 2006-06-18  Marek Safar  <marek.safar@seznam.cz>
1080
1081         * generic.cs: Fixed NullableInfo accessibility.
1082
1083 2006-06-16  Martin Baulig  <martin@ximian.com>
1084
1085         * generic.cs
1086         (Constraints.InflatedConstraints.inflate): Correctly inflate
1087         generic types; fixes #78400.
1088
1089 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
1090
1091         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
1092         Fixed bug #78601.
1093         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
1094         (FieldExpr.DoResolve): likewise.
1095         (PropertyExpr.InstanceResolve): likewise.
1096         (EventExpr.InstanceResolve): likewise. 
1097
1098 2006-06-15  Martin Baulig  <martin@ximian.com>
1099
1100         * statement.cs
1101         (SwitchLabel.ResolveAndReduce): Added `bool allow_nullable'
1102         argument; always allow a `null' label if true.
1103         (Switch.SwitchGoverningType): Take an `Expression expr' argument.
1104         (Switch.TableSwitchEmit, Switch.SimpleSwitchEmit): Check whether
1105         we have a `null' label and mark the new `null_target' label;
1106         default to the `default' label.
1107         (Switch.Resolve): Add support for nullable types.  Fixes #78630.
1108
1109 2006-06-15  Martin Baulig  <martin@ximian.com>
1110
1111         * class.cs (Operator.Define): Allow an implicit/explicit operator
1112         to convert to/from a nullable value of the enclosing type.
1113
1114         * generic.cs (TypeManager.IsNullableTypeOf): New public method.
1115         (Nullable.Unwrap, Nullable.Wrap): Make these classes public.
1116
1117         * convert.cs
1118         (Convert.ImplicitStandardConversionExists): Add support for lifted
1119         implicit/explicit conversions.
1120         (Convert.ImplicitConversionStandard): Likewise.
1121
1122 2006-06-13  Martin Baulig  <martin@ximian.com>
1123
1124         * ecore.cs (SimpleName.DoSimpleNameResolve): Check whether we have
1125         type arguments and create a ConstructedType if necessary.  Fixes #78400.
1126
1127 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
1128
1129         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
1130         attribute applicable tests for attribute argument.
1131
1132 2006-06-02  Raja R Harinath  <rharinath@novell.com>
1133
1134         Fix #78079
1135         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
1136         (Binary.OverloadResolve_PredefinedIntegral): New.
1137         (Binary.OverloadResolve_PredefinedFloating): New.
1138         (Binary.OverloadResolve_PredefinedString): New.
1139         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
1140         Follow the standard more closely, and treat numeric promotions in
1141         terms of overload resolution.
1142         (Binary.CheckShiftArguments): Simplify.
1143
1144 2006-06-01  Raja R Harinath  <rharinath@novell.com>
1145
1146         * flowanalysis.cs (MyBitVector): Simplify representation.
1147         (MyBitVector.Clone): Avoid allocating BitArray.
1148         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
1149         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
1150         (*): Update.  Change all references to MyBitVector.And and
1151         MyBitVector.Or to &= and |=.
1152
1153 2006-05-31  Raja R Harinath  <rharinath@novell.com>
1154
1155         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
1156         Use bne.un instead of ceq+brfalse.
1157
1158         Fix cs0208-[23].cs
1159         * typemanager.cs (IsUnmanagedType): Disallow generic types and
1160         generic parameters.
1161
1162 2006-05-29  Raja R Harinath  <rharinath@novell.com>
1163
1164         Fix cs0231-[34].cs.
1165         * cs-parser.jay (formal_parameter_list): Extend the pattern below
1166         to param arguments too.
1167
1168 2006-05-26  Miguel de Icaza  <miguel@novell.com>
1169
1170         * cs-parser.jay: Catch another parsing form for arglist being
1171         followed by other arguments.  Fixes #78313.
1172
1173 2006-05-25  Raja R Harinath  <rharinath@novell.com>
1174
1175         Fix #78324
1176         * expression.cs (Binary.DoResolve): Use Nullable.LiftedBinaryOperator
1177         also when one of the operands is a null literal.
1178         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality): Rewrite
1179         to improve clarity, and generate slightly better code.
1180
1181 2006-05-24  Raja R Harinath  <rharinath@novell.com>
1182
1183         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
1184         checking of out parameters to ...
1185         (FlowBranchingToplevel.Merge): ... here.
1186         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
1187         set, propagate the origin upward, and only complain if there was
1188         no other error.
1189         (FlowBranchingException.AddContinueOrigin): Likewise.
1190         (FlowBranchingException.AddReturnOrigin): Likewise.
1191         (FlowBranchingException.AddGotoOrigin): Likewise.       
1192
1193 2006-05-23  Raja R Harinath  <rharinath@novell.com>
1194
1195         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
1196         unreachable, skip it.
1197         (FlowBranchingException.Merge): Always propagate jumps, even if
1198         the finally block renders subsequent code unreachable.
1199
1200 2006-05-18  Raja R Harinath  <rharinath@novell.com>
1201
1202         Fix #77601
1203         * statement.cs (Goto.Resolve): Move responsibility for resolving
1204         'goto' to FlowBranching.AddGotoOrigin.
1205         (Goto.SetResolvedTarget): New.  Callback to set the
1206         LabeledStatement that's the target of the goto.
1207         (Goto.DoEmit): Use Leave instead of Br when crossing an
1208         unwind-protect boundary.
1209         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
1210         LookupLabel and adjust to new semantics.
1211         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
1212         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
1213         Goto.SetResolvedTarget to update target.
1214         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
1215         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
1216         AddBreakOrigin & co.  Delay propagation until ...
1217         (FlowBranchingException.Merge): ... this.
1218
1219         * statement.cs (Block.Resolve): Always depend on flow-branching to
1220         determine unreachability.  Kill workaround that originally emitted
1221         only one statement after an "unreachable" label (see infloop in
1222         test-515.cs).
1223
1224         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
1225         This is still "wrong", but anything better would probably need a
1226         multi-pass algorithm.
1227         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
1228         usage vector.  Force current usage vector to be reachable, to
1229         optimistically signify backward jumps.
1230         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
1231         detected.
1232         (FlowBranchingLabeled.Merge): New.  If no backward jump was
1233         detected, return the original salted-away usage vector instead,
1234         updated with appropriate changes.  Print unreachable warning if
1235         necessary.
1236         * statement.cs (Block.Resolve): Don't print unreachable warning on
1237         a labeled statement.
1238
1239 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
1240
1241         * driver.cs: Pass filename without path to AssemblyBuilder's
1242         AddResourceFile. Fixes bug #78407.
1243
1244 2006-05-17  Raja R Harinath  <rharinath@novell.com>
1245
1246         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
1247         * flowanalysis.cs (FlowBranchingLabeled): ... here.
1248         (FlowBranching.MergeChild): Overwrite
1249         reachability information from Labeled branchings too.
1250
1251 2006-05-16  Raja R Harinath  <rharinath@novell.com>
1252
1253         * statement.cs (Goto.Resolve): Merge jump origins here ...
1254         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
1255
1256         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
1257         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
1258         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
1259         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
1260         here, ...
1261         * statement.cs (Goto.Resolve): ... not here.
1262         (Goto.Emit): Remove CS1632 check.
1263
1264 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
1265
1266         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
1267         error message.
1268
1269 2006-05-11  Raja R Harinath  <rharinath@novell.com>
1270
1271         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
1272         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
1273         (FlowBranchingException.Label): Likewise.
1274
1275         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
1276         given value.
1277         (MyBitVector.Or): Use it to avoid losing information (Count).
1278         (FlowBranching.MergeOrigins): Likewise.
1279
1280         * flowanalysis.cs (UsageVector.IsDirty): Remove.
1281         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
1282         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
1283         (UsageVector.ToString): Simplify.
1284         (UsageVector.MergeSiblings): Move here from ...
1285         (FlowBranching.Merge): ... here.
1286         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
1287         not a MyBitVector.
1288
1289 2006-05-10  Raja R Harinath  <rharinath@novell.com>
1290
1291         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
1292         null bitvector is treated as all-true.
1293
1294         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
1295         (MyBitVector): Rationalize invariants.  'vector != null' implies
1296         that we have our own copy of the bitvector.  Otherwise,
1297         'InheritsFrom == null' implies all inherited bits are true.
1298
1299 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
1300
1301         * statement.cs (LocalInfo): Add IsConstant.
1302         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
1303         local variable for constants.
1304
1305 2006-05-09  Raja R Harinath  <rharinath@novell.com>
1306
1307         * flowanalysis.cs (MyBitVector.Empty): New.
1308         (MyBitVector): Don't allow InheritedFrom to be null.
1309         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
1310         (UsageVector, FlowBranching): Update to changes.
1311
1312         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
1313         recursion.  The 'Parent == null' condition isn't sufficient for
1314         anonymous methods.
1315         (FlowBranching.AddBreakOrigin): Likewise.
1316         (FlowBranching.AddContinueOrigin): Likewise.
1317         (FlowBranching.AddReturnOrigin): Likewise.
1318         (FlowBranching.StealFinallyClauses): Likewise.
1319         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
1320         (FlowBranching.CheckOutParameters): Likewise.
1321         (FlowBranchingToplevel): Terminate all the above recursions here.
1322         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
1323         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
1324
1325         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
1326         toplevel block.
1327         (FlowBranchingToplevel): New.  Empty for now.
1328         (FlowBranching.MergeTopBlock): Update.
1329         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
1330         branching for the anonymous delegate.
1331         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
1332
1333         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
1334         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
1335         information at the start of the merge.  Reorganize.
1336
1337 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
1338
1339         * class.cs (MethodData.Define): Method cannot implement interface accessor.
1340
1341 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
1342
1343         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
1344         to newly introduced ctor.
1345
1346         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
1347         message to one place.
1348         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
1349         global namespace.
1350
1351 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
1352
1353         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
1354
1355         * ecore.cs (Expression.ResolveAsConstant): Updated.
1356
1357         * statement.cs (ResolveMeta): Updated.
1358
1359 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
1360
1361         * cs-parser.jay: __arglist cannot be used in initializer.
1362
1363 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
1364
1365         A fix for #77879
1366         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
1367         private types.
1368
1369 2006-05-05  Raja R Harinath  <rharinath@novell.com>
1370
1371         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
1372         (LabeledStatement): Add 'name' parameter.
1373         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
1374         (Block.AddLabel): Update to changes.
1375         * cs-parser.jay (labeled_statement): Likewise.
1376
1377         * flowanalysis.cs (BranchingType.Labeled): New.
1378         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
1379         (FlowBranchingLabeled): New.  Does nothing for now, but will
1380         eventually handle 'goto' flows.
1381         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
1382         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
1383         that's terminated ...
1384         (Block.Resolve): ... here.
1385
1386         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
1387         (UsageVector.MergeFinallyOrigins): Likewise.
1388         (FlowBranching.InTryOrCatch): Likewise.
1389         (FlowBranching.AddFinallyVector): Likewise.
1390         (FlowBranchingException): Update to changes.
1391
1392         Fix #78290
1393         * statement.cs (Return.Resolve): Move error checking to ...
1394         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
1395         (FlowBranchingException): Handle return origins like break and
1396         continue origins.
1397         (FlowBranching.UsageVector.CheckOutParameters): Remove.
1398
1399 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
1400
1401         A fix for #76122
1402         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
1403         filter.
1404
1405 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
1406
1407         A fix for #77543
1408         * class.cs (MethodData.Define): Do public accessor check only when method
1409         implements an interface.
1410
1411 2006-05-04  Raja R Harinath  <rharinath@novell.com>
1412
1413         Remove special handling of 'break'
1414         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
1415         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
1416         (UsageVector.Break): Remove.
1417         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
1418         reachability.
1419         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
1420
1421         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
1422         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
1423
1424 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
1425
1426         A fix for #75726
1427         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
1428         be the interface member.
1429
1430 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
1431
1432         A fix for #60069
1433         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
1434         for emitting small (int) values.
1435
1436 2006-05-03  Raja R Harinath  <rharinath@novell.com>
1437
1438         Fix #59427
1439         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
1440         control-flow passes through the 'finally' after merging-in all the
1441         control-flows from 'try' and the 'catch' clauses.
1442
1443         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
1444         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
1445         always true at the only non-recursive entry point.
1446         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
1447         FlowBranchingBreakable.
1448         (FlowBranchingLoop): Remove.
1449         * statement.cs (Return.DoResolve): Update to changes.
1450
1451         Fix #76471, #76665
1452         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
1453         (FlowBranching.CreateBranching): Handle it: create a
1454         FlowBranchingContinuable.
1455         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
1456         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
1457         except that it handles the 'continue' command.
1458         (FlowBranching.UsageVector.MergeOrigins): Rename from
1459         MergeBreakOrigins.
1460         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
1461         except that it overrides AddContinueOrigin.
1462         (FlowBranchingException): Override AddContinueOrigin, similar to
1463         AddBreakOrigin.
1464         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
1465         Create a new branching around the embedded statement.
1466         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
1467         control flow after the embedded statement.
1468         (Continue.Resolve): Move all error checking to AddContinueOrigin.
1469
1470         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
1471         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
1472         FlowBranchingBreakable.
1473         (FlowBranchingSwitch): Remove.
1474
1475         Fix test-503.cs
1476         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
1477         error reporting to ...
1478         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
1479         Rename from 'AddBreakVector'.  Add new location argument.  Return
1480         a bool indicating whether the 'break' crosses an unwind-protect.
1481         (FlowBranchingException.AddBreakOrigin): Add.
1482         (FlowBranchingException.Merge): Propagate 'break's to surrounding
1483         flowbranching after updating with the effects of the 'finally'
1484         clause.
1485         (FlowBranchingBreakable): New common base class for
1486         FlowBranchingLoop and FlowBranchingSwitch.
1487
1488         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
1489         embedded statement.
1490         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
1491
1492 2006-05-02  Raja R Harinath  <rharinath@novell.com>
1493
1494         * statement.cs (Do.Resolve): If the loop is infinite, set the
1495         barrier.
1496         (While.Resolve, For.Resolve): Set a barrier after the embedded
1497         statement.  There's no direct control flow that goes from the end
1498         of the embedded statement to the end of the loop.
1499         * flowanalysis.cs (FlowBranching.Infinite): Remove.
1500         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
1501         above ensure that the reachability is correctly computed.
1502
1503         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
1504         (UsageVector.MergeBreakOrigins): If the current path is
1505         unreachable, treat it as if all parameters/locals are initialized.
1506         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
1507         infinite loops before merging-in break origins.
1508
1509         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
1510         (Reachability.Reachable): Split part into ...
1511         (Reachability.Unreachable): ... this.  Simplify.
1512         (Reachability.IsUnreachable): Use 'Unreachable' instead.
1513
1514         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
1515         (Reachability.SetThrowsSometimes): Likewise.
1516         (FlowBranchingBlock.MergeTopBlock): Don't compare against
1517         TriState.Always, use corresponding property.
1518         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
1519         (Block.Resolve): Likewise.  Remove some redundant checks.
1520
1521 2006-05-02  Raja R Harinath  <harinath@gmail.com>
1522
1523         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
1524         (Reachability.Meet): Don't bother checking AlwaysThrows --
1525         barrier is always set.
1526         (FlowBranchingBlock.Merge): Likewise.
1527
1528 2006-05-01  Rafael Teixeira <rafaelteixeirabr@hotmail.com>
1529
1530         * attribute.cs: fixed_buffer_cache is declared only if NET_2_0 is
1531         defined, so it's references should also compile only for NET_2_0
1532         (as occurs in mcs version)
1533
1534 2006-05-01  Raja R Harinath  <harinath@gmail.com>
1535
1536         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
1537         checks for unreachable.
1538
1539 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
1540
1541         A fix for #77980
1542         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
1543
1544         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
1545         whether field is really assigned.
1546
1547 2006-04-30  Raja R Harinath  <harinath@gmail.com>
1548
1549         * flowanalysis.cs (Reachability): Make 4-argument constructor
1550         private.
1551         (Reachability.Meet): Rename from 'And'.  Remove static variant.
1552         (Reachability.Always): Rename from the highly misleading
1553         'Reachability.Never'.
1554         (FlowBranching.Merge): Update to changes.  Mark an impossible
1555         situation with a 'throw'.
1556         (*): Update to changes.
1557
1558 2006-04-29  Raja R Harinath  <harinath@gmail.com>
1559
1560         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
1561         Remove 'Undefined'.
1562         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
1563         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
1564         (*): Update to changes.
1565         * statement.cs: Update to changes.
1566
1567 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
1568
1569         A fix for #78049
1570         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
1571
1572 2006-04-28  Raja R Harinath  <harinath@gmail.com>
1573
1574         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
1575         dummy UsageVector.
1576
1577         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
1578         argument to two arguments: an usage-vector and a bool.  Move call
1579         to FlowBranching.Merge () ...
1580         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
1581
1582         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
1583         handling of loop and switch reachability to ...
1584         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
1585
1586 2006-04-27  Raja R Harinath  <harinath@gmail.com>
1587
1588         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
1589         handling to FlowBranchingLoop.InLoop.
1590         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
1591
1592 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
1593
1594         A fix for #78115
1595         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
1596         anonymous method is allowed from AnonymousContainer here.
1597
1598         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
1599
1600 2006-04-24  Raja R Harinath  <rharinath@novell.com>
1601
1602         Fix #78156
1603         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
1604
1605 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
1606
1607         A fix for #49011.
1608         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
1609         (DoubleConstant.Reduce): Ditto.
1610
1611 2006-04-23  Raja R Harinath  <rharinath@novell.com>
1612
1613         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
1614         Remove 'lvalue_right_side' argument.  Move parts to ...
1615         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
1616         (LocalVariable.DoResolveLValue): ... these.
1617
1618 2006-04-21  Raja R Harinath  <rharinath@novell.com>
1619
1620         Fix cs1655.cs
1621         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
1622         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
1623         (LocalVariableReference.DoResolveBase): Use it to implement new
1624         CS1655 check.
1625         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
1626         (Argument.Resolve): Simplify.  Move CS1510 check ...
1627         * ecore.cs (Expression.ResolveLValue): ... here.
1628         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
1629         (PropertyExpr.DoResolveLValue): Likewise.
1630         (FieldExpr.Report_AssignToReadonly): Likewise.
1631         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
1632         LValueMemberAccess or LValueMemberOutAccess on instance depending
1633         on it.
1634         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
1635         DoResolve as appropriate.
1636
1637 2006-04-20  Raja R Harinath  <rharinath@novell.com>
1638
1639         Fix #75800
1640         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
1641         implicit conversions on 'out' and 'ref' arguments.
1642
1643         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
1644         improve clarity.  Remove dead code.
1645
1646         Fix #66031
1647         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
1648         (Catch.Resolve): Resolve VarBlock if it exists.
1649
1650 2006-04-19  Miguel de Icaza  <miguel@novell.com>
1651
1652         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
1653         twice, this was some residual code, the enumerator was emitted
1654         properly in the two branche of if later.
1655
1656         Fixes #78031
1657         
1658         Thanks to Martin for finding the source of the problem
1659         
1660 2006-04-19  Raja R Harinath  <rharinath@novell.com>
1661
1662         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
1663         cast is never an lvalue.
1664         (Cast.DoResolve, Cast.ResolveRest): Combine.
1665         (Argument.Emit): Simplify slightly.  Move 'Expr is
1666         IMemoryLocation' check ...
1667         (Argument.Resolve): ... here.
1668         (Argument.Error_LValueRequired): Remove.  Inline into only user.
1669
1670         Simplifications.  Fix cs0191-2.cs
1671         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
1672         CS1649 and CS1651 to ...
1673         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
1674         the actual selection of the error code and message to a lookup
1675         table.  Add a dummy return value to simplify callsites.
1676         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
1677         readonly fields of other instances of the same type.  Move CS0197
1678         warning from ...
1679         * expression.cs (Argument.Resolve): ... here.  Simplify code.
1680         Ensure that ec.InRefOutArgumentResolving is only set during LValue
1681         resolution of an out or ref argument.  The code simplification
1682         above uses this invariant.
1683
1684 2006-04-18  Raja R Harinath  <rharinath@novell.com>
1685
1686         Possibly fix #77752.  Fix cs1690-[4-7].cs.
1687         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
1688         CheckMarshallByRefAccess.  Drop parameter.
1689         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
1690         warning.
1691         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
1692         InstanceExpression.
1693         * report.cs (AllWarnings): Add CS1690.
1694         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
1695         for ref access too.
1696         (LocalVariableReference.DoResolveBase): Update.
1697
1698 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1699
1700         * class.cs (MethodOrOperator): Moved common parts from method class.
1701         detect obsolete attributes.
1702         (Method.Define): Simplified as it reuses code from base.
1703         (Constructor.ValidAttributeTargets): Fixed issue found during
1704         refactoring.
1705         (Destructor.ValidAttributeTargets): Fixed issue found during
1706         refactoring.
1707         (Operator): Finished refactoring set off by #78020. Operator class is now
1708         ordinary method class.
1709
1710         * anonymous.cs: Updated.
1711
1712 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1713
1714         * class.cs (Constructor.Emit): Don't emit the attributes twice.
1715
1716 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1717
1718         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
1719         detect obsolete attributes.
1720         (Method.CreateEmitContext): Moved to MethodOrOperator.
1721
1722 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1723
1724         A fix for #78048.
1725         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
1726         customized exception to make crash detection easier.
1727         (MethodOrOperator): Started to work on new base class for methods and
1728         operators.
1729         (Method): Derives from MethodOrOperator.
1730         (Constructor.Emit): Emits its own attributes.
1731         (AbstractPropertyEventMethod.Emit): Ditto.
1732         (Operator): Derives from MethodOrOperator, will refactor fully in extra
1733         patch.
1734         (Operator.Emit): It's temporary more tricky than should be.
1735         
1736         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
1737
1738         * report.cs (InternalErrorException): Add ctor with inner exception.
1739
1740 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
1741
1742         A fix for #76744.
1743         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
1744         only not visible.
1745
1746 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
1747
1748         A fix for #77916.
1749         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
1750         array.
1751
1752 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1753
1754         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
1755         attribute is present and Guid not.
1756         (Interface.ApplyAttributeBuilder): Ditto.
1757
1758         * attribute.cs: Add error message.
1759
1760 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1761
1762         A fix for #78020.
1763
1764         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
1765         sources (it's composite) so hold them in extra array as they are used in
1766         Emit phase only. It worked in the previous versions by mistake.
1767         (Attribute.Emit): Emit attribute for more owners when exist.
1768
1769         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
1770         it has now different behaviour.
1771
1772 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
1773
1774         * constant.cs (Constant.IsDefaultInitializer): New method.
1775
1776         * class.cs: Updated.
1777
1778         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
1779         re-initialize default values. It saves KBs almost for every assembly.
1780         Thanks Zoltan for the idea.
1781         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
1782         (ArrayCreation.DoResolve): Resolve only once.
1783         (ArrayCreation.Emit): Emit static initializer only when it is faster.
1784         (ArrayCreation.GetAttributableValue): Cope with optimized values.
1785
1786 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
1787
1788         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
1789         From #77961.
1790
1791 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1792
1793         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
1794         in an embedded statement too.
1795
1796 2006-04-01  Raja R Harinath  <rharinath@novell.com>
1797
1798         Fix #77929
1799         * typemanager.cs (IsNestedChildOf): Drop generic arguments before
1800         testing.
1801
1802         Fix #77958
1803         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
1804
1805         Fix #77962
1806         * report.cs (SymbolRelatedToPreviousError): Drop generic type
1807         arguments before checking whether a type is reflected or not.
1808
1809         Fix #77954
1810         * expression.cs (Invocation.IsApplicable): Ensure a generic method
1811         definition doesn't take part in overload resolution.
1812         (Invocation.IsParamsMethodApplicable): Likewise.
1813         (Invocation.OverloadResolve): When replacing a reflected override
1814         method with its base definition, ensure that type arguments are
1815         applied.
1816
1817 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1818
1819         A fix for #77966.
1820
1821         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
1822         was not specified.
1823
1824         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
1825
1826 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
1827
1828         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
1829         phase.
1830
1831         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
1832         LocalTemporary change.
1833
1834         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
1835         TypeContainer.
1836         (ClassOrStruct.DefineFieldInitializers): Implemented static field
1837         initializers optimization.
1838         (ClassOrStruct.TypeAttr): Moved from modifiers.
1839         (Constructor.CheckBase): Don't crash when static ctor has parameters.
1840         (FieldBase.ResolveInitializer): Resolves initializer.
1841         (FieldBase.HasDefaultInitializer): New property.
1842
1843         * cs-parser.jay: Removed message.
1844
1845         * expression.cs (CompilerGeneratedThis): New specialization.
1846
1847         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
1848
1849 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
1850
1851         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
1852
1853 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1854
1855         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
1856         be now EnumConstants only.
1857
1858 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1859
1860         * attribute.cs, driver.cs: Reset more caches.
1861
1862 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1863
1864         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
1865
1866 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1867
1868         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
1869         for easier reuse. Updated all overrides.
1870         (IntegralConstant): New base class for all integral constants.
1871         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
1872         of the constant range, report custom error.
1873         (UIntConstant.Reduce): Fixed uint conversion.
1874
1875         * ecore.cs, literal.cs: Reduce updates.
1876
1877 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1878
1879         A fix for #75813.
1880
1881         * class.cs (Constructor.Define): Removed extra if for default ctors.
1882         A patch from Atsushi Enomoto.
1883
1884 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1885
1886         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
1887         GetAttributableValue.
1888
1889         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
1890         when required.
1891
1892         * convert.cs (ImplicitConversionRequired): Error message moved to
1893         DoubleLiteral.
1894
1895         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
1896         automatic implicit conversion of an output value.
1897         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
1898
1899         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
1900         conversion.
1901         (TypeOf.GetAttributableValue): Add extra handling for object type.
1902
1903         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
1904         special error message.
1905
1906 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
1907
1908         * class.cs (Constructor.Emit): Don't crash when struct ctor is
1909         InternalCall.
1910         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
1911         compatible with MS runtime.
1912
1913 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
1914
1915         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
1916         attribute arguments here.
1917
1918         * class.cs (Indexer.Define): The check was moved to attribute class.
1919
1920 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1921
1922         * expression.cs (StringConcat.Append): Reverted back to no warning state.
1923
1924 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1925
1926         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
1927
1928         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
1929         the blocks too.
1930
1931 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
1932
1933         * doc-bootstrap.cs : fix build.
1934
1935 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1936
1937         * expression.cs (StringConcat.Append): Issue a warning when empty string
1938         is going to append.
1939
1940 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1941
1942         * assign.cs (CompoundAssign.ResolveSource): Removed.
1943
1944         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
1945         clean up.
1946
1947         * class.cs (TypeContainer.FindMethods): Removed.
1948         (TypeContainer.CheckMemberUsage): Made static.
1949
1950         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
1951
1952         * constant.cs (CheckRange): Removed unused type argument.
1953         (CheckUnsigned): Removed unused type argument.
1954
1955         * cs-parser.jay: Updated after MemberAccess clean up.
1956         Uses Length for empty string test.
1957
1958         * cs-tokenizer.cs: Uses Length for empty string test.
1959         (IsCastToken): Made static.
1960         (is_hex): Made static.
1961         (real_type_suffix): Made static.
1962
1963         * decl.cs (SetupCache): Made static.
1964         (OnGenerateDocComment): Removed unused ds argument.
1965
1966         * delegate.cs (VerifyDelegate): Removed unused argument.
1967
1968         * doc.cs: Uses Length for empty string test.
1969
1970         * driver.cs: Uses Length for empty string test.
1971
1972         * enum.cs (IsValidEnumType): Made static
1973
1974         * expression.cs (EnumLiftUp): Removed unused argument.
1975         (ResolveMethodGroup): Ditto.
1976         (BetterConversion): Ditto.
1977         (GetVarargsTypes): Ditto.
1978         (UpdateIndices): Ditto.
1979         (ValidateInitializers): Ditto.
1980         (MemberAccess.ctor): Ditto.
1981         (GetIndexersForType): Ditto.
1982
1983         * flowanalysis.cs: (MergeFinally): Removed unused argument.
1984
1985         * iterators.cs: Updated after MemberAccess clean up.
1986
1987         * location.cs: Uses Length for empty string test.
1988
1989         * namespace.cs: Uses Length for empty string test.
1990
1991          * report.cs (CheckWarningCode): Made static.
1992
1993         * statement.cs (LabeledStatement): Removed unused argument.
1994
1995         * typemanager.cs (FilterNone): Removed.
1996
1997 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1998
1999         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
2000         obsolete.
2001
2002         * class.cs: Updated.
2003
2004 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
2005
2006         * cs-parser.jay.cs: __arglist is not allowed for delegates.
2007
2008 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
2009
2010         A fix for #77816.
2011
2012         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
2013         host container.
2014         (AnonymousMethod.ImplicitStandardConversionExists): New method.
2015         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
2016         Add more error reporting; Fixed issue with params.
2017
2018         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
2019
2020         * cs-parser.jay: AnonymousMethod requires host container.
2021
2022         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
2023
2024 2006-03-18  Raja R Harinath  <harinath@gmail.com>
2025
2026         * class.cs: Change 'TypeContainer ds' constructor argument to
2027         'DeclSpace parent'.  Some classes were missed below due to
2028         different naming convention.
2029
2030         * class.cs (MemberCore.Parent): Delete.  This makes the
2031         ParentContainer changes below enforceable by the compiler.
2032
2033         Treat pointers to enclosing declaration space as 'DeclSpace', not
2034         'TypeContainer'.
2035         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
2036         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
2037
2038         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
2039         of TypeContainer.
2040         (Block.AddThisVariable): Likewise.
2041         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
2042         (AbstractPropertyEventMethod.Emit): Likewise.
2043         (AbstractPropertyEventMethod.EmitMethod): Likewise.
2044         (GetMethod.Define, SetMethod.Define): Likewise.
2045         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
2046         (DelegateMethod.EmitMethod): Likewise.
2047
2048         Fix regression test-partial-13.cs.
2049         Rationalize use of PartialContainer.  Ensure that the partial
2050         class semantics can be tied to type-correctness, i.e., any
2051         violation will cause a compile error.
2052         * class.cs, const.cs: Access all fields that belong to class
2053         TypeContainer via ParentContainer.  Arguments of EmitContexts and
2054         Resolve()-like functions still use 'Parent'.
2055
2056         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
2057         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
2058         (PropertyMethod.CheckModifiers): Remove unused argument.
2059         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
2060         DeclSpace.
2061
2062 2006-03-28  Raja R Harinath  <rharinath@novell.com>
2063
2064         * decl.cs (DeclSpace.LookupGeneric): Update to changes.
2065
2066 2006-03-17  Raja R Harinath  <harinath@gmail.com>
2067
2068         Make semantics of PartialContainer simpler.
2069         * decl.cs (DeclSpace.IsPartial): Remove.
2070         * class.cs (TypeContainer.IsPartial): Likewise.
2071         (TypeContainer..ctor): Set PartialContainer to point to self.
2072         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
2073         (TypeContainer.FindNestedType): Likewise.
2074         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
2075
2076 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
2077
2078         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
2079
2080 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
2081
2082         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
2083         classes.
2084
2085 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
2086
2087         * class.cs (Operator.Define): An error for base conversion was not
2088         reported correctly.
2089
2090 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
2091
2092         A fix for #77593, #77574.
2093
2094         * class.cs (MethodCore.CheckBase): Another if for operator.
2095
2096 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
2097
2098         A fix for #77822.
2099
2100         * expression.cs (VerifyArgumentsCompat): Reverted to double error
2101         reporting, it's more tricky than I thought.
2102
2103 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
2104
2105         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
2106         were not resolved
2107
2108         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
2109         (DelegateCreation.ImplicitStandardConversionExists): New method for just
2110         conversion test.
2111         
2112         * ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
2113         not needed.
2114
2115 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
2116
2117         A fix for #77353.
2118
2119         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
2120         (Event.Define): ditto
2121         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
2122
2123         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
2124         Removed redundant code and set NewSlot for Invoke method too.
2125
2126         * parameter.cs (Parameters.ctor): Add custom, type ctor.
2127         (Parameters.MergeGenerated): New method. Use this method when you merge
2128         compiler generated argument with user arguments.
2129
2130 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
2131
2132         * attribute.cs (ResolveAsTypeTerminal): Removed.
2133
2134         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
2135         specialization for predefined types; 30% speed up.
2136         Finally placed obsolete check to right place.
2137         (Expression.ResolveType): Removed.
2138
2139         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
2140         Updated after ResolveType was removed.
2141
2142         * expression.cs (Cast.ctor): Check void cast.
2143         (Binary.ResolveAsTypeTerminal): Is never type.
2144         (Conditional.ResolveAsTypeTerminal): Is never type.
2145
2146         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
2147
2148 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
2149
2150         * rootcontext.cs (ResolveCore): Removed System.INullableValue.
2151
2152 2006-03-23  Martin Baulig  <martin@ximian.com>
2153
2154         * expression.cs (Is.DoResolve, As.DoResolve): Perform a dynamic
2155         type check if either of the types is an open generic type.
2156
2157 2006-03-23  Martin Baulig  <martin@ximian.com>
2158
2159         * convert.cs
2160         (Convert.ExplicitTypeParameterConversion): New method; implement
2161         explicit type parameter conversions.
2162
2163 2006-03-23  Martin Baulig  <martin@ximian.com>
2164
2165         * convert.cs (Convert.ImplicitTypeParameterConversion): Do not
2166         blindly allow all conversions if we do not have any constraints.
2167
2168 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
2169
2170         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
2171         these two separated members to simplify the code.
2172         (Attribute.Resolve): Refactored to use new fields and methods.
2173         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
2174         implemented obsolete attribute checking.
2175         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
2176         implemented obsolete checking again. It look line never ending quest ;-)
2177         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
2178
2179         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
2180
2181         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
2182
2183         *class.cs (Property.Define): Add RegisterProperty call.
2184
2185         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
2186         argument groups (only 2).
2187
2188         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
2189         encoding expression to arguments.
2190         (Expression.ExprClassToResolveFlags): Just turned to property.
2191
2192         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
2193         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
2194         optimized as well as implemented support for zero-length attributes.
2195
2196         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
2197         Add caching of PropertyInfo's.
2198
2199 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
2200
2201         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
2202         error multiple times.
2203
2204 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
2205
2206         New partial class implementation.
2207         A fix for #77027, #77029, #77403
2208
2209         * attribute.cs (Attributable): Made attributes protected.
2210
2211         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
2212         the replacements of ClassPart and PartialContainer.
2213         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
2214         (TypeContainer.AddInterface): Ditto.
2215         (TypeContainer.AddPartial): The main method for partial classes. It checks
2216         for errors and merges ModFlags and attributes. At the end class is added to
2217         partial_parts list.
2218         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
2219         required here.
2220         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
2221         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
2222         from the rest of partial classes.
2223         (TypeContainer.GetClassBases): Simplified.
2224         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
2225         DefineType.
2226         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
2227         (TypeContainer.HasExplicitLayout): Uses Flags now.
2228         (PartialContainer): Removed.
2229         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
2230         (StaticClass): Was merged with Class.
2231         (Class.GetClassBases): class and static class bases are verified here.
2232         (Class.TypeAttr): Added static attributes when class is static.
2233         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
2234         (MemberBase): In some cases we need to call parent container for partial
2235         class. It should be eliminated but it's not easy now.
2236
2237         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
2238
2239         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
2240         partial classed to accumulate class comments.
2241         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
2242
2243         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
2244
2245         * driver.cs (MainDriver): Tree.GetDecl was removed.
2246
2247         * modifiers.cs (Modifiers): Add partial modifier.
2248
2249         * tree.cs (Tree.decl): Removed.
2250         (RootTypes): Started to use this class more often for root types
2251         specializations.
2252
2253 2006-03-23  Raja R Harinath  <rharinath@novell.com>
2254
2255         * generic.cs (TypeParameter.UpdateConstraints): Update
2256         'constraints' if null.
2257
2258 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
2259
2260         A fix for #77615
2261
2262         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
2263         external interface does not have an attribute.
2264
2265 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
2266
2267         Another prerequisites for new partial classs implementation.
2268         
2269         * attribute.cs (Attribute.Equal): Implemented.
2270         (Attribute.Emit): Changed as attributes can be applied more than twice.
2271         (Attributes.Emit): Check for duplicate attributes here.
2272
2273         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
2274         as a parameter, clean-up.
2275
2276 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
2277
2278         A fix for #77485
2279
2280         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
2281         contains obsolete attribute check which can in some cases look for base
2282         type of current class which is not initialized yet.
2283         (TypeContainer.BaseType): Replacement of ptype.
2284
2285         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
2286
2287 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
2288
2289         First of prerequisites for new partial classs implemention.
2290         
2291         * attribute.cs (Attributable): Extended by ResolveContext;
2292         Attributes finally have correct context for resolving in all cases.
2293         (AttachTo): Attribute owner is assigned here.
2294
2295         * codegen.cs (IResolveContext): Introduce new interface to hold
2296         all information needed in resolving phase.
2297         (EmitContext): Implements IResolveContext; more clean-up needed here.
2298         
2299         * decl.cs (MemberCore): Implemented IResolveContext.
2300
2301         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
2302         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
2303         parameter.cs, statement.cs, tree.cs, typemanager.cs:
2304         Refactored to use new IResolveContext instead of EmitContext; cleanup
2305
2306 2006-03-22  Raja R Harinath  <rharinath@novell.com>
2307
2308         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
2309         mcs to keep code differences small.
2310         * attribute.cs (Attribute.GetParameterDefaultValue): New.
2311         * typemanager.cs (parameter_default_value_attribute_type): New.
2312         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
2313         CS1908 check.
2314
2315 2006-03-22  Martin Baulig  <martin@ximian.com>
2316
2317         * generic.cs
2318         (Nullable.NullableLiteral): Derive from `NullLiteral'.
2319
2320         * convert.cs
2321         (Convert.TypeParameter_to_Null): Create a `Nullable.NullableLiteral'
2322         instead of the normal `NullLiteral'.
2323
2324 2006-03-21  Martin Baulig  <martin@ximian.com>
2325
2326         Fix #77583.
2327         * generic.cs (TypeManager.InferType): If `pt' is a generic
2328         parameter, don't check whether `pt == at'.
2329
2330 2006-03-20  Raja R Harinath  <rharinath@novell.com>
2331
2332         Fix #77852
2333         * generic.cs (Constraints.Resolve): Change argument to IResolveContext.
2334         (TypeParameter.Resolve): Update to change.
2335         (ConstraintChecker.CheckConstraints): Resolve type-argument
2336         constraints before use.
2337
2338 2006-03-16  Martin Baulig  <martin@ximian.com>
2339
2340         * generic.cs
2341         (ConstraintChecker.HasDefaultConstructor): If we're a TypeBuilder
2342         and don't have any instance constructors, also lookup in the base class.
2343         (TypeManager.IsNullableValueType): New public method.
2344
2345         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Clear the
2346         `BindingFlags.DeclaredOnly' flag and set `used_cache'.
2347         (TypeManager.TryGetBaseDefinition): Use DropGenericMethodArguments().
2348
2349         * expression.cs (Unary.DoResolve): Use TypeManager.IsNullableValueType()
2350         instead of just TypeManager.IsNullableType() to determine whether
2351         a lifted operator exists.
2352         (UnaryMutator.DoResolve): Likewise.
2353         (Conditional.DoResolve): Likewise.
2354         (Binary.DoResolve): A lifted operator only exists if both operands
2355         are valuetypes and at least one of them is a nullable type.
2356
2357 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
2358
2359         * iterator.cs : yield break is allowed in try statement which has
2360           catch clauses. Fixed bug #77767.
2361
2362 2006-03-12  Martin Baulig  <martin@ximian.com>
2363
2364         * typemanager.cs (TypeManager.ArrayContainsMethod): Use a new
2365         private IsSignatureEqual() to compare types; see the comment in
2366         that method; fixes #77674.
2367
2368 2006-03-10  Raja R Harinath  <rharinath@novell.com>
2369
2370         * ecore.cs (Expression.ResolveAsTypeStep): Remove 1-argument wrapper.
2371         (Expression.ResolveAsTypeTerminal): Likewise.
2372         * class.cs, decl.cs, delegate.cs, ecore.cs: Update to changes.
2373         * expression.cs, generic.cs, iterators.cs: Likewise.
2374         * parameter.cs, statement.cs, typemanager.cs: Likewise.
2375
2376 2006-03-09  Martin Baulig  <martin@ximian.com>
2377
2378         * generic.cs (ConstraintChecker.HasDefaultConstructor): Call
2379         TypeManager.DropGenericTypeArguments() on the `atype'; fixes #77548.
2380
2381 2006-03-09  Martin Baulig  <martin@ximian.com>
2382
2383         * ecore.cs (FieldExpr.AddressOf): Don't emit the instance if the
2384         `prepared' flag is set.
2385
2386         * generic.cs (LiftedBinaryOperator): Don't allow `||' or `&&' anymore.
2387         (LiftedBinaryOperator, LiftedUnaryMutator): Fix a few nullable
2388         issues; see gtest-254.cs.
2389
2390 2006-03-07  Martin Baulig  <martin@ximian.com>
2391
2392         * generic.cs (TypeManager.InferType): Allow infering
2393         `IEnumerable<T>' with an array of T; see gtest-251.cs.
2394
2395 2006-03-06  Martin Baulig  <martin@ximian.com>
2396
2397         * generic.cs
2398         (TypeManager.InferType): Fix gtest-250.cs.
2399
2400         * typemanager.cs
2401         (TypeManager.IsSubclassOf): Also check the base class.
2402
2403         * expression.cs
2404         (Invocation.IsAncestralType): Use TypeManager.IsSubclassOf();
2405         fixes gtest-249.cs.
2406
2407 2006-03-01  Raja R Harinath  <rharinath@novell.com>
2408
2409         Fix #77679.
2410         * expression.cs (ParameterReference.DoResolveBase): Change return
2411         type to bool.
2412         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
2413         Update.
2414
2415         Fix #77628.
2416         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
2417
2418         Fix #77642.
2419         * typemanager.cs (GetFullNameSignature): Don't nullref on
2420         protected accessors.
2421
2422 2006-02-16  Martin Baulig  <martin@ximian.com>
2423
2424         * generic.cs
2425         (TypeManager.GetGenericFieldDefinition): New public method; use it
2426         instead of the `FieldInfo.Mono_GetGenericFieldDefinition()' icall.
2427
2428 2006-02-14  Martin Baulig  <martin@ximian.com>
2429
2430         * *.cs: Use `Type.IsGenericType' instead of `Type.IsGenericInstance'.
2431
2432 2006-02-14  Martin Baulig  <martin@ximian.com>
2433
2434         * generic.cs
2435         (TypeManager.DropGenericMethodArguments): New public method; don't
2436         use GetGenericMethodDefinition() on something which is not a
2437         generic method.
2438
2439 2006-02-14  Martin Baulig  <martin@ximian.com>
2440
2441         * generic.cs
2442         (ConstraintChecker.CheckConstraints): If a type parameter has the
2443         `struct' constraint, the type must be a non-nullable valuetype.
2444
2445 2006-02-10  Martin Baulig  <martin@ximian.com>
2446
2447         * typemanager.cs
2448         (TypeManager.IsOverride): Make this work for instantiated methods
2449         in a generic class; fixes #77509.
2450         (TypeManager.ExpandInterfaces): Use TypeManager.GetInterfaces()
2451         rather than calling it directly; fixes #77488.  
2452
2453 2006-02-08  Martin Baulig  <martin@ximian.com>
2454
2455         * generic.cs (ConstraintChecker.CheckConstraints): Move the error
2456         reporting into CheckConstraint() so we can use the correctly
2457         instantiated type.
2458
2459 2006-02-08  Martin Baulig  <martin@ximian.com>
2460
2461         * expression.cs (BaseAccess): Add support for generic methods.
2462
2463         * ecore.cs (MethodGroupExpr.ResolveGeneric): Propagate `IsBase' to
2464         the new MethodGroupExpr.
2465
2466 2006-02-07  Martin Baulig  <martin@ximian.com>
2467
2468         * generic.cs (ConstraintChecker.CheckConstraints): Interfaces are
2469         also reference types; fixes #77483.
2470
2471 2006-02-07  Martin Baulig  <martin@ximian.com>
2472
2473         * generic.cs
2474         (TypeManager.IsGenericMethod): We now return whether something is
2475         an instantiated generic method (and not a generic method def).
2476         (TypeManager.IsGenericMethodDefinition): New public method.
2477
2478         * typemanager.cs
2479         (TypeManager.CSharpSignature): Only include type arguments for
2480         "real" generic methods, not for any instantiated method.
2481         (TypeManager.GetMethodName): Likewise, but also allow generic
2482         method definitions here.
2483
2484 2006-02-06  Miguel de Icaza  <miguel@novell.com>
2485
2486         * codegen.cs (EmitScopeInitFromBlock): check here the
2487         capture_context, there is no need to make two calls to the
2488         EmitContext. 
2489
2490         * anonymous.cs: Add some debugging messages that might help me
2491         track other instances of this problem in the future (the
2492         regression of test 467).
2493
2494         * cs-parser.jay: track the variable block, as we need to initalize
2495         any captured variables declared in this block for the "catch"
2496         portion of the "Try" statement.
2497
2498         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
2499         scope initialization for captured variables. 
2500
2501         Also, move the emit for the variables after the block location has
2502         been marked.
2503
2504 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
2505
2506        * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
2507         
2508 2006-02-06  Martin Baulig  <martin@ximian.com>
2509
2510         * class.cs (TypeContainer.DefineType): If we're a struct, pass
2511         `TypeManager.value_type' as parent type to
2512         ModuleBuilder.DefineType().  Fixes #77358.      
2513
2514 2006-02-02  Miguel de Icaza  <miguel@novell.com>
2515
2516         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
2517         commit yesterday, the initialization for the roots is necessary.
2518         What is not necessary is the scope activation.
2519
2520 2006-02-02  Raja R Harinath  <rharinath@novell.com>
2521
2522         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
2523         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
2524         CS0206 checks.
2525         (Argument.Resolve): Remove CS0206 checks.
2526
2527 2006-02-01  Miguel de Icaza  <miguel@novell.com>
2528
2529         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
2530         scopes for all the roots, the scopes will now be emitted when the
2531         Blocks are entered. [This change was wrong, fixed on 2006-02-02]
2532
2533         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
2534         code.  This reduces a lot of existing cruft.
2535         
2536         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
2537         that the ScopeInfo is generated as we enter the scope, not at the
2538         time of use, which is what we used to do before.
2539
2540         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
2541         every time a Block is about to be emitted if we have a
2542         CaptureContext. 
2543
2544 2006-02-01  Raja R Harinath  <rharinath@novell.com>
2545
2546         * codegen.cs (AssemblyClass.Emit): Emit RuntimeCompatibility
2547         attribute for mscorlib too.
2548
2549         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
2550         (Reset): Update.
2551         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
2552
2553         * typemanager.cs (cons_param_array_attribute): Make private.
2554         (Reset): Set it to null.
2555         (InitCoreHelpers): Don't initialize it.
2556         (ConsParamArrayAttribute): New.  Initialize it as needed.
2557         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
2558
2559 2006-01-31  Miguel de Icaza  <miguel@novell.com>
2560
2561         * expression.cs: There might be errors reported during the
2562         selection of applicable methods.  If there are errors, do not
2563         continue execution as it will lead the compiler to crash.
2564
2565 2006-01-30  Miguel de Icaza  <miguel@novell.com>
2566
2567         * expression.cs: Member access is not allowed on anonymous
2568         methods.  Fixes #77402.
2569
2570 2006-01-30  Raja R Harinath  <rharinath@novell.com>
2571
2572         Fix #77401
2573         * cs-parser.jay (VariableDeclaration): Don't set
2574         current_array_type to null.
2575         (field_declaration, event_declaration, declaration_statement):
2576         Set it to null here.
2577
2578 2006-01-29  Raja R Harinath  <harinath@gmail.com>
2579
2580         Fix part of #77397
2581         * generic.cs (TypeManager.IsEqual): Handle pass-by-ref types.
2582
2583 2006-01-28  Raja R Harinath  <harinath@gmail.com>
2584
2585         * typemanager.cs (GenericParameterPosition): New.
2586         * doc.cs: Use it.
2587
2588 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
2589
2590         * doc.cs : To process "include" elements, first we should create
2591           another list than XmlNodeList, because it could result in node
2592           removal, which could result in that the XmlNodeList gives up
2593           yielding next node.
2594
2595 2006-01-25  Miguel de Icaza  <miguel@novell.com>
2596
2597         * expression.cs: Introduce an error report that we were not
2598         catching before.   Gonzalo ran into it.
2599
2600 2006-01-23  Miguel de Icaza  <miguel@novell.com>
2601
2602         A fix for bug: #76957
2603         
2604         * iterators.cs (MoveNextMethod.CreateMethodHost): call
2605         ComputeMethodHost before creating the method, this is a new
2606         requirement. 
2607
2608         * anonymous.cs (AnonymousContainer): Now we track all the scopes
2609         that this method references (RegisterScope).  The actual scope
2610         where the method is hosted is computed with the ComputeMethodHost
2611         before we create the method.
2612
2613         Moved the Deepest routine here.
2614
2615         (AnonymousContainer.ComputeMethodHost): New routine used to
2616         compute the proper ScopeInfo that will host the anonymous method.
2617
2618         (ScopeInfo): Deal with multiple roots.  The problem was that we
2619         did not have a unique root where all ScopeInfos could be hanged
2620         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
2621         of roots.  
2622
2623         Remove AdjustMethodScope which is now computed at the end.  Remove
2624         LinkScope which did a partial link, instead link all ScopeInfos
2625         before code generation from the new "LinkScopes" routine. 
2626
2627         Simplify all the Add* routines as they no longer need to maintain
2628         the tree, they just need to record that they are using variables
2629         from a ScopeInfo.
2630
2631         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
2632         routines to produce the forest of ScopeInfo trees.
2633
2634         * class.cs (TypeContainer.AppendMethod): This is just like
2635         AddMethod, but ensures that an interface implementation method
2636         (IEnumerable.XXX) is not inserted at the beginning of the queue of
2637         methods, but at the end.
2638
2639         We use this functionality to ensure that the generated MoveNext
2640         method in the iterator class is resolved/emitted before the
2641         enumerator methods created.   
2642
2643         This is required because the MoveNext method computes the right
2644         ScopeInfo for the method.  And the other methods will eventually
2645         need to resolve and fetch information computed from the anonymous
2646         method. 
2647
2648         
2649 2006-01-23  Raja R Harinath  <rharinath@novell.com>
2650
2651         Improve implementation of section 14.4.2.2 (Better function member).
2652         * expression.cs (Invocation.MoreSpecific): Compare all type
2653         arguments before deciding if one type is more specific than
2654         another.  Handle array types too.  Return the more specific type.
2655         (Invocation.BetterFunction): Add more tie-breaking rules from
2656         section 14.4.2.2.  Perform "more specific" check after
2657         other tie-breaking rules.  Compare all parameter types before
2658         choosing the "more specific" method.
2659
2660 2006-01-21  Raja R Harinath  <harinath@gmail.com>
2661             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
2662
2663         Fix rest of #76995.
2664         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
2665         the 'aliases' hash.
2666         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
2667         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
2668
2669 2006-01-18  Martin Baulig  <martin@ximian.com>
2670
2671         * class.cs (TypeContainer.AddToMemberContainer): Use
2672         `symbol.MemberName.MethodName' instead of just `symbol.Name';
2673         fixes #77124.
2674
2675 2006-01-18  Martin Baulig  <martin@ximian.com>
2676
2677         Fix #76417: a generic class may now have methods which may unify
2678         for some type parameter substitutions.
2679
2680         * class.cs (Method.IsDuplicateImplementation): Don't report CS0408
2681         for methods which may unify anymore.
2682
2683         * expression.cs (Invocation.MoreSpecific): New private static
2684         method; checks whether one method is more specific than another
2685         according to 14.4.2.2 of the spec.
2686         (Invocation.BetterFunction): Implement the tie-breaking rules from
2687         14.4.2.2 of the spec: if two methods unify for some type parameter
2688         substitution, we need to pick the more specific one.
2689
2690 2006-01-18  Raja R Harinath  <rharinath@novell.com>
2691
2692         Fix #76656, cs0231-2.cs.
2693         * cs-parser.jay (formal_parameter_list): Make error case catch
2694         more issues.
2695         (parenthesized_expression_0): Add CS1026 check.
2696         (invocation_expression): Remove unused { $$ = lexer.Location }.
2697
2698 2006-01-17  Raja R Harinath  <rharinath@novell.com>
2699
2700         Fix #76824.
2701         * cs-parser.jay (statement_expression): Don't list out the
2702         individual statement-expressions.  Convert syntax error into
2703         CS0201 check.
2704
2705 2006-01-16  Raja R Harinath  <rharinath@novell.com>
2706
2707         Fix #76874.
2708         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
2709         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
2710         CheckIntermediateModification.
2711         (FieldExpr.DoResolve): Add new two-argument version that
2712         allows us to resolve the InstanceExpression as an lvalue.
2713         The one-argument variant is now just a wrapper.
2714         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
2715         Resolve the lhs as an lvalue if the it has a value type.
2716         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
2717         from Assign.DoResolve.
2718         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
2719         resolved as an lvalue.
2720         (PropertyExpr.DoResolve): Update.
2721         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
2722         has a value type.  Move CS1612 check here from
2723         CheckIntermediateModification.
2724         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
2725         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
2726         'right_side' of a ResolveLValue on an 'out' argument.
2727         (EmptyExpression.LValueMemberAccess): New.  Used as the
2728         'right_side' of a propagated ResolveLValue on a value type.
2729         (LocalVariableReference.DoResolveBase): Recognize
2730         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
2731         Add CS1654 check.
2732         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
2733         EmptyExpression.Null.
2734
2735 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
2736
2737         * typemanager.cs : added IsGenericParameter(). In gmcs it returns
2738           Type.IsGenericParameter(). Fixed bug #77183.
2739         * doc.cs : it is now identical to doc.cs in mcs.
2740
2741 2006-01-16  Martin Baulig  <martin@ximian.com>
2742
2743         * generic.cs (ConstraintChecker.CheckConstraint): Fix #77167.
2744
2745 2006-01-16  Martin Baulig  <martin@ximian.com>
2746
2747         * typemanager.cs (TypeManager.CSharpSignature): Make this work for
2748         ctors; fixes #77250.
2749
2750 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2751
2752         This fixes the problem where we used ldfld instead of ldflda to
2753         load the "THIS" pointer on captured parameters, when THIS is a
2754         value type.  See bug #77205.
2755         
2756         * iterators.cs (CapturedThisReference.Emit): Pass false to
2757         EmitThis (we do not need the address).
2758
2759         * codegen.cs (EmitThis): it needs to know whether we need the
2760         address of `this' or not.  This is used by value types.  
2761
2762         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
2763         every other call passes false.
2764
2765 2006-01-12  Raja R Harinath  <rharinath@novell.com>
2766
2767         Fix #77221.
2768         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
2769         GetOverride.
2770         * expression.cs (Invocation.OverloadResolve): Update.
2771         (Invocation.DoResolve): Avoid double resolution of invocation.
2772
2773 2006-01-11  Raja R Harinath  <rharinath@novell.com>
2774
2775         Fix #77180.
2776         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
2777         unary negation of floating point types as 0-expr; negation cannot
2778         overflow in floating point types.
2779
2780         Fix #77204.
2781         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
2782         on operands of 'void' type.
2783
2784         Fix #77200.
2785         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
2786         and ExclusiveOr for boolean constants too.
2787
2788 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
2789
2790         * expression.cs: Fix Console.WriteLine ((this = x).foo);
2791
2792 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2793
2794         * cs-tokenizer.cs (Position): New class used to save and restore
2795         the position state in the tokenizer.  Before this patch the save
2796         and restore was not complete enough so the line and columns would
2797         start to drift and the debugger and stack traces will get the
2798         wrong data.
2799
2800 2006-01-10  Martin Baulig  <martin@ximian.com>
2801
2802         * generic.cs
2803         (TypeParameter.InflateConstraints): New public method.
2804
2805         * iterators.cs (Iterator.DefineNestedTypes): Also inflate the
2806         constraints; fixes #77042.
2807
2808 2006-01-10  Martin Baulig  <martin@ximian.com>
2809
2810         * anonymous.cs (ScopeInfo.EmitScopeType): Use the `CurrentType'
2811         instead of the `TypeBuilder' for this "<>THIS" variable; fixes
2812         #77061. 
2813
2814 2006-01-09  Raja R Harinath  <rharinath@novell.com>
2815
2816         Fix #75636.
2817         * expression.cs (Invocation.OverloadResolve): Replace reflected
2818         override methods with their base virtual methods, rather than
2819         skipping over them.
2820         * typemanager.cs (TypeManager.GetOverride): New.
2821
2822 2005-12-21  Miguel de Icaza  <miguel@novell.com>
2823
2824         * driver.cs: Report the case of no source files and no -out:
2825         argument provided.
2826
2827 2005-12-20  Raja R Harinath  <rharinath@novell.com>
2828
2829         Fix #77035.
2830         * expression.cs (ComposedCast.GetSignatureForError): Define.
2831
2832 2006-01-05  Jb Evain  <jbevain@gmail.com>
2833
2834         * class.cs (Property.Define, Indexer.Define): do not tag the
2835         properties as SpecialName | RTSpecialName.
2836
2837 2006-01-04  Miguel de Icaza  <miguel@novell.com>
2838
2839         * class.cs (MethodCore.IsDuplicateImplementation): This method was
2840         doing a low-level comparission of parameter types.  It was lacking
2841         a check for __argslist. 
2842
2843 2005-12-30  Miguel de Icaza  <miguel@novell.com>
2844
2845         * expression.cs (ParameterReference.DoResolveBase): Allow
2846         reference parameters if they are local to this block. 
2847
2848         This allows the ref and out parameters of a delegate to be used in
2849         an anonymous method, for example:
2850
2851         delegate void set (out int x);
2852
2853         set s = delegate (out int x){
2854                 x = 0;
2855         };
2856
2857         This is used by functionality introduced late in the C# language.
2858         
2859         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
2860         method that take ref and out parameters. 
2861
2862         Fixes #77119 which was a late change in the spec.
2863
2864 2005-12-23  Miguel de Icaza  <miguel@novell.com>
2865
2866         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
2867         parent if its the same scope.  Fixes #77060.
2868
2869 2005-12-22  Marek Safar  <marek.safar@seznam.cz>
2870
2871         * expression.cs (ComposedCast.DoResolveAsTypeStep): Fixed wrong merge.
2872
2873 2005-12-21  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2874
2875         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): Generate
2876         errors 1726 for strong named assemblies with InternalsVisibleToAttribute 
2877         that doesn't contain the full public key. This is a update of the
2878         friend assemblies in .Net 2.0 release.
2879         
2880 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
2881
2882         Fix #76995
2883
2884         * namespace.cs (NamespaceEntry): Add extern_aliases as a
2885         ListDictionary, to contain the ExternAliasEntry entries (in
2886         addition to the NamespaceEntry.aliases hashtable). This field is
2887         shared between the original entry and its doppelganger (bodyless 
2888         copy of it).
2889         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
2890         extern_aliases field.
2891         (NamespaceEntry.Lookup): Move the IsImplicit check after the
2892         lookup in extern_aliases.
2893
2894 2005-12-16  Raja R Harinath  <rharinath@novell.com>
2895
2896         Fix #77006.
2897         * class.cs (TypeContainer.Mark_HasEquals): New.
2898         (TypeContainer.Mark_HasGetHashCode): New.
2899         (ClassPart): Override them.
2900         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
2901
2902         * generic.cs (GenericMethod.DefineMembers): Update to changes.
2903         (TypeParameter.TypeParameter): Change type of 'parent' argument to
2904         DeclSpace.
2905
2906         Fix #77008.
2907         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
2908         'parent' argument to the base constructor.
2909
2910         Remove all mention of TypeContainer from decl.cs.
2911         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
2912         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
2913         (DeclSpace.DeclSpace): Likewise.
2914         (DeclSpace.DefineMembers): Remove unused argument.
2915         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
2916         debugging check -- we don't care if the debug code throws an
2917         InvalidCastException instead of an InternalErrorException.
2918         * class.cs (TypeContainer.DefineMembers): Update to changes.
2919         (TypeContainer.DoDefineMembers): Likewise.
2920         (TypeContainer.GetMethods): Likewise.
2921         (PropertyMember.Define): Likewise.
2922         (MemberBase.Parent): New property that forwards to
2923         MemberCore.Parent, but ensures that we get a TypeContainer.
2924         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
2925         (RootContext.PopulateTypes): Likewise.  Remove special case code
2926         for !RootContext.StdLib: DefineMembers is idempotent.
2927
2928 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
2929
2930         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
2931
2932 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
2933
2934         * doc.cs : The search for referenced namespace was insufficient to
2935           get global one as it used to do. Fixed bug #76965.
2936
2937 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
2938
2939         * doc.cs : check name in cref in the last phase that whether it is
2940           namespace or not.
2941
2942 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2943
2944         * cs-tokenizer.cs : reverted the latest change: it somehow broke
2945           Mono.C5.
2946
2947 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2948
2949         * doc.cs : so it turned out that we cannot skip override check for 
2950           interface members. Fixed bug #76954.
2951
2952 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2953
2954         * cs-tokenizer.cs : fixed bug #75984:
2955           - #warning and #error should not be handled when the source line
2956             is disabled.
2957           - #line is not checked strictly when the source line is disabled.
2958           - #define and #undef is on the other hand checked strictly at any
2959             state.
2960
2961 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
2962
2963         * cs-tokenizer.cs : missing Location (actually, filename) in one of
2964           CS1027 report.
2965
2966 2005-12-15  Raja R Harinath  <rharinath@novell.com>
2967
2968         * generic.cs (TypeManager.IsGeneric): Remove unused method.
2969
2970         * typemanager.cs (TypeManager.GetFullName): Rewrite to handle
2971         nested types.
2972
2973 2005-12-14  Martin Baulig  <martin@ximian.com>
2974
2975         * typemanager.cs (TypeManager.GetFullName): Make this public;
2976         `Type.Fullname' now never returns null.
2977
2978         * class.cs (Method.Define): Use TypeManager.GetFullName() for
2979         explicit interface implementations; we're now using the same
2980         naming convention than csc does.
2981
2982 2005-12-14  Miguel de Icaza  <miguel@novell.com>
2983
2984         * convert.cs (ExplicitConversionCore): Check the return value from
2985         ExplicitConversionCore which can return null on failure.  Fixes #76914
2986
2987 2005-12-09  Raja R Harinath  <rharinath@novell.com>
2988
2989         * anonymous.cs (AnonymousMethod.Compatible): Use IsGenericType
2990         instead of IsGenericInstance.
2991         * generic.cs (TypeManager.IsEqual): Likewise.  Delete redundant
2992         code that's now covered by the more general test.
2993         * typemanager.cs (TypeManager.IsPrivateAccessible): Likewise.
2994
2995         * generic.cs (DropGenericTypeArguments): New.  Captures the common
2996         pattern: if (t.IsGenericInstance) t = t.GetGenericTypeDefinition ();
2997         * attribute.cs, class.cs, decl.cs, ecore.cs: Use it.
2998         * generic.cs, report.cs, typemanager.cs: Likewise.
2999
3000 2005-12-08  Martin Baulig  <martin@ximian.com>
3001
3002         * generic.cs (TypeArguments.Resolve): Added CS1547 check.
3003
3004         * typemanager.cs (TypeManager.CSharpSignature): Include type
3005         arguments in the signature of a generic method.
3006
3007 2005-12-07  Martin Baulig  <martin@ximian.com>
3008
3009         Add support for custom attributes on type parameters.
3010
3011         * cs-parser.jay (type_arguments): Added `opt_attributes'.
3012
3013         * generic.cs (TypeParameterName): New public class; we use this
3014         instead of a `string' to store the name of a type parameter, so we
3015         can also have `Attributes'.
3016         (TypeArguments.GetDeclarations): Return a `TypeParameterName[]'
3017         array instead of a `string[]' array.
3018         (TypeParameter.ctor): We now also take an `Attributes' argument.
3019         (TypeParameter.EmitAttributes): New public method; emit our
3020         `OptAttributes' here.
3021         (GenericMethod.EmitAttributes): New public method; emit the custom
3022         attributes on all our type parameters.
3023
3024         * class.cs (TypeContainer.EmitType): Call EmitAttributes() on all
3025         our type parameters.
3026         (MethodData.Define): If we're a generic method, call
3027         EmitAttributes() on it.
3028
3029 2005-12-07  Martin Baulig  <martin@ximian.com>
3030
3031         * generic.cs
3032         (ConstraintChecker): New public abstract class; move the
3033         constraint checking here from `ConstructedType' and also do
3034         constraint checking for generic methods here.
3035
3036         * expression.cs (Invocation.OverloadResolve): Use
3037         ConstraintChecker.CheckConstraints() if we resolved to a generic
3038         method.  Fix #76806.
3039
3040 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
3041
3042         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
3043
3044         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
3045         event initializers.
3046         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
3047         (FieldBase.Initializer): Initializer is now optional.
3048         (EventField.Define): Only event field can have initializer.
3049
3050         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
3051
3052         * const.cs (Const): Reuse initializer.
3053
3054         * cs-parser.jay: Updated after FieldBase changes.
3055         Added current_array_type to simplify array initializers.
3056
3057         * ecore.cs (NullCast.IsDefaultValue): Implemented.
3058
3059         * expression.cs, iterators.cs: Updated.
3060
3061         * namespace.cs (NamespaceEntry): Made UsingFound private.
3062
3063 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
3064
3065         * parameterCollection.cs: Obsolete, removed.
3066         * parser.cs: Obsolete, removed.
3067
3068 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
3069
3070         Fix #76849.
3071         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
3072
3073         * enum.cs (Enum.Define): Set obsolete context here.
3074
3075 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
3076
3077         * doc.cs :
3078           - FindDocumentedMember() now expects 1) paramList as null
3079             when "we don't have to check the number of parameters" and
3080             2) Type.EmptyTypes when "there is no arguments".
3081           - Introduced FoundMember struct to hold the exact type which was
3082             used to find the documented member (the above change broke
3083             test-xml-044; it might be better just to use DeclaringType than
3084             what MS does, like this change does, but it depends on usage.)
3085
3086 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
3087
3088         * doc.cs : documented member might be from DeclaringType for nested
3089           types. Fixed bug #76782.
3090
3091 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
3092
3093         * anonymous.cs: Have the param code handle leaving copies on the
3094         stack etc. Allows anonymous params to take part in the assignment
3095         code (++, +=, etc). Fixes bug #76550
3096
3097         * expression.cs: Handle the prepare_for_load/leave_copy by passing
3098         it down to the anon code.
3099
3100         * iterators.cs: Use dummy var here
3101
3102         * codegen.cs: Handle new vars
3103
3104 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
3105
3106         Fix #76849.
3107         * class.cs (MethodData.Define): Set proper Obsolete context.
3108
3109         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
3110         obsolete context.
3111         (FieldExpr.DoResolve): Ditto.
3112
3113 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
3114
3115         Fix #76849.
3116         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
3117         parent is not obsolete.
3118
3119 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
3120
3121         * doc.cs : (FindDocumentedMember) find parameterless members first
3122           and get CS0419 in the early stage. Fixed first case of bug #76727.
3123
3124 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
3125
3126         Fix #76859.
3127         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
3128         no error was reported.
3129
3130         *expression.cs (Binary.DoResolve): left can be null.
3131
3132 2005-12-06  Raja R Harinath  <rharinath@novell.com>
3133
3134         * class.cs (MethodCore.CheckGenericOverride): Delete unused
3135         abstract method and all overrides.
3136         * support.cs (ParameterData.GenericConstraints): Delete.
3137         (ReflectionParameters.type_params): Delete.
3138         (ReflectionParameters.ReflectionParameters): Make private.
3139         (ReflectionParameters.GetConstaints): New factory method.
3140         * generic.cs (TypeParameterDefineType): Use it.
3141         (TypeManager.GetTypeParameterConstraints): Likewise.
3142
3143 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
3144
3145         Fix #76783.
3146         * class.cs (MethodData.Emit): Parameters should be labeled first.
3147
3148 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
3149
3150         Fix #76761.
3151         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
3152
3153 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
3154
3155         * attribute.cs (AreParametersCompliant): Moved to Parameter.
3156
3157         * class.cs (MethodCore): Parameter clean up.
3158         (IMethodData): Added ParameterInfo.
3159         (MethodData): Parameter clean up.
3160         (Indexer.Define): Parameter clean up.
3161
3162         * anonymous.cs,
3163         * codegen.cs,
3164         * cs-parser.jay,
3165         * decl.cs,
3166         * doc.cs,
3167         * ecore.cs,
3168         * flowanalysis.cs,
3169         * iterators.cs,
3170         * pending.cs,
3171         * statement.cs,
3172         * typemanager.cs: Parameter clean up.
3173
3174         * delegate.cs (Define): Get rid of duplicated code.
3175
3176         * expression.cs (ParameterReference): Removed useless parameters
3177         and simplified.
3178         (Invocation): Ditto.
3179
3180         * parameter.cs (ParamsParameter): New class, params specialization.
3181         (ArglistParameter): Attemp to separate arglist.
3182         (Parameter): Refactored to be reusable and faster.
3183         (Parameter.Modifier): Made understandable.
3184         (Parameters): Changed to be used as a class for `this' assembly
3185         parameters. Refactored to use new specialized classes.
3186
3187         * support.cs (ParameterData): Added Types property.
3188         (InternalParameters): Deleted.
3189
3190 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
3191
3192         * doc.cs : the previous patch does not actually fix the bug.
3193           PropertyInfo override check is now implemented and really fixed it.
3194         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
3195
3196 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
3197
3198         * doc.cs : apply "override filter" also to properties.
3199           Fixed bug #76730.
3200
3201 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
3202
3203         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
3204           no need to check overrides. For classes, omit those results from 
3205           interfaces since they must exist in the class. Fixed bug #76726.
3206
3207 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
3208
3209         * typemanager.cs : (GetFullNameSignature) differentiate indexers
3210           with different parameters. Fixed the second problem in #76685.
3211
3212 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
3213
3214         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
3215           get expected 'protected' access in CheckValidFamilyAccess()).
3216           Fixed bug #76692.
3217
3218 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
3219
3220         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
3221           Fixed bug #76705.  CS1569 was incorrectly commented out.
3222
3223 2005-11-23  Martin Baulig  <martin@ximian.com>
3224
3225         * generic.cs (Constraints.Define): Removed.
3226         (TypeParameter.DefineConstraints): Removed.
3227         (TypeParameter.DefineType): Call SetGenericParameterAttributes()
3228         on the GenericTypeParameterBuilder here.
3229
3230 2005-11-23  Martin Baulig  <martin@ximian.com>
3231
3232         * typemanager.cs (TypeManager.GetProperty): Make this public.
3233
3234         * generic.cs (Nullable.NullableInfo.ctor): Use
3235         TypeManager.GetProperty() rather than using reflection directly.
3236
3237 2005-11-17  Martin Baulig  <martin@ximian.com>
3238
3239         * expression.cs (Indexers.GetIndexersForType): Added support for
3240         generic parameters; fixes #76587.
3241
3242 2005-11-17  Martin Baulig  <martin@ximian.com>
3243
3244         * anonymous.cs
3245         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
3246         inherit the scope from our parent.  Fixes #76653.
3247
3248 2005-11-15  Martin Baulig  <martin@ximian.com>
3249
3250         * anonymous.cs (ScopeInfo.ScopeType): New public field; use this
3251         instead of `ScopeTypeBuilder' to refer to the "current" type.
3252         (AnonymousMethod.CreateScopeType): Correctly create the helper
3253         class if we're inside a generic type definition.
3254
3255 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
3256
3257         * doc.cs : use Invocation.IsOverride() to do real override check.
3258         * expression.cs : made Invocation.IsOverride() internal.
3259
3260 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
3261
3262         * doc.cs : use TypeManager.FindMembers() instead of (possible)
3263           TypeBuilder.FindMembers() and filter overriden base members out.
3264           Fixed bug #76990.
3265
3266 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3267
3268         * doc.cs : ref/out parameters are represented as '@' (instead of
3269           '&' in type FullName). Fixed bug #76630 (additionally crefs).
3270
3271 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3272
3273         * doc.cs : when there was no '.' in cref to methods in doc comment,
3274           then parameters were missing in the output. Fixed bug #76691.
3275
3276 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3277
3278         * driver.cs : don't output docs when there is an error.
3279           Fixed bug #76693.
3280
3281 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3282
3283         * doc.cs :
3284           Now it should detect indexers. Fixed primary concern in bug #76685.
3285           Fixed CS0419 message to not show the identical member signature in
3286           the message.
3287
3288 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3289
3290         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
3291           instead of Type.FindMembers() since it does not handle events.
3292           Fixed bug #71604.
3293
3294 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
3295
3296         * codegen.cs: Fixed typo (speficied -> specified).
3297
3298 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
3299
3300         Fix #76369.
3301         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
3302
3303 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
3304
3305         * attribute.cs: Changed error message.
3306
3307         * cs-tokenizer.cs: One more check.
3308
3309 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
3310
3311         * statement.cs (Block.Resolve): Ignore empty statement.
3312
3313 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
3314
3315         * report.cs: Made error/warning methods more strict to avoid
3316         their misuse.
3317
3318         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
3319         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
3320         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
3321         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
3322
3323 2005-11-11  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3324
3325         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): 
3326         Use the more explicit AssemblyName.FullName instead of 
3327         AssemblyName.Name to report errors.
3328         
3329 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
3330
3331         * attribute.cs, class.cs, cs-tokenizer.cs, parameter.cs: Sync
3332         with mcs.
3333
3334 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
3335
3336         * class.cs,
3337         * convert.cs,
3338         * cs-parser.jay,
3339         * decl.cs,
3340         * enum.cs,
3341         * expression.cs,
3342         * generic.cs,
3343         * pending.cs,
3344         * report.cs: Fixed error reporting and typos.
3345
3346         * generic.cs (TypeParameter.GetSignatureForError): New method.
3347         (ConstructedType.GetSignatureForError): Instead of DeclarationName.
3348
3349         * typemanager.cs (GetFullName): Refactored.
3350
3351 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
3352
3353         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
3354         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
3355
3356         * class.cs (TypeContainer.IsComImport): New property.
3357         (Constructor.Define): Create proper ctor for ComImport types.
3358
3359         * expression.cs (New.CheckComImport): Fixed.
3360
3361 2005-11-07  Miguel de Icaza  <miguel@novell.com>
3362
3363         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
3364         that a parameter has been captured does not mean that we do not
3365         have to do the rest of the processing.  This fixes the second part
3366         of #76592.  If there was another anonymous method capturing
3367         values in the past, the Scope would never be set for the second
3368         method that captured the same parameter.
3369
3370         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
3371         properly manipulate the stack.   Second part of fix for #76592.
3372
3373         * expression.cs (New): Add support for invoking "new" on
3374         interfaces that have been flagged with the ComImport attribute and
3375         the CoClass.  Fixes #76637 
3376
3377         * statement.cs (Try.DoEmit): When a variable is captured, do not
3378         try to emit the vi.LocalBuilder variable as it has been captured.
3379         Create a temporary variable and store the results on the
3380         FieldBuilder.  Fixes #76642
3381
3382 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3383
3384         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
3385
3386         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
3387
3388         * expression.cs (Binary.DoResolve): Added && optimalization.
3389     
3390         * typemanager.cs (AddUserType): Removed useless argument.
3391
3392 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
3393
3394         * statement.cs (Block.variables): Uses ListDictionary.
3395
3396 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
3397
3398         Fix #75969.
3399         * class.cs (PartialContainer.EmitType): Customized to emit
3400         security attributes.
3401         (ClassPart.ApplyAttributeBuilder): Transform security attribute
3402         for partial classes.
3403
3404 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
3405
3406         Fix #76599.
3407         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
3408         access has to be fixed.
3409         
3410         * typemanager.cs (IsUnmanagedType): Wrong common field type.
3411
3412 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
3413
3414         Fix #76590.
3415         * ecore.cs (NullCast.Reduce): Implemented.
3416
3417         * expression.cs (ArrayCreation.CheckIndices): Correcly check
3418         constant type.
3419         
3420         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
3421         properly.
3422         (Foreach.Resolve): Catch null properly.
3423
3424 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
3425  
3426         * cs-tokenizer.cs: Warning text fix.
3427
3428         * driver.cs: AllWarningNumbers exposed on public interface.
3429
3430         * report.cs (): Reviewed warning numbers.
3431         (IsValidWarning): Use binary search.
3432
3433 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
3434  
3435         * driver.cs: Implemeted resource visibility.
3436         (Resources): New class for code sharing between /res: and
3437         /linkres:
3438  
3439 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3440
3441         decl.cs (CurrentTypeParameters): Fixed to be public.
3442
3443 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3444
3445         generic.cs, rootcontext.cs: Removed NewConstraintAttribute.
3446
3447 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3448
3449         gmcs.exe.sources: Use CryptoConvert.cs from corlib.
3450
3451 2005-11-05  Kornél Pál  <kornelpal@hotmail.com>
3452
3453         * gmcs.exe.config: Updated runtime version to v2.0.50727 (2.0 RTM).
3454
3455 2005-11-04  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3456
3457         Add friend assembly access support.
3458         * typemanager.cs: assembly_internals_vis_attrs
3459         cache for friend assembly access. 
3460         (TypeManager.IsFriendAssembly): New method for
3461         checking friend assembly access.
3462         (TypeManager.Error_FriendAccessNameNotMatching): New
3463         helper method.
3464         (TypeManager.CompareKeyTokens): Likewise.
3465         (TypeManager.Filter): Handle friend accessible
3466         members.
3467
3468         * namespace.cs (RootNamespace.GetTypeInAssembly): Return
3469         friend accessible types.
3470
3471         * ecore.cs (Expression.IsAccessorAccessible): Handle
3472         friend accessible properties.
3473
3474         * decl.cs (DeclSpace.CheckAccessLevel): Handle friend
3475         accessible types.
3476         
3477 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
3478
3479         Fix #76568.
3480         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
3481         folding.
3482         
3483         * convert (Convert.ImplicitReferenceConversion): NullCast holds
3484         contants only.
3485         
3486         * ecore.cs (NullCast): Child is contant only.
3487         
3488         * literal.cs (NullLiteral.Reduce): null can be converted to any
3489         reference type.
3490
3491 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
3492
3493         * driver.cs: Use Encoding.Default as default code page instead
3494           of ISO-28591.
3495
3496 2005-10-27  Raja R Harinath  <rharinath@novell.com>
3497
3498         Fix #76085.
3499         * expression.cs (Invocation.Error_InvalidArguments): Handle
3500         __arglist parameters.
3501         (Invocation.VerifyArgumentsCompat): Likewise.
3502         * support.cs (ReflectionParameters.GetSignatureForError): Print
3503         __arglist parameters.
3504         (InternalParamters.GetSignatureForError): Likewise.
3505         * parameter.cs (Parameters.GetSignatureForError): Likewise.
3506
3507 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
3508
3509         * attribute.cs (GetPropertyValue): Made public.
3510
3511         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
3512         Resolve.
3513         Add new property WrapNonExceptionThrows to handle 2.0 assembly
3514         attribute.
3515         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
3516         is not defined.
3517         
3518         * driver.cs: Reflect method name change.
3519         
3520         * statement.cs (Try.Resolve): Warn when try has both general
3521         exception handlers.
3522         
3523         * typemanager.cs: runtime_compatibility_attr_type new predefined
3524         type.
3525
3526 2005-10-26  Raja R Harinath  <harinath@gmail.com>
3527
3528         Fix #76419.
3529         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
3530         treat it as an empty parameter list.
3531
3532 2005-10-26  Raja R Harinath  <rharinath@novell.com>
3533
3534         Fix #76271.     
3535         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
3536         ResolveAsTypeStep silent.
3537         * statement.cs (Block.AddConstant): Mark block as used.
3538         (Block.ResolveMeta): Avoid piling on error messages
3539         if a constant initializer resolution fails.
3540
3541 2005-10-25  Raja R Harinath  <rharinath@novell.com>
3542
3543         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
3544         Remove.
3545         (NamespaceEntry.VerifyAllUsing): New.
3546         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
3547         behaviour.  Delegates actual resolution of alias to ...
3548         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
3549         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
3550         Update.
3551         * driver.cs (Driver.MainDriver): Update.
3552         
3553         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
3554         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
3555         property.
3556         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
3557         Remove.
3558         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
3559         RootNamespace.DefineNamespacesForAll.
3560
3561 2005-10-24  Raja R Harinath  <harinath@gmail.com>
3562
3563         * typemanager.cs (assemblies, external_aliases, modules)
3564         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
3565         (ComputeNamespaces, GetRootNamespace): Remove extra staging
3566         overhead.  Move resposibility ...
3567         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
3568         * driver.cs, attribute.cs, codegen.cs: Update to changes.
3569
3570 2005-10-23  Raja R Harinath  <harinath@gmail.com>
3571
3572         * namespace.cs (RootNamespace.all_namespaces): Renamed from
3573         cached_namespaces.  Improve usage.
3574         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
3575         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
3576         Move from GlobalRootNamespace and simplify.
3577         (RootNamespace.Global): Make instance variable.
3578         (RootNamespace.RootNamespace): Add "alias name" parameter.
3579         (GlobalRootNamespace): Simplify drastically.
3580         (Namespace.Lookup): Don't use GetNamespace.
3581         * typemanager.cs (GetRootNamespace): Rename from
3582         ComputeNamespaceForAlias.
3583         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
3584
3585 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3586
3587         * anonymous.cs (AnonymousContainer): Don't crash when container
3588         doesn't exist.
3589
3590 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3591
3592         * expression.cs (Binary.DoResolve): Warn when comparing same
3593         values.
3594
3595 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3596
3597         Fix #76486.
3598         * expression.cs (Binary.DoResolve): It looks like there are no
3599         convetsion rules in enum context.
3600
3601 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3602
3603         Add support for extern alias qualifiers.
3604         * typemanager.cs: Move some LookupTypeReflection code
3605         to namespace.cs, to have cleaner code. Added some methods
3606         to help us keep track of the extern aliased references.
3607         * driver.cs: Add suport for extern alias assemblies on command
3608         line and check for their warnings/errors. Also keep track of the
3609         extern aliased assemblies.
3610         * namespace.cs: Move the global functionality of Namespace
3611         to GlobalRootNamespace/RootNamespace. Now the global namespace
3612         is GlobalRootNamespace.Globa. Also the code moved from 
3613         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
3614         Finally added LocalAliasEntry (AliasEntry before) and
3615         ExternAliasEntry, to handle alias statements.
3616         * cs-parser.jay: Add support in the grammar for extern alias
3617         statement.
3618         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
3619         Update callings to Namespace (now in GlobalRootNamespace).
3620
3621 2005-10-25  Martin Baulig  <martin@ximian.com>
3622
3623         * convert.cs (ImplicitTypeParameterConversion): Make base
3624         interfaces actually work; fixes #76557.
3625
3626 2005-10-25  Martin Baulig  <martin@ximian.com>
3627
3628         * generic.cs
3629         (GenericMethod.Define): Call TypeParameter.DefineConstraints() on
3630         all the type parameters; fixes #76551.
3631
3632 2005-10-25  Martin Baulig  <martin@ximian.com>
3633
3634         Fix #76472.
3635
3636         * generic.cs
3637         (GenericMethod.ctor): Added `Expression return_type' and
3638         `Parameters parameters' arguments.
3639         (GenericMethod.DefineType): Call ResolveAsTypeTerminal() on the
3640         parameter and return types to check their constraints if they're
3641         generic types.
3642
3643         * codegen.cs (EmitContext.ResolvingGenericMethod): New public
3644         boolean field.
3645
3646         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
3647         constraints of a generic type if `ec.ResolvingGenericMethod'.
3648
3649         * class.cs (MethodCore.DoDefineParameters): Set
3650         `ec.ResolvingGenericMethod' if we're a generic method.
3651         (MemberBase.MemberType): Likewise.
3652
3653 2005-10-25  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3654
3655         * typemanager.cs (TypeManager): Added 
3656         TypeManager.internals_visible_attr_type to cache
3657         S.R.CompilerServices.InternalsVisibleToAttribute.
3658
3659         * codegen.cs (AssemblyClass): Added checks for 
3660         InternalsVisibleToAttribute in new method 
3661         CheckInternalsVisibleAttribute () and also cache the
3662         AssemblyName in AssemblyClass.Name.
3663         
3664 2005-10-24  Martin Baulig  <martin@ximian.com>
3665
3666         * typemanager.cs
3667         (TypeManager.ExpandInterfaces): Added overloaded version which
3668         just takes a `Type[]' array.
3669
3670         * generic.cs
3671         (Constraints.Resolve): Don't expand the interfaces here; ie. we
3672         just use the interfaces which were explicitly specified and not
3673         the interfaces they inherit.  Fixes #76482.
3674         (TypeParameter.FindMembers): Expand the interfaces here.
3675
3676 2005-10-21  Martin Baulig  <martin@ximian.com>
3677
3678         * generic.cs
3679         (Constraints.Resolve): Also resolve the actual types here.
3680         (Constraints.ResolveTypes): Just check the constraints here.
3681         Fixes #76363; see gtest-218.cs.
3682
3683 2005-10-21  Martin Baulig  <martin@ximian.com>
3684
3685         * convert.cs
3686         (Convert.ImplicitTypeParameterConversion): Use a `ClassCast'
3687         instead of a `BoxedCast'; fixes gtest-217.cs.
3688
3689 2005-10-20  Atsushi Enomoto  <atsushi@ximian.com>
3690
3691         * generic.cs : (ConstructedType.CheckConstraints) warn CS0310 when
3692           1) "new()" is specified as generic parameter constraint and 2) the
3693           type is TypeBuilder and 3) the type is abstract even if it has a
3694           default .ctor(). Now errors/gcs0310-3.cs is correctly rejected.
3695
3696 2005-10-20  Martin Baulig  <martin@ximian.com>
3697
3698         * generic.cs
3699         (GenericConstraints.TypeParameter): New public property.
3700         (TypeParameter.ctor): Also take a `DeclSpace' argument.
3701         (TypeParameter.DeclSpace): New public property.
3702         (TypeParameter.DefineType): Inflate the constraints if our
3703         `DeclSpace' is an `Iterator'.   
3704
3705 2005-10-19  Atsushi Enomoto  <atsushi@ximian.com>
3706
3707         * class.cs, decl.cs : (MemberCache.FindMemberToOverride) added 
3708           GenericMethod argument to compare methods' generic type arguments.
3709           Fixed bug #76382.
3710
3711 2005-10-19  Martin Baulig  <martin@ximian.com>
3712
3713         * class.cs (TypeContainer.DefineType): Only use ResolveAsTypeStep(),
3714         not ResolveType() when resolving the base type, so we're not
3715         checking the constraints here.
3716         (TypeContainer.ResolveType): Call ResolveType() on our base_type
3717         if we have any.
3718
3719 2005-10-19  Martin Baulig  <martin@ximian.com>
3720
3721         * generic.cs (ConstructedType.CheckConstraints): Committing
3722         untested fix for #76441.
3723
3724 2005-10-18  Raja R Harinath  <rharinath@novell.com>
3725
3726         Fix #76371.
3727         * class.cs (TypeContainer.DefineType): Move updating of
3728         topological sort earlier in the code.
3729         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
3730
3731 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
3732
3733         Fix #76273.
3734         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
3735         
3736         * constant.cs (Constant.TryReduce): Moved from Cast class.
3737         (Reduce): Made little bit more OO and fixed missing conversions.
3738         
3739         * ecore.cs (Reduce): Implemented.
3740         (Binary.EnumLiftUp): New method to upgrade values to enum values.
3741         
3742         * literal.cs (Reduce): Implemented.
3743         
3744         * class.cs: Reverted Miguel's wrong commit.
3745
3746 2005-10-14  Miguel de Icaza  <miguel@novell.com>
3747
3748         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
3749
3750 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
3751
3752         * cs-parser.jay, expression.cs : CS0214 was missing error location
3753           for constants. Fixed bug #76404.
3754
3755 2005-10-10  Raja R Harinath  <rharinath@novell.com>
3756
3757         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
3758         InstanceExpression.
3759         (PropertyExpr.EmitCall): Likewise.
3760         * expression.cs (Invocation.EmitArguments): Handle case where
3761         arguments == null.
3762         (Invocation.EmitCall): Avoid allocating temporary variable if
3763         there are no arguments.
3764
3765 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
3766
3767         Fix #76370.
3768         * convert.cs (ExplicitConversionCore): Fixed object->enum
3769         conversion.
3770
3771 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3772
3773         Fix #76323.
3774         * convert.cs (ImplicitConversionStandard): Move conversion of
3775         void* to arbitrary pointer types ...
3776         (ExplicitConversionStandard): .. here.
3777         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
3778         error to always print typenames.
3779
3780 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3781
3782         * convert.cs (GetConversionOperator): Rename from
3783         GetConversionOperators.  Move operator selection code from ...
3784         (UserDefinedConversion): ... here.
3785
3786 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
3787
3788         * convert.cs (ExplicitConversionCore): Removed duplicate enum
3789         conversion.
3790
3791 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
3792
3793         * assign.cs (Assign.DoResolve): Error method changed.
3794
3795         * cfold.cs (DoConstantNumericPromotions): Error method changed.
3796         
3797         * const.cs (ResolveValue): Reset in_transit immediately.
3798         
3799         * constant.cs: Error method changed.
3800         
3801         * convert.cs: Removed useless location parameter.
3802         (ExplicitNumericConversion): Don't do double enum check.
3803         (ExplicitConversionCore): Renamed from ExplicitConversion.
3804         (ExplicitUnsafe): Extracted from ExplicitConversion.
3805         (ExplicitConversion): Uses for error reporting.
3806         
3807         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
3808         error messages.
3809         (ResolveBoolean): Uses common error method.
3810         (CastToDecimal): Get rid of ec.
3811         (CastFromDecimal): Optimized.
3812         (ConvCast): Get rid of ec.
3813         
3814         * enum.cs (ResolveValue): Reset in_transit immediately.
3815         (Emit): Return after first error.
3816         
3817         * expression.cs: Convert changes.
3818         
3819         * literal.cs: Error method changed.
3820         
3821         * statement.cs: Error method changed.
3822
3823 2005-10-06  Raja R Harinath  <rharinath@novell.com>
3824
3825         Fix gtest-131.cs and gtest-211.cs.
3826         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
3827         Only emit code for a label if it is used.  Unreachable code can
3828         violate ECMA evaluation stack invariants.
3829
3830 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3831
3832         * anonymous.cs: Implemented ExprClassName.
3833         
3834         * assign.cs (Assign.DoResolve): Don't chrash when type is not
3835         delegate.
3836         
3837         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
3838         check.
3839         
3840         * class.cs (StaticClass.DefineContainerMembers): Report protected
3841         members as error.
3842         
3843         * codegen.cs: if(ed) PRODUCTION.
3844         
3845         * convert.cs (Error_CannotImplicitConversion): Better error
3846         distinction.
3847         
3848         * cs-parser.jay: More error checks.
3849         
3850         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
3851         
3852         * driver.cs (CSCParseOption): Enabled wrong option check.
3853         
3854         * ecore.cs (Expression.ExprClassName): Turned to property.
3855         (MemberExpr.CheckIntermediateModification): For checking boxed
3856         value types     modification.
3857         
3858         * statement.cs (Fixed.Resolve): Expression type must be
3859         convertible to fixed type.
3860         (CollectionForeach.GetEnumeratorFilter,TryType):
3861         Small refactoring for easier error checking.
3862
3863 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
3864
3865         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
3866         attributes.
3867         
3868         * class.cs (GeneratedBaseInitializer): New class for customization
3869         compiler generated initializers.
3870         (MemberBase.DoDefine): Check Obsolete attribute here.
3871         (FieldMember.DoDefine): Ditto.
3872         
3873         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
3874         constants.
3875         
3876         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
3877         (MemberCore.GetObsoleteAttribute): Removed argument.
3878         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
3879         (MemberCore.CheckObsoleteType): New helper.
3880         
3881         * delegate.cs,
3882         * enum.cs,
3883         * statement.cs: Updates after MemberCore changes.
3884         
3885         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
3886         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
3887         
3888         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
3889         obsolete attribute for compiler construct.
3890         (As.DoResolve): Cache result.
3891         
3892         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
3893
3894 2005-10-01  Miguel de Icaza  <miguel@novell.com>
3895
3896         * expression.cs (Probe): instead of having a "Type probe_type"
3897         keep the extra information as a TypeExpr probe_type_expr since the
3898         "As" operator needs to perform some type checks.
3899
3900         * (As.DoResolve): If the type is a type parameter, ensure that it
3901         is constrained by a class.
3902
3903 2005-09-22  Miguel de Icaza  <miguel@novell.com>
3904
3905         * statement.cs (Lock): Use the TemporaryVariable class instead of
3906         manually using local variables as those do not work when variables
3907         are captured.
3908
3909         * ecore.cs: Moved the TemporaryVariable class from being a nested
3910         class inside Foreach to be a public class that can be employed in
3911         other places. 
3912
3913 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
3914
3915         * cs-parser.jay: interface_accessors replaced by
3916         accessor_declarations.
3917
3918         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
3919         location.
3920         
3921         * statement.cs (GotoCase.Resolve): Convert null constant to
3922         null case.
3923         (SwitchLabel.ResolveAndReduce): Ditto.
3924         (SwitchLabel.NullStringCase): Custom null stamp.
3925         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
3926         
3927         typemanager.cs (CSharpSignature): Don't skip first argument
3928         for full names.
3929
3930 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
3931
3932         * cfold.cs, constant.cs, convert.cs, ecore.cs,
3933         expression.cs, iterators.cs, literal.cs: Store constants and
3934         literals location.
3935         
3936         * class.cs (MemberBase.ShortName): Pass location.
3937         
3938         * cs-parser.jay: Some location fixes.
3939         
3940         * ecore.cs (Expression.Location): Made virtual.
3941
3942 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3943
3944         Fix #72930.
3945         * const.cs (Const.ResolveValue): Check for assigning non-null
3946         value to reference type.
3947
3948 2005-09-26  Raja R Harinath  <rharinath@novell.com>
3949
3950         Fix #76133.
3951         * expression.cs (This.VerifyFixed): In a value type T, the type of
3952         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
3953         value type R, 'this' is treated as a value parameter.
3954
3955 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3956
3957         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3958         if the underlying types are the same, otherwise we need to produce
3959         code that will do the proper cast.
3960
3961         This was exposed by Marek's constant rewrite which produced
3962         invalid code for the call site:
3963
3964         enum X : long { a }
3965         void Method (X v) {}
3966
3967         Method ((X) 5)
3968
3969         This fixes test-49.cs
3970
3971 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3972
3973         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
3974           Type/Object should be allowed as well. Fixed bug #75968.
3975
3976 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3977
3978         * expression.cs : (Binary.DoResolve): when one is enum constant and
3979           another is constant 0, then return enum one *as enum type*.
3980           Fixed bug 74846.
3981
3982 2005-10-04  Martin Baulig  <martin@ximian.com>
3983
3984         * ecore.cs (PropertyExpr.ResolveAccessors): Cosmetic fix; make the
3985         `SetMemberIsUsed()' work for generics, too.
3986
3987 2005-10-04  Martin Baulig  <martin@ximian.com>
3988
3989         * expression.cs (DelegateInvocation.EmitStatement): Make this work
3990         for corlib.  Fixes #75691.
3991
3992 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
3993
3994         Fix #76255.
3995         * driver.cs: Fix compilation files with full root path.
3996
3997 2005-09-25  Miguel de Icaza  <miguel@novell.com>
3998
3999         * report.cs (SymbolRelatedToPreviousError): Format the output so
4000         it does not use an open parenthesis that is never closed. 
4001
4002         * driver.cs: Follow coding guidelines
4003
4004 2005-09-18  Miguel de Icaza  <miguel@novell.com>
4005
4006         * driver.cs: Set InEmacs based on the environment variable EMACS. 
4007
4008         * location.cs (InEmacs): in this mode, do not report column
4009         location as it confuses Emacs.
4010
4011 2005-10-03  Raja R Harinath  <rharinath@novell.com>
4012
4013         * support.cs (SeekableStreamReader.Position): Don't error out when
4014         the requested position is just beyond the end of the current
4015         buffered data.
4016
4017 2005-09-28  Raja R Harinath  <rharinath@novell.com>
4018
4019         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
4020         try to keep in sync with the byte count of the underlying Stream.
4021         However, this limits us to a window size of 2048 characters: i.e.,
4022         the maximum lookahead of our lexer/parser can be 2048 characters.
4023
4024 2005-09-22  Martin Baulig  <martin@ximian.com>
4025
4026         * driver.cs: Removed a debugging FIXME.
4027
4028 2005-09-21  Raja R Harinath  <rharinath@novell.com>
4029
4030         * cs-parser.jay (type_arguments): Add CS1644 check.
4031         * decl.cs (DeclSpace.AddToContainer): Restore CS0694 check.
4032
4033 2005-09-15  Raja R Harinath  <rharinath@novell.com>
4034
4035         * Makefile (PROGRAM): Make profile specific.
4036         (gmcs.exe) [PROFILE=net_2_0]: Add utility rule to copy gmcs.exe to
4037         the current directory.
4038
4039         Fix test-455.cs.
4040         * expression.cs (Invocation.EmitCall): Remove optimization on
4041         this_call since it doesn't handle 'this' being a value type.
4042
4043 2005-09-05  Geoff Norton  <gnorton@customerdna.com>
4044
4045         * driver.cs: Ensure file handles are closed after parsing
4046
4047 2005-09-05  Miguel de Icaza  <miguel@novell.com>
4048
4049         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
4050         if the underlying types are the same, otherwise we need to produce
4051         code that will do the proper cast.
4052
4053         This was exposed by Marek's constant rewrite which produced
4054         invalid code for the call site:
4055
4056         enum X : long { a }
4057         void Method (X v) {}
4058
4059         Method ((X) 5)
4060
4061         This fixes test-49.cs
4062
4063 2005-09-05  Martin Baulig  <martin@ximian.com>
4064
4065         * expression.cs (As.DoResolve): Use `probe_type.IsValueType'
4066         instead of `TypeManager.IsValueType (probe_type)'; fixes #75668.
4067
4068         * cs-parser.jay (delegate_declaration): Small fix for #75852.
4069
4070 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
4071
4072         * typemanager.cs: (IsUnmanagedType) : generic parameter is not allowed
4073           to be a pointer type due to the spec 25.2, so check if declaring
4074           type is generic type definition. Fixed bug #75772.
4075
4076 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
4077
4078         Fixed bug #75957.
4079         * generic.cs : (TypeManager.IsEqual(Type,Type)): it should work when
4080           both types are not defined by methods.
4081         * expression.cs : (Invocation.IsApplicable): it should work when
4082           the argument type is equal to the parameter type, not only when
4083           ImplicitConversionExists() returns true.
4084
4085 2005-09-02  Raja R Harinath  <rharinath@novell.com>
4086
4087         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
4088         internal.
4089
4090         Fix #75941.
4091         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
4092         flow-branching for LocalVariableReferences in case we were invoked
4093         from a MemberAccess.
4094         * expression.cs (LocalVariableReference.VerifyAssigned): New.
4095         Carved out of ...
4096         (LocalVariableReference.DoResolveBase): ... this.
4097         (MemberAccess.Resolve): Do the check that was disabled during
4098         SimpleNameResolve.
4099
4100 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
4101
4102         * class.cs :
4103           (PartialContainer.Create): check abstract/sealed/static strictly
4104           but abstract/sealed can exist only at one side. Fixed bug #75883.
4105
4106 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
4107
4108         Fix #75945.
4109         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
4110         specified, don't default to UnmanagedType.I4.
4111
4112 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
4113
4114         * expression.cs : conditional operator should check possibly
4115           incorrect assign expression. Fixed bug #75946.
4116
4117 2005-08-30  Raja R Harinath  <rharinath@novell.com>
4118
4119         Fix #75934.
4120         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
4121         (ScopeInfo.EmitScopeType): Use it to construct field names from
4122         names of captured locals.
4123
4124         Fix #75929.
4125         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
4126         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
4127         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
4128         (ExplicitConversion): Remove enum cases already handled by
4129         implicit conversion.  Move implicit conversion check to the beginning.
4130         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
4131         * expression.cs (ArrayCreation.EmitDynamicInitializers):
4132         Don't treat System.Enum as a struct.
4133
4134 2005-08-30  Jb Evain  <jbevain@gmail.com>
4135
4136         * attribute.cs: handles as expression in parameters.
4137
4138 2005-08-30  Raja R Harinath  <rharinath@novell.com>
4139
4140         Fix #75802.
4141         * class.cs (TypeContainer.VerifyClsName): Don't use a
4142         PartialContainer when verifying CLS compliance.
4143         (AbstractPropertyEventMethod): Set Parent here, ...
4144         (PropertyMethod): ... not here.
4145
4146 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
4147
4148         * attribute.cs : escaped attribute name should not be allowed to be
4149           resolved (e.g. @class as classAttribute). Fixed bug #75930.
4150
4151 2005-08-29  Raja R Harinath  <rharinath@novell.com>
4152
4153         Fix #75927.
4154         * convert.cs (ImplicitStandardConversionExists): Allow zero also
4155         when converting a long constant to unsigned long.
4156         * expression.cs (Invocation.OverloadResolve): Add sanity check to
4157         detect where IsApplicable and VerifyArgumentsCompat disagree.
4158
4159 2005-08-29  Raja R Harinath  <rharinath@novell.com>
4160         and Carlos Alberto Cortez  <carlos@unixmexico.org>
4161
4162         Fix #75848.
4163         * class.cs (TypeContainer.CanElideInitializer): New helper.
4164         (TypeContainer.EmitFieldInitializers): Use it to determine if we
4165         can safely emitting the initializer of a field.
4166
4167 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4168
4169         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
4170           allowed inside a switch (without loop). Fixed bug #75433.
4171
4172 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
4173
4174         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
4175         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
4176
4177 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4178
4179         * driver.cs : kinda reverting the default encoding changes (not exact 
4180           revert since I noticed that "codepage:reset" might not work fine).
4181
4182 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4183
4184         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
4185           Location. Now getter and setter store location correctly.
4186           (errors/cs0111-12.cs now reports the expected location.)
4187
4188 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4189
4190         * driver.cs : Use default encoding on the environment.
4191           Removed (now that) extra parameter for SeekableStreamReader.
4192         * support.cs : (SeekableStreamReader) third .ctor() argument for
4193           StreamReader is not required (always true). preamble size could
4194           be acquired in simpler and safe way.
4195
4196 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
4197
4198         * cs-parser.jay: report CS0642 at warning level 3
4199           and report CS0642 for an if else statement also
4200           fixes bug #74745. Patch by John Luke (and a bit
4201           modified by me).
4202           Removed extra CS0642 warning check for "while",
4203           "for" and "fixed".
4204         * statement.cs: In Block.Resolve(), CS0642 check
4205           is reimplemented to check a sequence of an empty
4206           statement and a block.
4207
4208           Both fix bug #66777.
4209
4210 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
4211
4212         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
4213         detection until I fix it.
4214         
4215         * cs-tokenizer.cs: Changed error message.
4216         
4217         * cs-parser.jay: Fixed 2 error locations.
4218         
4219         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
4220         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
4221         properties.
4222         
4223         * enum.cs (GetSignatureForError): Fixed.
4224         
4225         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
4226         method detection.
4227         
4228         * class.cs,
4229         * typemanager.cs (RegisterProperty): Removed.
4230         
4231         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
4232
4233 2005-08-24  Raja R Harinath  <rharinath@novell.com>
4234
4235         Fix #75874.
4236         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
4237         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
4238
4239 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4240
4241         * expression.cs : tiny fix is required for not warning positive ulong.
4242           See test-441.cs.
4243
4244 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4245
4246         * expression.cs : add CS0652 check for constant and integral
4247           expression. Fixed bug #53974.
4248
4249 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4250
4251         * expression.cs : in DoNumericPromotions(), check if there is implicit
4252           conversion overload for string (to check CS0034). Fixed bug #52492.
4253
4254 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4255
4256         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
4257
4258 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4259
4260         * ecore.cs : report location when it is *not* Null.
4261
4262 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4263
4264         * codegen.cs,
4265           ecore.cs,
4266           flowanalysis.cs,
4267           expression.cs:
4268           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
4269           correctly. Fixed bug #75721.
4270
4271 2005-08-23  Raja R Harinath  <rharinath@novell.com>
4272
4273         * support.cs (SeekableStreamReader.Position): Avoid an expensive
4274         loop that performs 'min (pos, char_count)'.
4275
4276         Fix #75862.
4277         * expression.cs (Unary.ResolveOperator): Don't discard implicit
4278         converted value in Operator.OnesComplement.
4279
4280 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
4281
4282         * anonymous.cs: If the anon method is pulled into a helper class,
4283         it needs to be `internal' not `private'. Fixes runtime behavior on
4284         msft. bug #75704
4285
4286 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
4287
4288         Fix #75803
4289         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
4290         is a partial class.
4291
4292 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
4293
4294         The big constants rewrite
4295         Fix #75746, #75685 and more
4296         As a side effect saved 1MB for MWF ;-)
4297         
4298         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
4299         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
4300         enum based for corlib compilation.
4301         
4302         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
4303         subtractions.
4304         
4305         * class.cs (FixedField.Define): Use ResolveAsConstant.
4306         
4307         * const.cs (IConstant): Interface constants and enums.
4308         (Const.ResolveValue): New method for constant resolvning.
4309         (ExternalConstant): Constants from imported assemblies.
4310         
4311         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
4312         conversion; like enums.
4313         (Constant.ToType): Converts this constant to different type.
4314         (Constant.Increment): Adds 1.
4315         
4316         * convert.cs (ImplicitConversionRequired): Simplified.
4317         
4318         * cs-parser.jay: Create EnumMember directly.
4319         
4320         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
4321         
4322         * doc.cs (GenerateEnumDocComment): Removed.
4323         
4324         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
4325         (ConvertIntLiteral): Removed.
4326         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
4327         
4328         * enum.cs (EnumMember): Implement IConstant.
4329         (Enum.IsValidEnumConstant): Removed.
4330         (Enum.GetNextDefaultValue): Removed.
4331         (Enum.FindMembers): Updated.
4332         (Enum.GenerateDocComment): Iterate enum members.
4333         
4334         * expression.cs (Cast.TryReduce): Handle enums correctly.
4335         (New.Constantify): Made public.
4336         (MemberAccess.DoResolve): Removed contant specific if(s).
4337         
4338         * literal.cs (NullLiteral): Implement new abstract methods.
4339         
4340         * statement.cs (GotoCase.Resolve): Use new constant methods.
4341         (SwitchLabel.ResolveAndReduce): Use new constant methods.
4342         
4343         * typemanager.cs (LookupEnum): Removed.
4344         (IsEnumType): Fixed to work with corlib.
4345         (RegisterConstant): Removed.
4346         (LookupConstant): Removed.
4347         (GetConstant): Changed to work with IConstant.
4348
4349 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
4350
4351         * location.cs : Fixed overflown (>255) column number.
4352
4353 2005-08-03  Raja R Harinath  <rharinath@novell.com>
4354
4355         First cut of the qualified-alias-member feature.
4356         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
4357         token.
4358         * cs-parser.jay (DOUBLE_COLON): New token.
4359         (namespace_or_type_name): Add rule for recognizing
4360         qualified-alias-members.
4361         (primary_expression): Likewise.
4362         (element_access): Allow QualifiedAliasMember as a possible
4363         type-bearing expression.
4364         (local_variable_type, local_variable_pointer_type): Likewise.
4365         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
4366         aliases in the current and enclosing namespace declarations.
4367         (NamespaceEntry.UsingAlias): Add CS0440 warning.
4368         * decl.cs (MemberName.is_double_colon): New.
4369         (MemberName.MemberName): Add new constructor for alias-member.
4370         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
4371         * expression.cs (QualifiedAliasMember): New expression type.
4372
4373 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4374
4375         * location.cs : it borked when no argument was specified.
4376
4377 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4378
4379         * location.cs : tiny ToString() format fix.
4380
4381 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4382
4383         * statement.cs : oops, it was missing.
4384
4385 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4386
4387         A set of fixes for precise line/column location.
4388
4389         * location.cs :
4390           "token" field now holds a file/line "delta", a line number offset 
4391           from the segment, and a column number. See also:
4392           http://lists.ximian.com/pipermail/mono-devel-list/2004-
4393           December/009508.html
4394           Removed static IsNull. Use instance IsNull property instead.
4395         * cs-tokenizer.cs :
4396           For some tokens it stores Location. For Identifier it stores
4397           LocatedToken which is a pair of string name and location.
4398           Column numbers are adjusted only at getChar().
4399         * report.cs :
4400           Use Location.ToString() for reporting (it now contains column).
4401         * cs-parser.jay :
4402           Largely modified to use LocatedToken instead of
4403           string (IDENTIFIER), and to acquire Location from some tokens.
4404         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
4405           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
4406           codegen.cs :
4407           Now MemberName holds Location. DeclSpace.ctor() receives Location
4408           as a parameter. Removed extra parameters to all derived classes.
4409           Replaced Location.IsNull() with instance property.
4410         * assign.cs, expression.cs :
4411           Added .ctor() overload that omits Location.
4412         * attribute.cs :
4413           Added "nameEscaped" flag that indicates the identifier was escaped
4414           in the source file. This fixes bug #57047.
4415
4416 2005-09-02  Martin Baulig  <martin@ximian.com>
4417
4418         * class.cs: Make CS3005 a warning, not an error.
4419
4420 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
4421
4422         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
4423         New method, looking for lo-case imported cls type.
4424
4425         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
4426         here.
4427
4428         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
4429
4430         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
4431
4432         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
4433         all_imported_types.
4434         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
4435
4436         Optimized to save 3.5 MB for SWF compilation.
4437
4438 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
4439
4440         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
4441         (PartialContainer.Create): Moved logic AddToContainer.
4442         (PartialContainer.MarkForDuplicationCheck): Shares name.
4443         
4444         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
4445         place.
4446         
4447         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
4448         initialization.
4449         (Namespace.GetSignatureForError): New method.
4450         
4451         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
4452         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
4453
4454 2005-08-01  Raja R Harinath  <rharinath@novell.com>
4455
4456         Fix #75669.
4457         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
4458         member lookup rather than qualifier_type, since qualifier_type can
4459         be null.
4460
4461 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
4462
4463         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
4464         enum member.
4465
4466 2005-07-31  Miguel de Icaza  <miguel@novell.com>
4467
4468         * statement.cs: Copy the local exception into the exception
4469         captured local.  Fixes 75674
4470
4471 2005-07-31  Raja R Harinath  <harinath@gmail.com>
4472
4473         Fix #75658.
4474         * expression.cs (Invocation.OverloadResolve): Don't report error
4475         CS1501 if error CS1502 has been reported.
4476         (New.DoResolve): Delegate CS1501 reporting to
4477         Invocation.OverloadResolve.
4478
4479         Fix #75656.
4480         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
4481         invariant-meaning-in-block property in an enclosing block if
4482         necessary.
4483
4484 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
4485
4486         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
4487         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
4488         (Switch.CheckSwitch): Just save 50kb for SWF.
4489
4490 2005-07-27  Martin Baulig  <martin@ximian.com>
4491
4492         * anonymous.cs (CaptureContext.AddField): Added
4493         `AnonymousContainer am' argument; compute its toplevel scope if
4494         it's not already computed.  Fixes #75649.
4495
4496 2005-07-26  Raja R Harinath  <rharinath@novell.com>
4497
4498         Fix #75628.
4499         * class.cs (Constructor.Emit): Reset block to null if the block
4500         resolve fails.
4501
4502 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4503
4504         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
4505
4506 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4507
4508         * class.cs (MethodData.Define): Check whether accessor implementing
4509         interface is public.
4510
4511         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
4512
4513 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
4514
4515         Fix #57245
4516         * namespace.cs (LookupType): Moved same type check to...
4517         
4518         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
4519         with the same name.
4520
4521 2005-07-21  Raja R Harinath  <rharinath@novell.com>
4522
4523         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
4524         already found a typebuilder.
4525         * class.cs (MethodCore.IsDuplicateImplementation): Compare
4526         MemberNames, not strings.
4527
4528         * const.cs (Error_ExpressionMustBeConst): 
4529         Rename from Error_EpressionMustBeConst.
4530         * const.cs, class.cs, statement.cd: Update.
4531
4532 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
4533
4534         Fix #65573
4535
4536         * const.cs (Const.LookupConstantValue): Report missing contant expression
4537         everytime.
4538         (Error_EpressionMustBeConstant): Only one error method.
4539
4540         * class.cs, statement.c: Updated.
4541
4542 2005-07-20  Raja R Harinath  <rharinath@novell.com>
4543
4544         * statement.cs (Block.Flags): Add back HasVarargs.
4545         (Block.flags): Make protected.
4546         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
4547
4548         * typemanager.cs (types, typecontainers, user_types): Remove.
4549         (UserTypes, TypeContainers): Likewise.
4550         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
4551         (CleanUp, Reset): Update.
4552         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
4553         (GetNestedType): Use Type.GetNestedType.
4554         (CoreLookupType): Take two arguments, the namespace and the
4555         basename of the type.  Update to use the Namespace.Lookup
4556         mechanism.
4557         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
4558         (RealMemberLookup): Use IsNestedChildOf instead of playing with
4559         string concatenation and substring matches.
4560         * class.cs, enum.cs, delegate.cs: Update to changes.
4561
4562 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
4563
4564         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
4565         Expression and made virtual.
4566
4567         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
4568         (ImplicitStandardConversionExists): Fixed `byte' typo ?
4569
4570         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
4571
4572         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
4573         error message.
4574
4575         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
4576         change.
4577
4578 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
4579
4580         Fix #57707
4581         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
4582         AssemblyCultureAttribute is not used on executable.
4583
4584         * rootcontext.cs,
4585         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
4586
4587 2005-07-16  Raja R Harinath  <rharinath@novell.com>
4588
4589         Fix #60638.
4590         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
4591         New.  Reports CS0252/CS0253.
4592         Mostly taken from preliminary patch by Duncak Mak.
4593         (Binary.DoResolveOperator): Store results of operator lookup.
4594         Use them to detect if we need to warn about unintended reference
4595         comparisons.
4596
4597 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4598
4599         Fix #72969.
4600         * namespace.cs (Namespace.Lookup): Add back location parameter.
4601         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
4602         * delegate.cs, ecore.cs, expression.cs: Update to changes.
4603
4604         * codegen.cs (EmitContext.DeclSpace): Make readonly.
4605         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
4606         (Namespace.LookupType): ... this.
4607         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
4608         of namespaces.
4609         * typemanager.cs (LookupTypeReflection): Remove buggy code that
4610         purported to handle pointers.
4611         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
4612         CoreLookupType.
4613
4614 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4615
4616         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4617         type as namespace.
4618
4619 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4620
4621         * namespace.cs (Namespace.Lookup): Drop location parameter.
4622         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
4623         (NamespaceEntry.Lookup): ... this.
4624         (NamespaceEntry.Error_AmbiguousTypeReference):
4625         Move here from DeclSpace.
4626         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
4627         names ...
4628         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
4629         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
4630         Move to NamespaceEntry.
4631         * delegate.cs, expression.cs: Update to changes.
4632
4633 2005-08-31  Martin Baulig  <martin@ximian.com>
4634
4635         Committing a patch from Atsushi Enomoto for #75850.
4636
4637         * statement.cs (Foreach.CollectionForeach.GetEnumeratorFilter):
4638         Prefer a generic enumerator over a non-generic one.
4639
4640 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
4641
4642         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
4643         * gmcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
4644
4645 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4646
4647         * driver.cs : reverting default encoding change as well as mcs.
4648
4649 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4650
4651         * driver.cs, support.cs : merged r48826.
4652           Marek Safer wrote:
4653           > could you integrate your mcs changes to gmcs otherwise
4654           > gmcs cannot compile some files.
4655
4656 2005-08-20  Martin Baulig  <martin@ximian.com>
4657
4658         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
4659         scope if we don't already have it.
4660
4661         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
4662         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
4663         fixes #75867.
4664
4665 2005-07-31  Miguel de Icaza  <miguel@novell.com>
4666
4667         * statement.cs: Copy the local exception into the exception
4668         captured local.  Fixes 75674
4669
4670 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4671
4672         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4673         type as namespace.
4674
4675 2005-08-12  Martin Baulig  <martin@ximian.com>
4676
4677         * expression.cs (MemberAccess.ResolveNamespaceOrType): Only search
4678         for nested types here to avoid hitting the cache too early.
4679
4680 2005-08-09  Miguel de Icaza  <miguel@novell.com>
4681
4682         * enum.cs: On the new compiler CLS error 3005 is now a warning not
4683         an error. 
4684
4685 2005-08-03  Martin Baulig  <martin@ximian.com>
4686
4687         Make iterators in generic methods work; see gtest-191.cs.
4688
4689         * generic.cs
4690         (Constraints.Resolve): Protect against being called twice.
4691
4692         * class.cs
4693         (TypeContainer.GetClassBases): Make this `protected virtual'.
4694
4695         * iterator.cs (Iterator.ctor): Added `GenericMethod' argument.
4696         (Iterator.GetClassBases): Override this and compute the base
4697         classes here.
4698         (Iterator.DefineNestedTypes): If we're a generic method, all our
4699         method type parameters become class type parameters on the proxy
4700         class.
4701
4702         * statement.cs
4703         (ToplevelBlock.Parameters): Make this a property, not a field.
4704         (ToplevelBlock.ResolveMeta): Update the `parameters' from the `ip'.
4705
4706 2005-08-03  Martin Baulig  <martin@ximian.com>
4707
4708         * typemanager.cs (TypeManager.IsSubclassOf): Use
4709         `TypeManager.IsEqual' instead of `Type.Equals'; fixes gtest-190.cs.
4710         (TypeManager.GetFullName_recursed): Improved.
4711
4712 2005-07-27  Carlos Alberto Cortez <calberto.cortez@gmail.com>
4713
4714         Fix #75417
4715         * ecore.cs (Expression.IsAccessorAccessible): Change the check for
4716         Private accessor case, using TypeManager.IsPrivateAccessible instead of
4717         invocation_type == mi.DeclaringType, since the first one also checks
4718         other condition used by generic instances.
4719         
4720 2005-07-27  Martin Baulig  <martin@ximian.com>
4721
4722         * anonymous.cs (CaptureContext.AddField): Added
4723         `AnonymousContainer am' argument; compute its toplevel scope if
4724         it's not already computed.  Fixes #75649.
4725
4726 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
4727
4728         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
4729         CheckAttributeType and refactored.
4730         (Attribute.ResolvePossibleAttributeType): Changed to reuse
4731         ResolveAsTypeTerminal error handling.
4732         (ResolveAsTypeTerminal): Introduced because of global attributes extra
4733         handling.
4734         (GetSignatureForError): Print errors in same way.
4735
4736         * class.cs,
4737         * codegen.cs: Reflect attribute GetSignatureForError change.
4738
4739         * ecore.cs,
4740         * expression.cs: Add silent parameter to ResolveAsTypeStep.
4741
4742         * namespace.cs (UsingEntry): Refactored to make fields private.
4743
4744         * assign.cs,
4745         statement.cs: Error_UnexpectedKind has extra parameter.
4746
4747 2005-07-14  Raja R Harinath  <rharinath@novell.com>
4748
4749         * ecore.cs (IAlias): Remove.
4750         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
4751         that implement the interface.
4752         * namespace.cs (Namespace): Likewise.
4753         (Namespace.declspaces): Renamed from 'defined_names'.
4754         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
4755         DeclSpace instead of an IAlias.
4756         * tree.cs (Tree.AddDecl): Update.
4757
4758 2005-07-12  Raja R Harinath  <rharinath@novell.com>
4759
4760         * statement.cs (Block.Flags); Remove HasVarargs.
4761         (Block.HasVarargs): Move to ToplevelBlock.
4762         (Block.ThisVariable, Block.AddThisVariable): Likewise.
4763         (Block.Variables): Make protected.  Initialize variable hashtable
4764         if necessary.
4765         (Block.AddVariable): Update.
4766         (Block.Resolve): Update to changes.
4767         (ToplevelBlock.HasVarargs): New boolean.
4768         (ToplevelBlock.ThisVariable): Move here from Block.
4769         (ToplevelBlock.AddThisVariable): Likewise.
4770         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
4771         * expression.cs (This.ResolveBase): Update to changes.
4772         (ArglistAccess.DoResolve): Likewise.
4773
4774 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4775
4776         Fix #75321
4777         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
4778
4779         * class.cs (TypeContainer.VerifyMembers): Distinguish between
4780         not used and not used & assigned.
4781         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
4782
4783 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4784
4785         Fix #75053
4786         * expression.cs (Is.DoResolve): null is never provided type.
4787
4788 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
4789
4790         Fix #52496
4791         * cs-parser.jay: Less strict event error rule to catch more errors.
4792
4793 2005-07-11  Martin Baulig  <martin@ximian.com>
4794
4795         * generic.cs (ConstructedType.CheckConstraints): Improve the check
4796         for the constructor constraint: we do not only have to check
4797         whether the class has a public constructor, but also ensure that
4798         it's parameterless.  Fixes #75492.
4799
4800 2005-07-11  Martin Baulig  <martin@ximian.com>
4801
4802         * expression.cs (Binary.ResolveOperator): Only allow `==' and `!='
4803         between type parameters if they either have the reference type
4804         constraint or the class constraint.
4805
4806 2005-07-10  Kamil Skalski <nazgul@nemerle.org>
4807
4808         * generic.cs: Use MakeGenericType instead of BindGenericParameters.
4809
4810 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
4811
4812         Fix #74975
4813         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
4814         (ExtractSecurityPermissionSet): Cope with self referencing security
4815         attributes properly.
4816
4817         * driver.cs (SetOutputFile): Made public property OutputFile.
4818
4819 2005-07-07  Raja R Harinath  <rharinath@novell.com>
4820
4821         Fix #75486.
4822         * class.cs (TypeContainer.first_nonstatic_field): Rename from
4823         has_nonstatic_fields.  Make into a FieldBase pointer.
4824         (TypeContainer.AddField): Add CS0282 check.
4825         (TypeContainer.EmitType): Update.
4826
4827 2005-07-06  Miguel de Icaza  <miguel@novell.com>
4828
4829         * cs-tokenizer.cs (consume_identifier): Do not create strings to
4830         compare if they start with __.
4831
4832 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4833
4834         * statement.cs (Switch.SwitchGoverningType): Only look at
4835         UserCasts that don't need implicit standard conversions to one of
4836         the allowed switch types (Fixes test-322.cs).
4837         (LocalInfo.Resolve): Re-enable sanity-test.
4838
4839 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
4840
4841         * cs-tokenizer.cs (consume_identifier): Detect double undescores
4842         
4843         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
4844         
4845         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
4846
4847 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4848
4849         Fix #75472.
4850         * ecore.cs (SimpleName.GetSignatureForError): Add.
4851         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
4852         (MemberAccess.GetSignatureForError): Add.
4853
4854 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
4855  
4856         The big error and warning messages review.
4857         
4858         * anonymous.cs,
4859         * assign.cs,
4860         * attribute.cs,
4861         * class.cs,
4862         * codegen.cs,
4863         * convert.cs,
4864         * cs-parser.jay,
4865         * cs-tokenizer.cs,
4866         * decl.cs,
4867         * delegate.cs,
4868         * doc.cs,
4869         * driver.cs,
4870         * ecore.cs,
4871         * enum.cs,
4872         * expression.cs,
4873         * flowanalysis.cs,
4874         * iterators.cs,
4875         * literal.cs,
4876         * location.cs,
4877         * modifiers.cs,
4878         * namespace.cs,
4879         * parameter.cs,
4880         * pending.cs,
4881         * report.cs,
4882         * rootcontext.cs,
4883         * statement.cs,
4884         * support.cs,
4885         * tree.cs,
4886         * typemanager.cs: Updated.
4887         
4888         * class.cs: (MethodCore.SetYields): Moved here to share.
4889         (PropertyMethod.Define): Moved iterator setup here.
4890         
4891         * iterators.cs: Add orig_method to have full access to parent
4892         container.
4893
4894 2005-07-05  Raja R Harinath  <rharinath@novell.com>
4895
4896         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
4897         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
4898         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
4899         variable of struct type.
4900         * expression.cs (Unary.ResolveOperator): Update to change.
4901         (Indirection.VerifyFixed): Likewise.
4902         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
4903         (ParameterReference.VerifyFixed): Value parameters are fixed.
4904         (This.VerifyFixed): Treat 'this' as a value parameter.
4905         * statement.cs (LocalInfo.IsFixed): Remove.
4906
4907 2005-07-01  Martin Baulig  <martin@ximian.com>
4908
4909         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4910         `ec.EmitThis ()' to get the correct scope.
4911
4912 2005-07-01  Martin Baulig  <martin@ximian.com>
4913
4914         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
4915         instance is a ParameterReference; fixes #75299.
4916
4917 2005-06-30  Raja R Harinath  <rharinath@novell.com>
4918
4919         Fix #75412.
4920         * expression.cs (Indexers.map): Remove.
4921         (Indexers.Append): Filter out inaccessible setters and getters.
4922         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
4923
4924         Fix #75283.
4925         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
4926         Refactored from ...
4927         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
4928         (FieldExpr.Emit, PropertyExpr.Emit): Update.
4929         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
4930         * expression.cs (Invocation.EmitCall): Add CS0120 check.
4931
4932 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
4933
4934         Fix #75322
4935         * class.cs (FieldBase.GetInitializerExpression): One more field
4936         for backup.
4937
4938 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4939
4940         * pending.cs: Do not define a proxy if the base method is virtual,
4941         it will be picked up by the runtime (bug 75270).
4942
4943 2005-07-08  Martin Baulig  <martin@ximian.com>
4944
4945         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
4946         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
4947
4948 2005-07-07  Martin Baulig  <martin@ximian.com>
4949
4950         * generic.cs (ConstructedType.CheckConstraint): Use
4951         ResolveAsTypeStep(), not ResolveAsTypeTerminal() so we're not
4952         called recursively; fixes #75329.
4953
4954 2005-07-06  Martin Baulig  <martin@ximian.com>
4955
4956         * generic.cs (TypeManager.InferTypeArguments): Added support for
4957         anonymous methods; fixes #75461.
4958
4959 2005-07-01  Martin Baulig  <martin@ximian.com>
4960
4961         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4962         `ec.EmitThis ()' to get the correct scope.
4963
4964 2005-07-01  Martin Baulig  <martin@ximian.com>
4965
4966         * ecore.cs (FieldExpr.DoResolve): Only capture the field if it's
4967         instance is `This'; fixes #75299.
4968
4969 2005-06-30  Martin Baulig  <martin@ximian.com>
4970
4971         * class.cs (Indexer): Implement IIteratorContainer; added support
4972         for iterators in indexers.
4973
4974         * codegen.cs
4975         (EmitContext.CurrentIterator): Make this a property, not a field.
4976
4977         * anonymous.cs (AnonymousContainer.Iterator): New public property.
4978
4979 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4980
4981         * pending.cs: Do not define a proxy if the base method is virtual,
4982         it will be picked up by the runtime (bug 75270).
4983
4984 2005-06-28  Martin Baulig  <martin@ximian.com>
4985
4986         * cs-parser.jay (interface_method_declaration): Avoid a
4987         reduce/reduce conflict by moving some of the code into a separate
4988         `interface_method_declaration_body' rule; fixes #75368.
4989
4990 2005-06-28  Martin Baulig  <martin@ximian.com>
4991
4992         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Move the
4993         array check after the check for TypeBuilder's.
4994
4995 2005-06-21  Raja R Harinath  <rharinath@novell.com>
4996
4997         * convert.cs (FindMostEncompassedType): Add two trivial special
4998         cases (number_of_types == 0 || number_of_types == 1).
4999         (FindMostEncompasingType): Likewise.
5000
5001 2005-06-17  Raja R Harinath  <rharinath@novell.com>
5002
5003         Some cleanups preparing for the fix of #75283.
5004         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
5005         error testing.
5006         (EventExpr.InstanceResolve): Likewise.
5007         (EventExpr.DoResolve): Remove redundant checks.
5008
5009 2005-06-08  Miguel de Icaza  <miguel@novell.com>
5010
5011         * class.cs: Small fix.
5012
5013 2005-06-08  Raja R Harinath  <rharinath@novell.com>
5014
5015         Fix #75160.
5016         * class.cs (GetPartialBases): Fix return value check of
5017         part.GetClassBases.
5018
5019 2005-06-07  Raja R Harinath  <rharinath@novell.com>
5020
5021         Ensure that partial classes are registered in their enclosing
5022         namespace.  Initial part of fix of #75160.
5023         * tree.cs (Tree.RecordDecl): Add new namespace argument.
5024         Register declspace with namespace here, not in
5025         DeclSpace.RecordDecl.
5026         * cs-parser.jay: Pass namespace to RecordDecl.
5027         * class.cs (PartialContainer.Create): Likewise.
5028         (ClassPart.DefineType): New sanity-check.  Throws an exception if
5029         called.
5030         * decl.cs (Declspace.RecordDecl): Remove.
5031         * namespace.cs (NamespaceEntry.DefineName): Remove.
5032
5033 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
5034
5035         * rootcontext.cs: Reset TargetExt as well.
5036
5037 2005-06-03  Raja R Harinath  <rharinath@novell.com>
5038
5039         * ecore.cs (Expression.Resolve): Emit CS0654 error when
5040         -langversion:ISO-1.
5041
5042 2005-06-02  Raja R Harinath  <rharinath@novell.com>
5043
5044         Fix #75080, cs0119.cs.
5045         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
5046         of ...
5047         (Expression.Resolve): ... this.  Use it.  Remove bogus code
5048         allowing ExprClass.Type and ExprClass.Namespace for
5049         ResolveFlags.VariableOrValue.
5050         (Expression.Resolve) [1-argument variant]: Change default resolve
5051         flags based on language version.
5052         (Expression.Error_UnexpectedKind): Use a simple string array
5053         rather than an ArrayList.
5054         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
5055         not ExprClass.Type.
5056         (TypeOfVoid.DoResolve): Likewise.
5057         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
5058         flags argument -- it always has the same value.
5059
5060 2005-05-31  Raja R Harinath  <rharinath@novell.com>
5061
5062         Fix #75081.
5063         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
5064         Use it in the error message.
5065         * assign.cs, expression.cs, statement.cs: Update.
5066
5067 2005-05-30  Raja R Harinath  <rharinath@novell.com>
5068
5069         Fix #75088.
5070         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
5071         the "almostMatchedMember" case too.
5072         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
5073         that failed the accessibility checks to 'almost_match'.
5074
5075 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
5076
5077         * attribute.cs: Use internal MethodBuilder methods to set
5078         ExactSpelling and SetLastError on PInvoke methods, instead
5079         of passing them via charset.  Fixes #75060.
5080
5081 2005-05-27  Raja R Harinath  <rharinath@novell.com>
5082
5083         * parameter.cs (Parameter): Remove TODO comment.
5084         (Parameter.DefineParameter): Remove Location parameter.
5085         (Parameters.LabelParameters): Likewise.
5086         * class.cs (Constructor.Emit): Update to change.
5087         (MethodData.Emit): Likewise.
5088         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
5089         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
5090
5091 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
5092
5093         * parameter.cs,
5094           Removed Parameters.Location and added Parameter.Location instead.
5095           Removed Location parameter from Emit() and GetSignature().
5096         * anonymous.cs,
5097           class.cs,
5098           cs-parser.jay,
5099           delegate.cs,
5100           iterators.cs,
5101           statement.cs :
5102           Modified all related calls.
5103
5104 2005-06-21  Martin Baulig  <martin@ximian.com>
5105
5106         * generic.cs (NullCoalescingOperator.Emit): Make this work if the
5107         left-hand side is not a nullable type; fixes #75328.
5108
5109 2005-06-21  Martin Baulig  <martin@ximian.com>
5110
5111         * typemanager.cs
5112         (TypeManager.CSharpName): Use GetFullName() instead of `t.FullName'.
5113         (TypeManager.GetFullNameSignature): Likewise.
5114
5115         * convert.cs (Convert.Error_CannotImplicitConversion): Compare
5116         `source.FullName' and `target.FullName' to check whether there are
5117         two conflicting definitions.
5118
5119 2005-06-21  Martin Baulig  <martin@ximian.com>
5120
5121         * convert.cs (Convert.ImplicitTypeParameterConversion): Always use
5122         a BoxedCast - also for reference types - to be compatible with csc.
5123
5124 2005-06-21  Martin Baulig  <martin@ximian.com>
5125
5126         * expression.cs (MemberAccess.DoResolve): Add support for nested
5127         types in a generic instance; fixes #75320.
5128
5129 2005-06-20  Martin Baulig  <martin@ximian.com>
5130
5131         * generic.cs (TypeManager.InferType): Also walk the class
5132         hierarchy for generic instances; fixes #75261.
5133
5134 2005-06-17  Martin Baulig  <martin@ximian.com>
5135
5136         * typemanager.cs (TypeManager.IsBuiltinType): Use TypeToCoreType()
5137         to make things work for corlib.
5138
5139 2005-06-15  Martin Baulig  <martin@ximian.com>
5140
5141         * attribute.cs (Attribute.CheckSecurityActionValidity): Remove the
5142         obsolete `SecurityAction' values.
5143
5144 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
5145
5146         * rootcontext.cs: Reset TargetExt as well.
5147         
5148 2005-06-09  Martin Baulig  <martin@ximian.com>
5149
5150         * delegate.cs (Delegate.VerifyMethod): Added
5151         `MethodGroupExpr old_mg' argument; inherit its
5152         `HasTypeParameters'; fix #75085.
5153
5154 2005-06-09  Martin Baulig  <martin@ximian.com>
5155
5156         * expression.cs (Invocation.OverloadResolve): Correctly handle
5157         generic methods for the SetMemberIsUsed(); fix #75064.
5158
5159 2005-06-09  Martin Baulig  <martin@ximian.com>
5160
5161         * statement.cs (Throw.Resolve): Use TypeManager.IsSubclassOf();
5162         fixes #75062.
5163
5164 2005-06-08  Martin Baulig  <martin@ximian.com>
5165
5166         * cs-parser.jay (nullable_type_or_conditional): If we put the
5167         nullable back and our `type' is a `ComposedCast', remove the
5168         nullable from it.  Fixes #75156.
5169
5170         * expression.cs (ComposedCast.RemoveNullable): New public method.
5171
5172 2005-06-08  Martin Baulig  <martin@ximian.com>
5173
5174         The big Iterators rewrite :-)
5175
5176         * iterators.cs: Rewrite this to use the anonymous methods framework.
5177
5178         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
5179         before the TypeContainers; see 2test-21.cs.
5180
5181         * class.cs
5182         (TypeContainer.DefineType): Don't create a new EmitContext if we
5183         already have one (this only happens if we're an Iterator).
5184         (TypeContainer.Define): Also call Define() on all our iterators.
5185         (Method.CreateEmitContext): Added support for iterators.
5186
5187         * anonymous.cs
5188         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
5189         (AnonymousContainer.CreateMethodHost): Moved here from
5190         AnonymousMethod and made abstract.
5191         (AnonymousContainer.CreateScopeType): New abstract method.
5192         (AnonymousContainer.IsIterator): New public property.
5193         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
5194         get the ScopeTypeBuilder rather than manually defining it here. 
5195         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
5196         iterators here.
5197
5198         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
5199         before RootContext.DefineTypes().
5200
5201         * codegen.cs (EmitContext.RemapToProxy): Removed.
5202         (EmitContext.CurrentAnonymousMethod): Changed type from
5203         AnonymousMethod -> AnonymousContainer.
5204         (EmitContext.ResolveTopBlock): Protect from being called twice.
5205         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
5206         (EmitContext.EmitThis): Removed the iterators hacks; use the
5207         anonymous methods framework for that.
5208
5209         * statement.cs
5210         (ToplevelBlock.Container): Make this a property, not a field.
5211         (ToplevelBlock.ReParent): New public method; move the
5212         ToplevelBlock into a new container.
5213         (Foreach.TemporaryVariable): Simplify.
5214
5215 2005-06-05  Martin Baulig  <martin@ximian.com>
5216
5217         * statement.cs (LocalInfo.CompilerGenerated): New flag.
5218         (Block.AddTemporaryVariable): New public method; creates a new
5219         `LocalInfo' for a temporary variable.
5220         (Block.EmitMeta): Create the LocalBuilders for all the temporary
5221         variables here.
5222         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
5223         non-iterator variables.
5224
5225 2005-06-05  Martin Baulig  <martin@ximian.com>
5226
5227         * statement.cs (Foreach.TemporaryVariable): Create the
5228         LocalBuilder in the Emit phase and not in Resolve since in some
5229         situations, we don't have an ILGenerator during Resolve; see
5230         2test-19.cs for an example.
5231
5232 2005-06-04  Martin Baulig  <martin@ximian.com>
5233
5234         The big Foreach rewrite - Part II.
5235
5236         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
5237         with `PropertyInfo ienumerator_getcurrent'.
5238
5239         * codegen.cs (VariableStorage): Removed.
5240
5241         * statement.cs
5242         (Foreach): Derive from Statement, not ExceptionStatement.
5243         (Foreach.CollectionForeach): New nested class.  Moved all the code
5244         dealing with collection foreach here.
5245         (Foreach.ForeachHelperMethods): Removed.
5246         (Foreach.TemporaryVariable): Implement IMemoryLocation.
5247
5248 2005-05-23  Martin Baulig  <martin@ximian.com>
5249
5250         * statement.cs (Try.DoResolve): Don't create a `finally' if we
5251         don't need to.  Fix #75014.
5252
5253 2005-05-26  Raja R Harinath  <rharinath@novell.com>
5254
5255         Improve user-defined conversion handling.
5256         * convert.cs (GetConversionOperators): Rewrite.  Return only the
5257         applicable operators.
5258         (AddConversionOperators): New.  Helper for GetConversionOperators.
5259         (FindMostEncompassedType, FindMostEncompassingType): Verify that
5260         there is only one most encompassed/encompassing type.
5261         (FindMostSpecificSource, FindMostSpecificTarget): Remove
5262         "applicable operator" handling.
5263         (UserConversion): Move cache here from GetConversionOperators.
5264         Directly cache the chosen operator, rather than the whole
5265         MethodGroup.
5266         (ExplicitNumericConversion): Fix buggy implementation of Decimal
5267         case.  Allow conversion of decimal to sbyte and byte too.
5268         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
5269         New static methods.  Used to avoid allocating EmptyExpressions in
5270         convert.cs.
5271
5272 2005-05-24  Duncan Mak  <duncan@novell.com>
5273
5274         * ecore.cs (CastFromDecimal): New class for casting a decimal to
5275         another class, used in Convert.ExplicitNumericConversion.
5276         (CastToDecimal): New class, similar to above, but casts to
5277         System.Decimal, used in Convert.ImplicitNumericConversion and also
5278         in explicit convesion from double/float to decimal.
5279
5280         * convert.cs (ImplicitNumericConversion): Handle implicit
5281         conversions to System.Decimal.
5282         (ExplicitNumericConversion): handle explicit conversions to
5283         System.Decimal.
5284
5285         This fixes #68711.
5286         
5287 2005-05-20  Miguel de Icaza  <miguel@novell.com>
5288
5289         * typemanager.cs: Do not throw an exception in the TypeBuilder
5290         case, we take care of it on the TypeCode.
5291
5292 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
5293         
5294         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
5295         is back.
5296         
5297         * cs-parser.jay: Catch more lexical errors.
5298         
5299         * report.cs: Add one more Error method.
5300         
5301         * rootcontext.cs,
5302         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
5303
5304 2005-05-20  Martin Baulig  <martin@ximian.com>
5305
5306         * class.cs (TypeContainer.CircularDepException): Removed.
5307         (TypeContainer.DefineType): Removed the `InTransit' stuff.
5308         (TypeContainer.CheckRecursiveDefinition): Check for circular class
5309         (CS0146) and interface (CS0529) dependencies here.
5310
5311 2005-05-20  Martin Baulig  <martin@ximian.com>
5312
5313         * expression.cs (New.DoResolve): Move the CS0712 check above the
5314         CS0144 check; otherwise it can never be reached.
5315
5316 2005-05-20  Martin Baulig  <martin@ximian.com>
5317
5318         * cs-parser.jay: Fix CS0080 check; add CS0231 and CS0257 from MCS.
5319
5320 2005-05-20  Martin Baulig  <martin@ximian.com>
5321
5322         * class.cs (TypeContainer.DefineType): Fix CS0698 check.
5323
5324         * typemanager.cs (TypeManager.IsAttributeType): New public method.
5325
5326 2005-05-19  Martin Baulig  <martin@ximian.com>
5327
5328         * delegate.cs
5329         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
5330         to disable error reporting.
5331
5332         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
5333         here since we don't want to report an error; see the new test-336.cs.
5334
5335 2005-05-19  Raja R Harinath  <rharinath@novell.com>
5336
5337         * statement.cs (ToplevelBlock.GetParameterReference)
5338         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
5339         Move here from class Block.
5340         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
5341         * expression.cs (ParameterReference.DoResolveBase): Likewise.
5342
5343 2005-05-18  Martin Baulig  <martin@ximian.com>
5344
5345         Fix #74978.
5346
5347         * flowanalysis.cs
5348         (FlowBranching.Reachability): Add non-static public And() and Or()
5349         methods.
5350         (FlowBranchingSwitch): New class; do the `break_origins' thing
5351         like in FlowBranchingLoop.
5352         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
5353         reachability, not just locals and parameters.
5354         (FlowBranching.MergeChild): Remove some of the hacks for loop and
5355         switch; MergeBreakOrigins() now takes care of that.
5356
5357 2005-05-18  Martin Baulig  <martin@ximian.com>
5358
5359         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
5360         a loop and may leave it, reset the barrier; fixes #74974.
5361
5362 2005-05-16  Raja R Harinath  <rharinath@novell.com>
5363
5364         Fix test-382.cs.  Emit values of decimal constants.
5365         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
5366         Carved out of ...
5367         (TypeContainer.AddField): ... this.
5368         (TypeContainer.EmitFieldInitializers): Allow the list of fields
5369         with initializers to include 'Const's.
5370         (ClassPart.RegisterFieldForInitialization): Forward to
5371         PartialContainer.
5372         * const.cs (Const.Const): Pass initializer to base class.
5373         (Const.Define): In case of decimal constants, register them for
5374         initialization in a static constructor.
5375
5376 2005-05-14  Martin Baulig  <martin@ximian.com>
5377
5378         * statement.cs (Block.Resolve): Correctly handle unreachable code;
5379         do not call ResolveUnreachable() on unreachable statements in
5380         here, see the comment in the source code.
5381
5382 2005-05-13  Raja R Harinath  <rharinath@novell.com>
5383
5384         Fix #74934.
5385         * expression.cs (BinaryResolveOperator): If one of the operands of
5386         an equality comparison is 'null' and the other is a pointer type,
5387         convert the null to a NullPointer.
5388         * convert.cs (ImplicitReferenceConversion): If the expression is a
5389         NullLiteral and the target type is a pointer type, return a
5390         NullPointer instead.
5391         (ImplicitConversionStandard): Likewise.
5392
5393 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
5394         
5395         * cs-parser.jay: Set readonly context based on special constructs.
5396         
5397         * expression.cs (LocalVariableReference.DoResolveBase): Improved
5398         readonly variable error handling.
5399         
5400         * rootcontext.cs (EmitCode): Don't verify members when error
5401         occurred.
5402         
5403         * statement.cs (LocalInfo): Add reaodnly context information.
5404         (SetReadOnlyContext, GetReadOnlyContext): New methods.
5405
5406 2005-05-17  Martin Baulig  <martin@ximian.com>
5407
5408         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
5409         #70970. 
5410
5411 2005-05-13  Martin Baulig  <martin@ximian.com>
5412
5413         * statement.cs (Block.Resolve, ResolveUnreachable): Correctly
5414         handle unreachable blocks.
5415
5416 2005-05-13  Martin Baulig  <martin@ximian.com>
5417
5418         * class.cs
5419         (ConstructorInitializer.GetOverloadedConstructor): Don't crash.
5420         (MethodCore.CheckCore): Use TypeManager.IsEqual(); fix #74904 and
5421         #74905. 
5422
5423 2005-05-13  Martin Baulig  <martin@ximian.com>
5424
5425         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
5426         instance variable, not a local.  Fix #74873.
5427         (Block.ResolveUnreachable): Set it to true here.
5428
5429 2005-05-12  Martin Baulig  <martin@ximian.com>
5430
5431         * cs-parser.jay (property_declaration): Pass the `current_class',
5432         not the `current_container' to Property's .ctor.  Fixes #74912.
5433
5434 2005-05-11  Martin Baulig  <martin@ximian.com>
5435
5436         * typemanager.cs (Closure): Copy this from MCS and merge all the
5437         GMCS-specific changes into it.
5438
5439 2005-05-12  Raja R Harinath  <harinath@gmail.com>
5440
5441         Fix #74920.
5442         * typemanager.cs (unmanaged_enclosing_types): New.
5443         (IsUnmanagedType): Avoid infloops by using
5444         'unmanaged_enclosing_types' to talk with recursive invocations.
5445
5446 2005-05-11  Duncan Mak  <duncan@novell.com>
5447
5448         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
5449         continuing to process for 'arg'.
5450         (handle_preprocessing_directive): Check the argument of the #endif
5451         directive and report error CS1025 if there are any trailing
5452         characters.
5453
5454         According to the C# spec, having even whitespace after the #endif
5455         directive is illegal; however, because we call arg.TrimEnd ()
5456         beforehand, we have the same behavior as csc, allowing whitespace
5457         after the directive.
5458
5459         Fixes #74892.
5460
5461 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
5462
5463         Fix #74863.
5464         
5465         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
5466         (Constructor.GetObsoleteAttribute): Implemented correctly.
5467
5468 2005-05-10  Martin Baulig  <martin@ximian.com>
5469
5470         * generic.cs (Constraints.Resolve): Report CS0246 if we cannot
5471         resolve the type; fixes #74864.
5472         (DefaultValueExpression): Create the LocalTemporary in Emit(), not
5473         in DoResolve(); fixes #74862.
5474
5475 2005-05-10  Martin Baulig  <martin@ximian.com>
5476
5477         * support.cs (ReflectionParameters.ParameterModifier): Use
5478         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
5479         and `ParameterAttributes.In'.  Fixes #74884.
5480
5481 2005-05-10  Martin Baulig  <martin@ximian.com>
5482
5483         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Don't use
5484         the cache if we're just looking for `MemberTypes.NestedType' in a
5485         generic instance.
5486
5487         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
5488         constraints if we're still resolving the type tree.
5489         (Expression.MemberLookup): If we're resolving the type tree, only
5490         look for `MemberTypes.NestedType' since we're only interested in
5491         getting types.
5492
5493         * class.cs (TypeContainer.DefineType): Don't resolve the type
5494         parameters here; do this later in ResolveType() after the type
5495         tree has been resolved.
5496         (TypeContainer.ResolveType): New public method; this is called
5497         after the type tree is resolved and before the types are being
5498         populated.  We resolve the generic constraints here.
5499         (TypeContainer.DoDefineMember): Check the constraints on our base
5500         class and interfaces.
5501
5502         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Make this protected;
5503         set the `ResolvingTypeTree' flag on the EmitContext.
5504
5505         * codegen.cs (EmitContext.ResolvingTypeTree): New public field.
5506
5507 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
5508
5509         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
5510         
5511         * expression.cs (Argument.GetParameterModifier): Turned to property.
5512         (Invocation.Error_InvalidArguments): Add more descriptive errors.
5513         
5514         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
5515         its C# equivalent.
5516         
5517 2005-05-09  Raja R Harinath  <rharinath@novell.com>
5518
5519         Fix #74852.
5520         * decl.cs (MemberCache.AddMethods): Register override methods,
5521         rather than non-override methods.
5522         * typemanager.cs (RegisterOverride): New.
5523         (IsOverride): Update.
5524
5525 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5526
5527         * typemanager.cs (TypeManager): Moved InitGenerics to Reset method.
5528
5529 2005-05-06  Martin Baulig  <martin@ximian.com>
5530
5531         * attribute.cs
5532         (Attributable.IsClsComplianceRequired): Fix typo in the method name.
5533         (AttributeTester.AnalyzeTypeCompliance): Add generics support.
5534
5535 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5536
5537         Fix #73105.
5538         
5539         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
5540         recursive declaration.
5541         
5542         * statement.cs (Block.ResolveMeta): Report any error in resolving.
5543         
5544 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
5545
5546         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
5547         
5548         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
5549
5550 2005-05-05  Raja R Harinath  <rharinath@novell.com>
5551
5552         Fix #74797.
5553         * decl.cs (DeclSpace.FamilyAccessible): 
5554         Use TypeManager.IsNestedFamilyAccessible.
5555
5556         Fix reopened #64812.
5557         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
5558         internal'.
5559
5560 2005-05-04  Raja R Harinath  <rharinath@novell.com>
5561             Abin Thomas  <projectmonokochi@rediffmail.com>
5562             Anoob V E  <projectmonokochi@rediffmail.com>
5563             Harilal P R  <projectmonokochi@rediffmail.com>
5564
5565         Fix #64812.
5566         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
5567         allow access to all static members.
5568
5569 2005-05-04  Martin Baulig  <martin@ximian.com>
5570
5571         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
5572
5573 2005-05-04  Martin Baulig  <martin@ximian.com>
5574
5575         Fix #74655.
5576
5577         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
5578         section at the end; make things work if `default' is not the last
5579         section.        
5580
5581 2005-05-04  Martin Baulig  <martin@ximian.com>
5582
5583         Fix #70400.
5584
5585         * statement.cs (Switch): Replaced the `got_default' field with a
5586         `default_section' one.
5587         (Switch.CheckSwitch): Set `default_section' here.
5588         (Switch.Resolve): If we're a constant switch and the constant is
5589         not found, use the default section.
5590
5591 2005-05-03  Martin Baulig  <martin@ximian.com>
5592
5593         * expression.cs (ArrayAccess.EmitGetLength): New public method.
5594
5595         * statement.cs (Foreach.ArrayForeach): New nested class.
5596         (Foreach.TemporaryVariable): New nested class.
5597         (Foreach.EmitArrayForeach): Removed; this is now in the new
5598         ArrayForeach class.
5599
5600 2005-05-03  Raja R Harinath  <rharinath@novell.com>
5601
5602         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
5603         more conservative.
5604         (VerifyPendingMethods): Revert change below.
5605
5606         * typemanager.cs (IsOverride, RegisterNonOverride): New.
5607         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
5608         that used to trigger warning -28.  Remove warning -28.
5609         * expression.cs (Invocation.OverloadResolve): Use
5610         TypeManager.IsOverride to distinguish override methods.
5611
5612         Fix #74773.
5613         * pending.cs (VerifyPendingMethods): If a base type implements the
5614         requested interface, don't bother checking individual methods of
5615         the base type.  As a side-effect, this prevents the creation of
5616         unnecessary proxies.
5617
5618 2005-05-02  Martin Baulig  <martin@ximian.com>
5619
5620         Fix #70182.
5621
5622         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
5623         Also `And' the locals if the old vector is null.
5624         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
5625         null; in this case we basically reset all the variables.        
5626
5627 2005-05-02  Martin Baulig  <martin@ximian.com>
5628
5629         Fix #74529.
5630
5631         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
5632         Added `FlowBranching branching' argument; always `and' the
5633         variables instead of `or'ing them unless we're an infinite loop.
5634
5635         * statement.cs (While.Resolve): Create a new sibling unless we're
5636         infinite.       
5637
5638 2005-05-02  Martin Baulig  <martin@ximian.com>
5639
5640         Fix #70140.
5641
5642         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
5643         arguments; use it instead of creating a new TopLevelBlock.
5644         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
5645         our ConstructorInitializer.
5646
5647         * statement.cs
5648         (TopLevelBlock.TopLevelBranching): New public property.
5649         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
5650         and create our `TopLevelBranching'.
5651
5652         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
5653         anonymous method host, use `block.TopLevelBranching' rather than
5654         creating a new branching.
5655
5656 2005-04-20  Miguel de Icaza  <miguel@novell.com>
5657
5658         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
5659         a ScopeInfo, if any of the current children is a child of the new
5660         entry, move those children there.
5661
5662 2005-04-30  Martin Baulig  <martin@ximian.com>
5663
5664         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
5665         at the beginning of a SwitchSection.  Fix #73335.
5666
5667 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
5668
5669         Fix #74378
5670         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
5671         
5672         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
5673         (FieldExpr.DoResolve): Obsolete members are ignored for field
5674         initializers.
5675         
5676 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
5677
5678         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
5679         of arrays detection.
5680
5681         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
5682         verification.
5683         (Field.VerifyClsCompliance): Volatile fields are not compliant.
5684
5685         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
5686         arrays report.
5687
5688 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
5689
5690         * cs-parser.jay: Use the prefered version of -unsafe in error
5691         message.
5692
5693 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
5694
5695         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
5696         circumstances.
5697
5698 2005-04-20  John Luke  <john.luke@gmail.com>
5699
5700         * driver.cs: fix typo in error message, --outout to --output
5701
5702 2005-04-30  Martin Baulig  <martin@ximian.com>
5703
5704         * attribute.cs (Attribute.CheckSecurityActionValidity): Correctly
5705         handle the .NET 2.x security attributes.
5706
5707 2005-04-30  Martin Baulig  <martin@ximian.com>
5708
5709         * typemanager.cs
5710         (TypeManager.ExpandInterfaces): Don't add things twice.
5711
5712         * class.cs
5713         (TypeContainer.VerifyClsCompliance): Allow generic instances.
5714
5715 2005-04-29  Martin Baulig  <martin@ximian.com>
5716
5717         * generic.cs (Constraints.ResolveTypes): Expand interfaces.
5718
5719         * anonymous.cs: Added support for anonymous generic methods.
5720
5721 2005-04-29  Martin Baulig  <martin@ximian.com>
5722
5723         * typemanager.cs (TypeManager.GetInterfaces): Correctly handle
5724         generic instances.
5725
5726 2005-04-29  Martin Baulig  <martin@ximian.com>
5727
5728         * generic.cs (TypeManager.HasConstructorConstraint): Removed.
5729
5730         * expression.cs (New.DoResolve): Fix the CS0304 check.
5731
5732 2005-04-29  Martin Baulig  <martin@ximian.com>
5733
5734         * typemanager.cs (TypeManager.GetFullName): Updated to the new
5735         naming schema.
5736
5737         * class.cs (MethodCore.IsDuplicateImplementation): If we're an
5738         explicit interface implementation, compare the interface types.
5739         (MethodData.Define): Use the new naming scheme from the latest
5740         .NET 2.x beta2.
5741         (MemberBase.DoDefineBase): Resolve `InterfaceType' here.
5742
5743         * decl.cs (MemberName.GetMemberName): Removed.
5744         (MemberName.MethodName, FullName): New properties.
5745
5746 2005-04-25  Raja R Harinath  <rharinath@novell.com>
5747
5748         * gmcs.exe.config: Update v2.0.40607 -> v2.0.50215.
5749
5750 2005-04-22  Martin Baulig  <martin@ximian.com>
5751
5752         * generic.cs (GenericMethod): Create the EmitContext in the
5753         `Define()'; in `Define(MethodBuilder)', create the type parameters
5754         before calling `Define()'.  Fixes #73933.
5755
5756 2005-04-22  Martin Baulig  <martin@ximian.com>
5757
5758         * generic.cs
5759         (Constraints.Resolve): Make things work wrt. the new type lookup system.
5760         (ConstructedType.ResolveAsTypeTerminal): Don't override this.
5761
5762         * ecore.cs (Expression.ResolveAsTypeTerminal): If `te' is a
5763         ConstructedType, check its constraints.
5764
5765 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
5766
5767         * codegen.cs (InRefOutArgumentResolving): New field.
5768         
5769         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
5770         fields outside contructor.
5771         
5772         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
5773         
5774 2005-04-19  Miguel de Icaza  <miguel@novell.com>
5775
5776         * anonymous.cs (CaptureContext.EmitParameterInstance): The
5777         parameter code was not completed ever, so it was not as up-to-date
5778         as local variables.  Must finish it.
5779
5780         The bug fix was to compare the Toplevel of the block, not the
5781         current block.  Thanks for Ben for pointing this out. 
5782
5783 2005-04-19  Raja R Harinath  <rharinath@novell.com>
5784
5785         * decl.cs (AddMethods): Use the declaring type of the problem
5786         method to determine if we want to squash a warning.
5787
5788 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
5789
5790         * attribute.cs: Removed debug output.
5791
5792         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
5793         
5794         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
5795         Report.Stderr.
5796         
5797 2005-04-18  Raja R Harinath  <rharinath@novell.com>
5798
5799         Fix #74481.
5800         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
5801         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
5802         all null comparisons against reference types.
5803
5804 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
5805
5806         Fix# 74565
5807         * class.cs (TypeContainer.CircularDepException) New nested
5808         exception class.
5809         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
5810         (TypeContainer.DefineType): Removed error, reset InTransit before
5811         exit.
5812         (Class.DefineType): Throw exception when is in Transit.
5813         Catch exception and report error.
5814         (Struct.DefineType): Throw exception when is in Transit.
5815         Catch exception and report error.
5816         (Interface.DefineType): Throw exception when is in Transit.
5817         Catch exception and report error.
5818
5819         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
5820         handle nested exception handlers.
5821
5822         * flowanalysis.cs (InTryWithCatch): New method, search for try with
5823         a catch.
5824
5825         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
5826         InFinally and InCatch storage.
5827
5828         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
5829         (Catch.Resolve): Set and Restore ec.InCatch.
5830         (Try.Resolve): Set and Restore ec.InFinally.
5831         (Try.HasCatch): True when try has catch.
5832
5833 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
5834
5835         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
5836           for the same event member, so exclude such cases from warning 419.
5837           Fixed bug #74633.
5838
5839 2005-04-16  Miguel de Icaza  <miguel@novell.com>
5840
5841         * expression.cs (Binary.ResolveOperator): Apply patch from John
5842         Luke to fix bug 59864: operators &, | and ^ on enumerations
5843         require that the same enum type on both sides.
5844
5845         * driver.cs: Add warnings to old flag usage, this is to assist
5846         people who produce Makefiles and hope that the Makefiles will be
5847         used on Windows.
5848
5849         * class.cs (TypeContainer.EmitType): Moved the definition of the
5850         special $PRIVATE$ field from the resolve phase to the Emit phase.
5851         During resolve we do not know if we are a struct with
5852         HasExplicitLayout, we know this only after the attributes for the
5853         type are emitted.
5854
5855         Set the FieldOffset to zero on the dummy field that we create for
5856         the class.   Fixes 74590.
5857
5858 2005-04-16  Raja R Harinath  <rharinath@novell.com>
5859
5860         Fix #73834.
5861         * ecore.cs (PropertyExpr.resolved): New.
5862         (DoResolve): Use it to handle a case of double resolution here.
5863         Handle a case of identical-name-and-type-name.
5864         * expression.cs (ArrayCreation.CheckIndices): Avoid double
5865         resolution by storing the results of expression resolution back
5866         into the "probes" array.
5867
5868 2005-04-15  Raja R Harinath  <rharinath@novell.com>
5869
5870         Fix cs0208-7.cs and cs0208-8.cs.
5871         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
5872         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
5873         error reporting to point out the reason a struct is not unmanaged.
5874
5875 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5876
5877         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
5878           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
5879
5880 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5881
5882         Fix #74528.
5883         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
5884         IdenticalNameAndTypeName here.
5885         (EventExpr.InstanceResolve): Likewise.
5886
5887 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
5888
5889         C# 2.0 DefaultCharSetAttribute implementation
5890         
5891         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
5892         which allows us to set GlobalNamespace for every resolve.
5893         (Attribute.ResolveArguments): Cut from Resolve.
5894         (Attribute.GetCharSetValue): Returns CharSet named argument.
5895         (Attribute.DefinePInvokeMethod): Gets default charset from
5896         module settings.
5897         (GlobalAttribute.ResolveAsTypeStep): Override.
5898         (GlobalAttribute.ResolveArguments): Override.
5899         
5900         * class.cs (TypeAttr): Is protected.
5901         
5902         * codegen.cs (ModuleClass.DefaultCharSet): New member.
5903         (ModuleClass.DefaultCharSetType): New memeber.
5904         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
5905         
5906         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
5907         charset from module.
5908         
5909         * delegate.cs (TypeAttr): Override.
5910         (Delegate.DefineType): Use this TypeAttr.
5911         
5912         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
5913         at very early stage (before types are defined) to resolve model
5914         module attributes. It will probably not work with corlib but it
5915         should be ok.
5916         
5917         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
5918         charset from module.
5919         
5920         * typemanager.cs (default_charset_type): New type.
5921
5922 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5923
5924         * decl.cs (MemberCache.AddMethods): Don't warn if
5925         System.Object.Finalize has buggy MethodAttributes.
5926
5927         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
5928         removed below.
5929
5930 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5931
5932         * doc.cs : detect ambiguous reference to overloaded members.
5933           Fixed bug #71603. MS 1.1 csc does not detect it.
5934
5935 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5936
5937         * doc.cs : delegates must not be referenced with parameters.
5938           Fixed bug #71605.
5939
5940 2005-04-12  Miguel de Icaza  <miguel@novell.com>
5941
5942         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
5943
5944 2005-04-10  Miguel de Icaza  <miguel@novell.com>
5945
5946         * driver.cs (MainDriver): Stop processing if the CLS stage found
5947         errors. 
5948
5949         (CompilerCallableEntryPoint.InvokeCompiler): Always
5950         reset after execution;   Take a TextWriter argument for the
5951         output.
5952
5953         * report.cs: Use the error stream instead of hardcoding stderr. 
5954
5955 2005-04-09  Miguel de Icaza  <miguel@novell.com>
5956
5957         * class.cs: Reduce code paths to test, too small of an
5958         optimization to make it worth the extra testing.  Always perform
5959         it. 
5960
5961 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5962
5963         Fix #74510.
5964         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
5965         operators that had errors reported on them.
5966
5967 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
5968
5969         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
5970         argument types.
5971         (Attribute.Resolve): Add named argument type checking.
5972         
5973         * class.cs (FixedField.Define): Use IsPrimitiveType
5974         
5975         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
5976         
5977         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
5978         unsafe parameter types.
5979         
5980         * statement.cs (Using.ResolveExpression): Add better error description.
5981         
5982         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
5983         
5984 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5985
5986         Fix #74484.
5987         * attribute.cs (Attribute.GetAttributeUsage): Resolve
5988         AttributeUsageAttribute in the emitcontext of the attribute class,
5989         not in the emitcontext of the attributable entity it was attached to.
5990         * cs-parser.jay: Use 'current_class', not 'current_container',
5991         when creating a GlobalAttribute.
5992
5993 2005-04-08  Alp Toker  <alp@atoker.com>
5994
5995         * pending.cs: The fix to #58413 failed to compile methods implementing
5996         interfaces with/without params modifiers and vice versa, even though
5997         params modifiers aren't part of the signature. Make the modifier check
5998         less strict as in csc.
5999
6000 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
6001             Anoob V E  <projectmonokochi@rediffmail.com>
6002             Harilal P R  <projectmonokochi@rediffmail.com>
6003
6004         Fix #58413.
6005         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
6006         modifiers of pending methods.
6007         (PendingImplementation.PendingImplementation): Initialize it.
6008         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
6009         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
6010         with ParameterData.  Add check for modifiers.
6011         * class.cs (MethodData.Define): Update to changes.
6012
6013 2005-04-07  Raja R Harinath  <rharinath@novell.com>
6014
6015         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
6016
6017 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
6018
6019         * class.cs (PropertyMethod.Define): Check private accessor in abstract
6020         property.
6021         
6022         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
6023         
6024         * rootcontext.cs,
6025         * typemanager.cs: Registered RequiredAttributeAttribute.
6026         
6027 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
6028
6029         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
6030         Warning CS0169 is back at level 3.
6031         (IMethodData.SetMemberIsUsed): New method.
6032         
6033         * decl.cs (IsUsed): New value; moved from FieldBase.Status
6034         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
6035         
6036         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
6037
6038         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
6039         contants.
6040         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
6041         is used.
6042         
6043         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
6044         is used.
6045         
6046         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
6047         to avoid the problems with nested types.
6048
6049 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
6050             Anoob V.E  <projectmonokochi@rediffmail.com>
6051             Harilal P.R  <projectmonokochi@rediffmail.com>
6052             Raja R Harinath  <rharinath@novell.com>
6053
6054         Fix #73820.
6055         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
6056         attribute.
6057         * typemanager (GetConstructor): Make public.
6058
6059 2005-04-05  John Luke  <john.luke@gmail.com>
6060             Raja R Harinath  <rharinath@novell.com>
6061
6062         Fix #62232.
6063         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
6064         struct too.  Return false quicker in a few cases.
6065         (VerifyUnManaged): Use it.
6066
6067 2005-04-05  Raja R Harinath  <rharinath@novell.com>
6068
6069         Fix #74041.
6070         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
6071         not 'unreachable_seen'.
6072
6073 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
6074
6075         * attribute.cs (Attribute.GetValue): Removed unused.
6076         
6077         * codegen.cs (CodeGen.TrimExt): Removed unused.
6078         
6079         * cs-parser.jay (output): Removed unused.
6080         
6081         * cs-tokenizer.cs (hex_digits): Removed unused.
6082         
6083         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
6084         
6085         * expression.cs (Indirection.LoadExprValue): Removed unused.
6086         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
6087         
6088         * iterators.cs (Iterator.param_types): Removed unused.
6089         
6090         * statement.cs (Goto.block): Removed unused.
6091         (ToplevelBlock.did): Removed unused.
6092         (Switch.ResolveConstantSwitch): Removed unused.
6093
6094 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
6095
6096         * rootcontext.cs: Allow mcs to bootstrap with the compilation
6097         resetting thingy.
6098
6099 2005-04-19  Martin Baulig  <martin@ximian.com>
6100
6101         Merged r42462 from MCS and made it work for GMCS.
6102
6103         * class.cs (MethodCore.ds): Moved this field to `MemberBase'.
6104
6105         * generic.cs (GenericMethod.Define): Removed `return_type' argument.
6106
6107 2005-04-01  Raja R Harinath  <rharinath@novell.com>
6108
6109         Fix #74232 and cs0208-3.cs.
6110         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
6111         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
6112         unmanaged type.  Don't use FieldBuilders when 't' is a
6113         TypeBuilder.  Use ModFlags and MemberType fields.
6114         * class.cs (MemberBase.member_type): Rename from MemberType.
6115         (MemberBase.MemberType): New property.  Determines member_type on
6116         demand.
6117         (MemberBase.DoDefine): Don't initialize MemberType here.
6118         (FieldMember.Define): Likewise.
6119
6120 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
6121
6122         Fix #74241
6123         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
6124         Attributes are emitted there.
6125         
6126 2005-04-01  Raja R Harinath  <rharinath@novell.com>
6127
6128         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
6129         keyword in 'partial enum' too.
6130         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
6131         is not allowed).
6132         Report from Kamil Skalski <nazgul@omega.pl>.
6133
6134         Fix #74309.
6135         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
6136         have partial containers too.
6137
6138         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
6139         in block' checks to Block.CheckInvariantMeaningInBlock.
6140         * statement.cs (Block.GetKnownVariableInfo): Make private.
6141         (Block.IsVariableUsedInChildBlock): Remove.
6142         (Block.IsVariableUsedInBlock): Likewise.
6143         (Block.CheckInvariantMeaningInBlock): New.  Show location of
6144         conflicting declaration.
6145         (Block.AddVariable): Make error messages less long-winded and more
6146         specific.  Show location of conflicting declaration.
6147         * parameter.cs (Parameters.Location): New readonly property.
6148
6149 2005-03-31  Raja R Harinath  <rharinath@novell.com>
6150
6151         Clean up semantics of invoking ResolveMemberAccess.
6152         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
6153         can have an instance, ensure that we pass in a non-TypeExpression
6154         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
6155         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
6156         argument.  Update to changes and simplify.
6157         (FieldExpr.Emitinstance): Remove CS0120 check.
6158         (PropertyExpr.EmitInstance): Likewise.
6159         * expression.cs (Argument.Resolve): Likewise.
6160         (Invocation.DoResolve): Update to changes in semantics of
6161         InstanceExpression.
6162
6163 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
6164
6165         Fix #74241
6166         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
6167         customization.
6168         
6169         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
6170
6171 2005-03-31  Raja R Harinath  <rharinath@novell.com>
6172
6173         Fix difference in behaviour with commandline invocation.
6174         * driver.cs (Driver.Reset): New.
6175         (CompilerCallableEntryPoint): Call it.
6176
6177         * statement.cs (If.Resolve): Avoid spurious "uninitialized
6178         variable" warnings if the boolean expression failed to resolve.
6179
6180 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
6181
6182         * attribute.cs: Fix the union of several permissions when some of them
6183         are unrestricted (so the result isn't an unrestricted permission set).
6184         Fix #74036.
6185
6186 2005-03-30  Raja R Harinath  <rharinath@novell.com>
6187
6188         * ecore.cs (MemberExpr): New class.  Convert from interface
6189         IMemberExpr.
6190         (MemberExpr.ResolveMemberAccess): Refactor and move here from
6191         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
6192         error checks.
6193         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
6194         (MethodGroupExpr.IsExplicitImpl): Remove.
6195         (Expression.GetFieldFromEvent): Remove.
6196         (SimpleName.MemberStaticCheck): Remove.
6197         (SimpleName.DoSimpleNameResolve): Update to changes.
6198         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
6199         (MemberAccess.IdenticalNameAndTypeName): Remove.
6200         (MemberAccess.error176): Move to MemberExpr.
6201         (MemberAccess.DoResolve): Update to changes.
6202         (BaseAccess.DoResolve): Likewise.
6203
6204 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
6205
6206         C# 2.0 Conditional attribute class implementation
6207         
6208         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
6209         Analyzes class whether it has attribute which has ConditionalAttribute
6210         and its condition is not defined.
6211         
6212         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
6213         (Class.IsExcluded): New method. Search for at least one defined
6214         condition in ConditionalAttribute of attribute class.
6215
6216 2005-03-30  Raja R Harinath  <rharinath@novell.com>
6217
6218         * ecore.cs (PropertyExpr): Derive from Expression, not
6219         ExpressionStatement.
6220         (PropertyExpr.EmitStatement): Remove.
6221
6222 2005-03-29  Raja R Harinath  <rharinath@novell.com>
6223
6224         Fix #74060.
6225         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
6226         internal field "value__" of an enum be private.  The examples for
6227         "value__" that I found on MSDN all used FieldAttributes.Private.
6228
6229         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
6230         Don't mention IL method attribute names.
6231
6232         Fix #47991.  Remove a TODO.
6233         * statement.cs (Block.Toplevel): Make into a field.
6234         (Block.Parameters): Move into ToplevelBlock.
6235         (Block.known_variables): Rename from child_variable_names.
6236         (Block.Block): Remove variants that take Parameters.  Initialize
6237         'Toplevel' with the immediately surrounding toplevel block.
6238         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
6239         LocalInfo parameter.
6240         (Block.GetKnownVariableInfo): New.
6241         (Block.IsVariableNameUsedInChildBlock): Update.
6242         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
6243         the block, even though it may not be in scope.
6244         (Block.AddVariable): Remove Parameters parameter.  Use
6245         Toplevel.Parameters instead.
6246         (Block.AddConstant): Remove Parameters parameter.
6247         (Block.GetParameterReference): Update to use Toplevel.Parameters.
6248         (Block.IsParamaterReference): Likewise.
6249         (Block.IsLocalParameter): Likewise.  Simplify a lot.
6250         (ToplevelBlock.Parameters): New.  Moved from Block.
6251         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
6252         initialize Parameters to a non-null value.
6253         * cs-parser.jay: Update to changes.
6254         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
6255         simple names that mean different things in the same block.  Use
6256         Block.IsVariableNameUsedInBlock.
6257
6258 2005-03-28  Raja R Harinath  <rharinath@novell.com>
6259
6260         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
6261
6262 2005-03-26  Raja R Harinath  <harinath@acm.org>
6263
6264         Fix #73038.
6265         * assign.cs (Assign.DoResolve): When the RHS of an assignment
6266         fails to resolve, ensure that the LHS is still resolved as an
6267         lvalue.
6268
6269 2005-03-25  Raja R Harinath  <harinath@acm.org>
6270
6271         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
6272         ec.ContainerType.
6273         (Enum.current_ec): Remove.
6274         (Enum.LookupEnumValue): Remove EmitContext argument.
6275         Just uses the one created during DefineType.
6276         (Enum.FindMembers): Update.
6277         * expression.cs (MemberAccess.DoResolve): Update.
6278
6279 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
6280
6281         * assign.cs (Assign.DoResolve): Check for CS1717 when
6282         source and target are same (uses Equals).
6283
6284         * expression.cs (LocalVariableReference, ParameterReference,
6285         This): Implemented Equals, GetHashCode.
6286
6287         * statement.cs (Block.GetParameterReference): Removed useless
6288         local variable.
6289
6290 2005-03-22  Raja R Harinath  <rharinath@novell.com>
6291
6292         Fix cs0128.cs
6293         * statement.cs (Block.AddVariable): Ensure that we skip implicit
6294         blocks before deciding whether the error is cs0136 or cs0128.
6295
6296         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
6297         (using_alias_directive, using_namespace_directive): Pass
6298         MemberName, not an expression to Namespace.UsingAlias and
6299         Namespace.Using.
6300         (MakeName): Use the MemberName of the namespace.
6301         * namespace.cs (Namespace.MemberName): New.
6302         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
6303         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
6304         Likewise.
6305         * decl.cs (MemberName.Name): Make readonly.
6306         (MemberName.FromDotted): New "constructor".
6307         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
6308         (MemberCore.Name): Compute from MemberName on demand.
6309         (MemberCore.SetMemberName): Provide a way to change the
6310         MemberName.
6311         (MemberCore.AddToContainer): Don't take a fullname parameter.
6312         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
6313         fully qualified name of the container to the member name.
6314         (TypeContainer.AddToTypeContainer): Use a fully qualified name
6315         only if the type is a member of the root container.
6316         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
6317         MemberName.Left rather than searching for an embedded ".".
6318         (PartialContainer.CreatePart): Update to changes in RootContext.
6319         (MemberBase.ShortName): Turn into a property.  Use
6320         MemberCore.SetMemberName.
6321         (MemberBase.ExplicitInterfaceName): Remove.
6322         (MemberBase.UpdateMemberName): Remove.
6323         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
6324         (PropertyBase.SetMemberName): New override.
6325         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
6326         (Tree.GetDecl): New.
6327         (Tree.AllDecls): Rename from Decls.
6328         * attribute.cs, enum.cs, report.cs: Update to changes.
6329         * driver.cs (MainDriver): Use MemberName.FromDotted on
6330         RootContext.MainClass.
6331
6332 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
6333
6334         * class.cs (FixedField.Define): Check for CS1664 and more sanity
6335         checks.
6336
6337         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
6338
6339 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
6340
6341         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
6342         property accessor modifiers.
6343
6344         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
6345         fixed buffer attribute (CS1716).
6346         (PropertyMethod.HasCustomAccessModifier): When property accessor
6347         has custom modifier.
6348
6349         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
6350         modifiers.
6351         (PropertyExpr.DoResolveLValue): Add CS0272.
6352
6353 2005-03-17  Miguel de Icaza  <miguel@novell.com>
6354
6355         * convert.cs: When converting to a pointer, use the proper Conv.U
6356         or Conv.I depending on the source data type.
6357
6358         * cs-tokenizer.cs: Make the size for large decimal constants,
6359         fixes #72957.
6360
6361 2005-03-17  Martin Baulig  <martin@ximian.com>
6362
6363         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
6364         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
6365
6366 2005-03-17  Martin Baulig  <martin@ximian.com>
6367
6368         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
6369         to bool so we can return an error condition.
6370         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
6371         returned an error.
6372
6373 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
6374
6375         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
6376         attributes.
6377
6378 2005-03-16  Raja R Harinath  <rharinath@novell.com>
6379
6380         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
6381         Refactor to avoid traversing the list of assemblies, and to avoid
6382         string concatenation.
6383         * typemanager.cs (guid_attr_type): Remove.
6384         (negative_hits, pointers, references): Remove hashes.
6385         (type_hash): New.
6386         (GetConstructedType): New.  Uses type_hash to handle constructed
6387         types (arrays, references, pointers).
6388         (GetReferenceType, GetPointerType): Use it.
6389         (GetNestedType): New.  Uses type_hash to handle nested types of
6390         reflected types.
6391         (LookupType, LookupTypeDirect): Remove.
6392         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
6393         'types' hash and LookupTypeReflection directly.
6394         (params_string, params_object): Use GetConstructedType.
6395         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
6396         top-level types.
6397         (Namespace.Lookup): Use cached_types.
6398         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
6399         provided by old TypeManager.LookupType.
6400         * rootcontext.cs (MakeFQN): Remove.
6401         * decl.cs (DeclSpace.MakeFQN): Likewise.
6402         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
6403         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
6404         TypeManager.GetConstructedType.
6405         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
6406
6407 2005-04-16  Zoltan Varga  <vargaz@freemail.hu>
6408
6409         * cs-parser.jay: Fix build.
6410
6411 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
6412
6413         * class.cs (TypeContainer.CircularDepException) New nested
6414         (MethodCore.CheckBase): Report CS1715 for properties and indexers.
6415
6416         * cs-parser.jay: Reports CS1527 for any namespace element.
6417
6418         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
6419         Added CS0407.
6420
6421         * expression.cs (ParameterReference.IsAssigned): Changed error to
6422         CS0269.
6423         (Error_WrongNumArguments): Moved CS0245 detection here.
6424
6425         * statement.cs (Return.Resolve): Add CS1622 report.
6426
6427 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
6428
6429         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
6430
6431 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
6432
6433         * attribute.cs expression.cs: Get rid of some allocations.
6434
6435 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
6436
6437         * doc.cs : just eliminate the latest change.
6438
6439 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6440
6441         * doc.cs : commented out the latest change. It breaks xml-030.cs
6442
6443 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6444
6445         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
6446           fail. So invoke CreateType() in FindDocumentedType().
6447
6448 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6449
6450         * cs-tokenizer.cs : added IsKeyword().
6451         * doc.cs : Detect keyword incorrectly used as identifier.
6452           Allow identifiers prefixed by @.
6453
6454 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
6455
6456         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
6457         It caused exception in namespace resolving (again!).
6458         
6459         * class.cs (Class.ctor): Removed exit.
6460         (PropertyMethod.ctor): ditto.
6461         
6462         * codegen.cs (Codegen.Reset): Reset static data.
6463         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
6464         
6465         * cs-tokenizer.cs (Cleanup): Removed.
6466         
6467         * driver.cs (GetSystemDir): Rewrote to one line command.
6468         It caused problem with unloaded dynamic modules.
6469         (UnixParseOption): Removed Exit.
6470         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
6471         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
6472         Now can be mcs used as library.
6473         
6474         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
6475         empty location.
6476         
6477         * location.cs (Reset): Reset static data.
6478         
6479         * namespace.cs (Reset): Reset static data.
6480         
6481         * report.cs (Report.Reset): Reset static data.
6482         
6483         * rootcontext.cs (RootContext.Reset): Reset static data.
6484         
6485         * tree.cs (RootTypes.ctor): Use Location.Null
6486         
6487         * typemanager.cs (TypeManager.Reset): Reset static data.
6488         (CoreLookupType): Removed Exit.
6489         (TypeHandle.Reset): Reset static data.
6490         
6491 2005-03-10  Raja R Harinath  <rharinath@novell.com>
6492
6493         Fix #73516.
6494         * typemanager.cs (ComputeNamespaces): Import namespaces from
6495         referenced modules too.
6496
6497 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6498
6499         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
6500         than '.'.
6501
6502 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6503
6504         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
6505         enclosing DeclSpace.  This ensures that a name-lookup populates
6506         more caches and there are fewer 'TypeExpression's.  Carve out
6507         nested type lookup into ...
6508         (LookupNestedTypeInHierarchy): ... this.
6509
6510 2005-04-15  Martin Baulig  <martin@ximian.com>
6511
6512         Merged r41590 from MCS and make it work in the generics land.
6513
6514         * generic.cs (TypeParameter.UpdateConstraints): Removed the
6515         `check' argument.
6516
6517         * class.cs (PartialContainer.UpdateConstraints): Removed.
6518         (PartialContainer.CheckConstraints): Removed.
6519         (PartialContainer.SetParameterInfo): Store the constraints here.
6520         (PartialContainer.DefineTypeParameters): New public method;
6521         resolve the type parameter's constraints here.  Note that the
6522         PartialContainer doesn't have an EmitContext anymore, so we must
6523         do this in the ClassPart.
6524
6525 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6526
6527         Clean up a few partial-class semantics.  
6528         Fixes test-357.cs and cs1618-2.cs.
6529         * cs-parser.jay (struct_declaration): Use 'current_class' as
6530         parent of newly-created struct.  Remove call to Register ().
6531         Use 'pop_current_class' to complete handing the current struct.
6532         (interface_declaration): Likewise.
6533         (class_declaration): Likewise.
6534         (enum_declaration): Use 'current_class' as parent of newly created
6535         enum.
6536         (delegate_declaration): Likewise.
6537         (pop_current_class): New function.  This is used to handle closing
6538         up the 'current_class' and 'current_container', and pointing them
6539         to the enclosing class/container.
6540         (CSharpParser): Initialize 'current_class' too.
6541         * decl.cs (MemberCore): Add check for invariant: a partial
6542         container is not a parsed entity, and thus does not enclose any
6543         parsed members.
6544         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
6545         (DeclSpace.BaseTypeExpr): Use it.
6546         (DeclSpace.LookupType): Add check for invariant.
6547         * class.cs (TypeContainer): Add check for invariant: a nested
6548         class should have the same NamespaceEntry as its enclosing class.
6549         (TypeContainer.EmitFieldInitializers): Make virtual.
6550         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
6551         MemberCore.
6552         (TypeContainer.Register): Remove.
6553         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
6554         null.  Use TypeResolveEmitContext for resolving base types and
6555         interfaces.  Move initialization of Parts.TypeBuilder here from
6556         ...
6557         (TypeContainer.DefineNestedTypes): ... here.
6558         (PartialContainer): Take a Namespace not a NamespaceEntry.
6559         (PartialContainer.Create): Don't use Register.  Call the
6560         appropriate Add... function directly.
6561         (ClassPart): Take both the PartialContainer and the enclosing
6562         class as constructor arguments.
6563         (ClassPart.EmitFieldInitializers): Override.
6564         (ClassPart.PartFindNestedTypes): Remove.
6565         (FieldBase.GetInitializerExpression): Resolve the initializer
6566         expression in the emit context of the enclosing class.
6567         * tree.cs (RootTypes): Remove Register ().
6568         
6569 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
6570
6571         * cs-parser.jay: Removed CS0134.
6572         
6573         * driver.cs: Removed CS1901.
6574         
6575         * expression.cs (SizeOf.DoResolve): Don't report CS0233
6576         for predefined types.
6577
6578 2005-03-07  Duncan Mak  <duncan@novell.com>
6579
6580         * codegen.cs (Save):  Catch UnauthorizedAccessException as
6581         well. Fixes bug #73454.
6582
6583 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
6584
6585         * cs-tokenizer.cs (xtoken): Add CS1035.
6586         
6587         * class.cs (MethodData.Define): Add CS0683.
6588         (FieldMember.ctor): Add CS0681.
6589
6590 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6591
6592         * ecore.cs (SimpleName.DoResolve): Rename from
6593         SimpleName.DoResolveAllowStatic.
6594         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
6595         Pass 'intermediate' flag to MemberStaticCheck.
6596         (SimpleName.MemberStaticCheck): Skip "static check" only in case
6597         of "intermediate" lookups via MemberAccess.
6598         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
6599         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
6600
6601 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6602
6603         Fix #73394.
6604         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
6605         slipped in because of variable names that are identical to a
6606         builtin type's BCL equivalent ('string String;', 'int Int32;').
6607         (PropertyExpr.EmitInstance): Likewise.
6608
6609 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
6610
6611         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
6612         
6613         * report.cs (warning_ignore_table): Made public.
6614
6615 2005-03-04  Raja R Harinath  <rharinath@novell.com>
6616
6617         Fix #73282.
6618         * class.cs (MethodData.Emit): Pass 'container' to
6619         container.GetObsoleteAttribute instead of 'container.Parent'.
6620
6621 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
6622
6623         * cs-parser.jay: Add 1534 error test.
6624
6625         * iterators.cs (Yield.CheckContext): Add error 1629.
6626         (Iterator.ctor): Save unsafe modifier.
6627         (MoveNextMethod.DoEmit): Restore unsafe context.
6628
6629         * namespace.cs (UsingAlias): Better error message.
6630
6631 2005-03-03  Dan Winship  <danw@novell.com>
6632
6633         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
6634         the warning message [#73219]
6635
6636 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6637
6638         Fix compile with MCS 1.0.0.0.
6639         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
6640         w_restore to not depend on string constant folding.
6641
6642 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6643
6644         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
6645         CS0246 check to users who passed 'silent = false'.
6646         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
6647         check.
6648         (SimpleName.SimpleNameResolve): Update.
6649         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
6650         (MemberAccess.IdenticalNameAndTypeName): Update.
6651         * doc.cs (FindDocumentedTypeNonArray): Update.
6652
6653 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
6654
6655         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
6656         * parameters.cs (ComputeAndDefineParameters): Remove.
6657         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
6658         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
6659         Use GetParameterInfo.
6660
6661 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
6662
6663         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
6664
6665 2005-03-02  Raja R Harinath  <rharinath@novell.com>
6666
6667         Unify DeclSpace.LookupType and DeclSpace.FindType.
6668         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
6669         is in charge of defining nested types on demand.
6670         (DeclSpace.LookupType): Use it when the current_type is a
6671         TypeBuilder.  Use LookupTypeDirect for reflected types.
6672         (DeclSpace.FindType): Remove.
6673         (DeclSpace.LookupInterfaceOrClass): Likewise.
6674         (DeclSpace.DefineTypeAndParents): Likewise.
6675         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
6676         DeclSpace.LookupType.
6677         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
6678         * typemanager.cs (LookupType): Simplify.
6679         (AddUserType): Remove type from negative_hits.
6680         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
6681         * class.cs (TypeContainer.FindMembers): Move handling of nested
6682         types ...
6683         (TypeContainer.FindMembers_NestedTypes): ... here.
6684         (TypeContainer.FindNestedType): Implement override.
6685         (ClassPart.FindNestedType): Delegate to PartialContainer.
6686         (ClassPart.PartFindNestedType): Looks up the nested types of the
6687         part alone.
6688
6689 2005-04-14  Martin Baulig  <martin@ximian.com>
6690
6691         * generic.cs (ConstructedType): Moved all the type lookup and
6692         nested class logic into SimpleName.
6693         (ConstructedType.ResolveConstructedType): Our underlying type is
6694         already fully resolved; all the type lookup stuff is in
6695         SimpleName.
6696
6697         * ecore.cs (SimpleName.ResolveAsTypeStep): Resolve nested
6698         constructed types here instead of in ConstructedType.
6699
6700         * decl.cs (MemberName.GetTypeExpression): Always create a
6701         SimpleName, not a ConstructedType.
6702         (DeclSpace.ResolveNestedType): Removed; this is now in SimpleName.
6703
6704 2005-03-02  Martin Baulig  <martin@ximian.com>
6705
6706         * class.cs (TypeContainer.DoDefineMembers): We also need a default
6707         static constructor in static classes.
6708
6709 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
6710
6711         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
6712         sizeParamIndex is not specified.
6713
6714 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
6715
6716         Fix #73117
6717         * report.cs (WarningMessage.IsEnabled): Missing null check.
6718
6719 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6720
6721         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
6722         in the fields and not in the properties.
6723
6724 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
6725
6726         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
6727         fields as well.
6728
6729 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6730
6731         * attribute.cs: Small refactoring (improved robustness).
6732         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
6733         (ValidateGuid): Removed.
6734         (Resolve): Removed referenced to above mentioned.
6735         (GetAttributeUsage): Made private and changed to work without
6736         class assistance.
6737         (GetIndexerAttributeValue): Don't crash.
6738         (GetConditionalAttributeValue): Ditto.
6739         (GetClsCompliantAttributeValue): Ditto.
6740         (ExtractSecurityPermissionSet): All attributes exceptions are
6741         error 648.
6742         (GetPropertyValue): New helper.
6743         (GetMethodImplOptions): New method.
6744         (DefinePInvokeMethod): Reuse common code. Implemented handling of
6745         some missing properties.
6746         
6747         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
6748         (Method.ApplyAttributeBuilder): Updated.
6749         
6750         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
6751         exception.
6752
6753 2005-02-28  Raja R Harinath  <rharinath@novell.com>
6754
6755         Fix #73052.
6756         * report.cs (Report.SymbolRelatedToPreviousError): Handle
6757         non-simple types (array, pointer, reference).
6758
6759 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6760
6761         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
6762
6763         * class.cs (MethodCore.IsDuplicateImplementation): Special error
6764         for operators.
6765         (Method.CheckBase): Catch wrong destructor here.
6766         (MethodData.Define): Add errors 550, 668.
6767
6768         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
6769
6770         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
6771
6772         * pending.cs (VerifyPendingMethods): Add error 551.
6773
6774         * typemanager.cs (CSharpName): Next error report helper.
6775
6776 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
6777
6778         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
6779         attributes. Removed useless attribute double check.
6780         It saves almost 2MBs for corlib.
6781
6782 2005-02-25  Raja R Harinath  <rharinath@novell.com>
6783
6784         Fix #72924.
6785         * statement.cs (ExpressionStatement.Resolve): Make robust to being
6786         called twice in case of error.
6787
6788 2005-02-23  Chris Toshok  <toshok@ximian.com>
6789
6790         Fix compiler portions of #72827.
6791         * statement.cs (Block.Emit): call Begin/EndScope on the
6792         EmitContext instead of the ILGenerator.
6793
6794         * codegen.cs (EmitContext.BeginScope): new method, call
6795         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
6796         we have one.)
6797         (EmitContext.BeginScope): same, but EndScope and CloseScope
6798
6799         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
6800         offset and call the superclass's OpenScope(int) with it.
6801         (SymbolWriter.CloseScope): get the current il
6802         offset and call superclass's CloseScope(int) with it.
6803
6804 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
6805
6806         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
6807         CS1677 for out and ref as well.
6808
6809         * class.cs (Method.Define): Add error CS1599 detection.
6810         
6811         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
6812         
6813         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
6814         
6815         * delegate.cs (Delegate.Define): Add error CS1599 detection.
6816         
6817         * support.cs.cs (ModifierDesc): New helper method.
6818
6819 2005-02-23  Raja R Harinath  <rharinath@novell.com>
6820             Abin Thomas  <projectmonokochi@rediffmail.com>
6821             Anoob V E  <projectmonokochi@rediffmail.com>
6822             Harilal P R  <projectmonokochi@rediffmail.com>
6823
6824         Fix #57851, #72718.
6825         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
6826         MemberLookup (used for error reporting) actually returns a result.
6827         Fix error report number (122, not 112).
6828
6829 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
6830             Anoob V E  <projectmonokochi@rediffmail.com>
6831             Harilal P R  <projectmonokochi@rediffmail.com>
6832
6833         Fix #71134.
6834         * pending.cs (PendingImplementation.GetAbstractMethods):
6835         Find NonPublic members too.
6836
6837 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
6838
6839         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
6840         Fixed error 217.
6841         
6842         * class.cs (MethodCore.CheckMethodAgainstBase):
6843         Add error 239 report.
6844
6845 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6846
6847         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6848         
6849         * class.cs (Operator.Define): Add error 217 report.
6850         
6851 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6852
6853         Fix #68955.
6854         * expression.cs (Invocation.IsApplicable): Make public.
6855         (Invocation.IsParamsMethodApplicable): Likewise.
6856         * delegate.cs (Delegate.VerifyApplicability): Don't use
6857         Invocation.VerifyArgumentCompat for parameter applicability
6858         testing.  Use Invocation.IsApplicable and
6859         Invocation.IsParamsMethodApplicable.
6860
6861 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6862
6863         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6864         
6865         * class.cs (Operator.Define): Add error 217 report.
6866         
6867 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6868
6869         * namespace.cs (UsingEntry.Resolve): Undo change below.
6870
6871 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6872
6873         Fix #72756.
6874         * ecore.cs (Expression.MemberLookupFailed): Add argument to
6875         disable the error message when the extended MemberLookup also
6876         fails.
6877         (Expression.MemberLookupFinal): Update.
6878         (SimpleName.DoSimpleNameResolve): Update.
6879         * expression.cs (MemberAccess.ResolveNamespaceOrType):
6880         Don't use MemberLookupFinal.
6881         (New.DoResolve): Update.
6882         (BaseAccess.CommonResolve): Update.
6883
6884 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6885
6886         Fix #72732.
6887         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
6888         occured previously, don't resolve again.
6889
6890 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6891
6892         Fix #69949
6893         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
6894         argument. Call ResolveAttributeUsage for unresolved.
6895         when types doesn't match ctor arguments.
6896         
6897         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
6898         for nested attribute classes.
6899         (Class.attribute_usage): Removed.
6900         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
6901         for attribute class.
6902         
6903         * ecore.cs (IsAttribute): Removed.
6904         
6905         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
6906         
6907         * rootcontext.cs (RegisterAttribute): Removed, attributes are
6908         now normal types.
6909         (attribute_types): Removed.
6910         (EmitCode): Global attributes are emited as the latest.
6911
6912 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
6913
6914         * class.cs (EmitFieldInitializers): Don't emit field initializer
6915         for default values when optimilization is on.
6916         
6917         * constant.cs (Constant.IsDefaultValue): New property.
6918         
6919         * driver.cs: Add /optimize handling.
6920         
6921         * constant.cs,
6922         * ecore.cs,
6923         * literal.cs: Implement new IsDefaultValue property.
6924         
6925         * rootcontext.cs (Optimize): New field, holds /optimize option.
6926
6927 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6928
6929         Fix crasher in re-opened #72347.
6930         * namespace.cs (Namespace.Lookup): Return null if
6931         DeclSpace.DefineType returns null.
6932
6933         Fix #72678.
6934         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
6935
6936 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6937
6938         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
6939         now returns null if it cannot resolve to an lvalue.
6940         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
6941         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
6942         returned null.  Remove check for SimpleName.
6943         (EventExpr.DoResolveLValue): New.
6944         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
6945         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
6946         error from ...
6947         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
6948         avoid CS0131 error.
6949         (Unary.ResolveOperator): Move CS0211 check ...
6950         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
6951         CS0131 error.
6952         (Unary.DoResolveLValue): Simplify.
6953         (AddressOf.DoResolveLValue): New.
6954         (ArrayAccess.DoResolveLValue): New.
6955
6956 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
6957
6958         * attribute.cs (Attribute.Resolve): Add arguments casting for
6959         when types doesn't match ctor arguments.
6960
6961 2005-02-16  Raja R Harinath  <rharinath@novell.com>
6962
6963         Fix parts of #63202.
6964         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
6965         lookup of operator in base type.  Ensure that all checks happen
6966         when the operator resolves to an "op_..." method.
6967
6968 2005-02-15  Raja R Harinath  <rharinath@novell.com>
6969
6970         Fix #71992.
6971         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
6972         'ignore_cs0104' parameter.  Pass it to ...
6973         (NamespaceEntry.Lookup): ... this.
6974         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
6975         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
6976         (TypeLookupExpression.DoResolveAsTypeStep): Update.
6977         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
6978         Update.  Request that cs0104 errors be ignored.
6979         (ComposedCast.ResolveAsTypeStep): Update.
6980
6981 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6982
6983         Fix #59209.
6984         * expression.cs (Invocation.BetterFunction): Remove support for
6985         comparing virtual functions and their overrides.
6986         (Invocation.IsOverride): New.
6987         (Invocation.OverloadResolve): Don't consider 'override' functions
6988         during candidate selection.  Store them in a lookaside list.
6989         If the selected method is a 'virtual' function, use the list to
6990         find any overrides that are closer to the LHS type.
6991
6992 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
6993
6994         * expression.cs (New.DoResolve): Add complex core type reduction.
6995         (New.Constantify): Converts complex core type syntax like 'new int ()'
6996         to simple constant.
6997         
6998 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6999
7000         * decl.cs (EntryType.EntryType): New constructor to create an
7001         updated copy of a cache entry.
7002         (MemberCache.AddMethods): Use it.
7003         (MemberCache.ClearDeclaredOnly): Remove.
7004         (MemberCache.MemberCache): Update.
7005
7006 2005-02-11  Miguel de Icaza  <miguel@novell.com>
7007
7008         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
7009         variable.  This one is represents the actual low-level declaration
7010         of the method, as opposed to the semantic level `IsStatic'.   
7011
7012         An anonymous method which is hosted into a static method might be
7013         actually an instance method.  IsStatic would reflect the
7014         container, while MethodIsStatic represents the actual code
7015         generated.
7016
7017         * expression.cs (ParameterReference): Use the new MethodIsStatic
7018         instead of IsStatic.
7019
7020         * anonymous.cs (AnonymousMethod.Compatible): Pass the
7021         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
7022         set on the current EmitContext. 
7023
7024         * expression.cs (Cast): Overload DoResolveLValue so we can pass
7025         resolve our casted expression as an LValue.  This triggers the
7026         proper LValue processing that is later required by Assign.
7027
7028         This fixes 72347.
7029
7030         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
7031
7032 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
7033
7034         C# 2.0 Fixed buffer implementation
7035
7036         * anonymous.cs: Update after RegisterHelperClass renaming.
7037
7038         * attribute.cs (AttributeTester.fixed_buffer_cache):
7039         Cache of external fixed buffers.
7040         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
7041         implementation if field is fixed buffer else null.
7042
7043         * class.cs
7044         (TypeContainer.AddField): Accept FieldMember instead of Field.
7045         (FieldBase.IsFieldClsCompliant): Extracted code from
7046         VerifyClsCompliance descendant customization.
7047         (FixedField): New class handles fixed buffer fields.
7048         (FixedFieldExternal): Keeps information about imported fixed
7049         buffer.
7050         (IFixedField): Make access to internal or external fixed buffer
7051         same.
7052
7053         * cs-parser.jay: Add fixed buffer parsing.
7054
7055         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
7056         buffer.
7057
7058         * expression.cs (Indirection): Extended implementation to accept
7059         fixed buffer field.
7060         (PointerArithmetic.Emit): Get element from fixed buffer as well.
7061         (ElementAccess.MakePointerAccess): Get type as parameter.
7062         (DoResolve): Add fixed buffer field expression conversion.
7063         (DoResolveLValue): Ditto.
7064         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
7065         (ArrayPtr): Derives from FixedBufferPtr.
7066         (ArrayPtr.Emit): Add extra emit for array elements.
7067
7068         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
7069
7070         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
7071         for compiler generated types.
7072         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
7073
7074         * statement.cs (Fixed): Refactored to be easier add fixed buffer
7075         and consume less memory.
7076         (Fixed.Resolve): Add fixed buffer case.
7077
7078         * typemanager.cs (compiler_generated_attr_ctor,
7079         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
7080         (HasElementType): Add our own implementation to work on every
7081         runtime.
7082
7083 2005-02-11  Miguel de Icaza  <miguel@novell.com>
7084
7085         * anonymous.cs (CaptureContext): Track whether `this' has been
7086         referenced.   
7087
7088         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
7089         only captured `this' if it was implicitly done (instance
7090         methods/variables were used). 
7091
7092         * codegen.cs (EmitContext.CaptureThis): New method to flag that
7093         `this' must be captured.
7094
7095 2005-01-30  Miguel de Icaza  <miguel@novell.com>
7096  
7097         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
7098         is null it means that there has been no need to capture anything,
7099         so we just create a sibling.
7100
7101         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
7102
7103         Just a partial fix.  The other half is fairly elusive.
7104         
7105 2005-02-10  Raja R Harinath  <rharinath@novell.com>
7106
7107         Fix #52586, cs0121-4.cs.
7108         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
7109         and return a hashtable.
7110         (MemberCache.ClearDeclaredOnly): New.
7111         (MemberCache.MemberCache): Update to change.  Make a deep copy of
7112         the method_hash of a base type too.
7113         (MemberCache.AddMethods): Adapt to having a deep copy of the base
7114         type methods.  Overwrite entries with the same MethodHandle so
7115         that the ReflectedType is correct.  The process leaves in base
7116         virtual functions and their overrides as distinct entries.
7117         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
7118         matters since it was boxed in a ArrayList before.
7119         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
7120         modifier.
7121         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
7122         case of a virtual function and its override (choose the overload
7123         as better).
7124         (Invocation.OverloadResolve): Avoid 'override' members during
7125         'applicable_type' calculation.
7126
7127 2005-03-28  Raja R Harinath  <rharinath@novell.com>
7128
7129         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
7130         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
7131         GetTypeHandle.  It is possible for a reflected type to derive from
7132         a TypeBuilder (e.g., int[] derives from the TypeBuilder
7133         System.Array during mscorlib compilation).
7134         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
7135         contain a method_hash, don't create one either.  Don't create a
7136         deep copy of the base cache's method_hash.
7137         (MemberCache.SetupCache): Rename back from DeepCopy.
7138         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
7139         already initialized.  If we see an override function, add its
7140         underlying base virtual function to the member_hash too.
7141
7142 2005-02-09  Raja R Harinath  <rharinath@novell.com>
7143
7144         Combine two near-redundant caches.
7145         * typemanager.cs (method_params): Rename from method_internal_params.
7146         (TypeManager.GetParameterData): New.  Replace
7147         Invocation.GetParameterData.
7148         (TypeManager.LookupParametersByBuilder): Remove.
7149         * expression.cs (Invocation.method_parameter_cache): Remove.
7150         (Invocation.GetParameterData): Remove.
7151         Update to changes.
7152         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
7153         Update to changes.
7154
7155 2005-02-08  Raja R Harinath  <rharinath@novell.com>
7156
7157         Fix #72015.
7158         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
7159         TypeManager.multicast_delegate_type is null, resolve it by looking
7160         up "System.MulticastDelegate".
7161         * rootcontext.cs (RootContext.ResolveCore): Simplify.
7162
7163 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
7164             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
7165             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
7166
7167         Fix cs0164.cs.
7168         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
7169         (LabeledStatement.AddReference): New.  Set 'referenced'.
7170         (Goto.Resolve): Use it.
7171
7172 2005-02-05  John Luke  <john.luke@gmail.com>
7173
7174         * driver.cs: remove duplicate -doc line in Usage ()
7175
7176 2005-02-04  Raja R Harinath  <rharinath@novell.com>
7177
7178         * location.cs (Location.AddFile): Fix CS2002 error report.
7179
7180 2005-02-02  Martin Baulig  <martin@ximian.com>
7181
7182         * delegate.cs (Delegate.DefineType): Report an internal error if
7183         TypeManager.multicast_delegate_type is null.  See bug #72015 for
7184         details.        
7185
7186 2005-02-02  Raja R Harinath  <rharinath@novell.com>
7187
7188         Fix a crasher in a variant of #31984.
7189         * const.cs (Constant.CheckBase): New override that defers the
7190         new-or-override check in case the base type hasn't been populated
7191         yet.
7192         (Constant.Define): Ensure the new-or-override check is performed.
7193
7194 2005-02-01  Duncan Mak  <duncan@ximian.com>
7195
7196         * const.cs (LookupConstantValue): Check that `ce' is not null
7197         before calling GetValue ().
7198
7199 2005-02-01  Raja R Harinath  <rharinath@novell.com>
7200
7201         Fix test-334.cs (#69519).
7202         * cs-parser.jay (using_alias_directive): Pass in an expression to
7203         NamespaceEntry.UsingAlias.
7204         (using_namespace_directive): Pass in an expression to
7205         NamespaceEntry.Using.
7206         (namespace_name): Don't flatten to a string.
7207         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
7208         (NamespaceEntry.AliasEntry.Resolve): Lookup using
7209         ResolveAsTypeStep.
7210         (NamespaceEntry.UsingEntry): Likewise.
7211         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
7212         changes.
7213         (NamespaceEntry.LookupForUsing): Remove.
7214         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
7215         names.
7216         (NamespaceEntry.Lookup): Remove support for dotted names.
7217
7218 2005-02-01  Raja R Harinath  <rharinath@novell.com>
7219
7220         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
7221         split into two.
7222         (NamespaceEntry.ImplicitParent): Compute on demand.
7223         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
7224         parallels the current.
7225         (NamespaceEntry.LookupForUsing): Use it.
7226         (NamespaceEntry.Lookup): If the current namespace-entry is
7227         implicit, don't search aliases and using tables.
7228
7229 2005-02-01  Raja R Harinath  <rharinath@novell.com>
7230
7231         Fix #31984.
7232         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
7233         BaseCache here.
7234         (TypeContainer.BaseCache): Compute on demand.
7235         (TypeContainer.FindMembers): Define constants and types if they're
7236         not already created.
7237         (FieldMember.Define): Move resetting of ec.InUnsafe before error
7238         check.
7239         * const.cs (Constant.Define): Make idempotent.
7240
7241 2005-01-29  Miguel de Icaza  <miguel@novell.com>
7242
7243         * pending.cs: Produce better code (no nops produced by using Ldarg
7244         + value).
7245         
7246         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
7247         i - 1' it should be arg + 1.
7248
7249         Fixes bug #71819.
7250
7251 2005-01-28  Raja R Harinath  <rharinath@novell.com>
7252
7253         * attribute.cs (Attribute.CheckAttributeType): Make private
7254         non-virtual.
7255         (Attribute.ResolveType): Make virtual.
7256         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
7257         handling of RootContext.Tree.Types.
7258
7259 2005-01-27  Raja R Harinath  <rharinath@novell.com>
7260
7261         Update attribute-handling to use the SimpleName/MemberAccess
7262         mechanisms.
7263         * cs-parser.jay (attribute): Pass in an expression to the
7264         constructors of Attribute and GlobalAttribute.
7265         * attribute.cs (Attribute): Take an expression for the name.
7266         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
7267         passed in attribute name expression.
7268         (Attribute.CheckAttributeType): Use it.
7269         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
7270         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
7271         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
7272         argument to prevent error messages if the lookup fails.
7273
7274 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
7275
7276         * expression.cs (Indirection): Implemented IVariable interface
7277         to support indirection in AddressOf operator.
7278         (PointerArithmetic.Emit): Add optimalization for case where
7279         result can be precomputed.
7280
7281 2005-01-26  Martin Baulig  <martin@ximian.com>
7282
7283         * class.cs (TypeContainer.AttributeTargets): Return the correct
7284         AttributeTargets depending on our `Kind' instead of throwing an
7285         exception; fixes #71632.
7286
7287 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
7288
7289         Fix #71257
7290         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
7291         constant members.
7292
7293 2005-03-17  Martin Baulig  <martin@ximian.com>
7294
7295         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
7296         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
7297
7298 2005-03-17  Martin Baulig  <martin@ximian.com>
7299
7300         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
7301         to bool so we can return an error condition.
7302         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
7303         returned an error.
7304
7305 2005-03-17  Martin Baulig  <martin@ximian.com>
7306
7307         * generic.cs (TypeMananager.IsIEnumerable): New public method.
7308
7309         * convert.cs (Convert.ImplicitReferenceConversion(Exists)): Allow
7310         converting from an array-type of T to `IEnumerable<T>'.
7311
7312 2005-03-16  Martin Baulig  <martin@ximian.com>
7313
7314         * generic.cs (Nullable.Unwrap): Implement IAssignMethod.
7315         (Nullable.LiftedUnaryMutator): New public class.
7316
7317         * expression.cs (UnaryMutator.DoResolve): Added support for
7318         Nullable Types.
7319
7320 2005-03-14  Martin Baulig  <martin@ximian.com>
7321
7322         * generic.cs (Nullable.NullCoalescingOperator): Implemented.
7323
7324 2005-03-14  Martin Baulig  <martin@ximian.com>
7325
7326         * generic.cs (Nullable.LiftedBinaryOperator): Added support for
7327         the comparision operators `<', `>', `<=' and `>='.
7328
7329 2005-03-13  Martin Baulig  <martin@ximian.com>
7330
7331         * generic.cs
7332         (Nullable.NullLiteral): Renamed to `Nullable.NullableLiteral' to
7333         avoid confusion with the `NullLiteral'.
7334         (Nullable.LiftedBinaryOperator): Correctly implement `==' and '!='.
7335
7336 2005-03-13  Martin Baulig  <martin@ximian.com>
7337
7338         * expression.cs (Binary.ResolveOperator): For `==' and `!=', allow
7339         comparing arbitrary types with the null literal.
7340
7341 2005-03-13  Martin Baulig  <martin@ximian.com>
7342
7343         * generic.cs (Nullable.LiftedBinaryOperator): Add support for the
7344         boolean operators '&&', '||', '&' and '|'.
7345         (Nullable.OperatorTrueOrFalse): New public class.
7346
7347         * ecore.cs (Expression.GetOperatorTrue/False): Return an `Expression'
7348         instead of a `StaticCallExpr'; added support for nullables.
7349
7350 2005-03-10  Martin Baulig  <martin@ximian.com>
7351
7352         * expression.cs
7353         (ArrayAccess.EmitDynamicInitializers): Use `etype.IsValueType'
7354         rather than `etype.IsSubclassOf (TypeManager.value_type)'.      
7355
7356 2005-03-07  Martin Baulig  <martin@ximian.com>
7357
7358         * generic.cs (Nullable.Unwrap): Implement IMemoryLocation and make
7359         it work if `expr' is not an IMemoryLocation.
7360         (Nullable.Lifted): Implement IMemoryLocation.
7361         (Nullable.LiftedConversion.ResolveUnderlying): Use the correct
7362         target type.
7363
7364 2005-03-05  Martin Baulig  <martin@ximian.com>
7365
7366         * generic.cs (Nullable.Unwrap, Wrap): New protected classes.
7367         (Nullable.Lifted): New abstract class; rewrote the lifted conversions.
7368         (Nullable): Added support for lifted unary and binary operators.
7369
7370         * expression.cs (Unary.DoResolve): Added support for nullable types.
7371         (Binary.DoResolve): Likewise.
7372         (Conditional.DoResolve): Likewise.
7373
7374 2005-03-02  Martin Baulig  <martin@ximian.com>
7375
7376         * decl.cs (DeclSpace.SetParameterInfo): Make this virtual.
7377
7378         * class.cs (ClassPart.SetParameterInfo): Override this.
7379         (PartialContainer.SetParameterInfo): Override this.
7380         (TypeContainer.CheckConstraints): New protected method.
7381         (PartialContainer.CheckConstraints): Override this and check
7382         whether the same contraints were specified in all parts of a
7383         partial generic type definition.
7384         (PartialContainer.UpdateConstraints): New public method.
7385
7386         * generic.cs (TypeParameter.UpdateConstraints): New public method.
7387
7388 2005-03-02  Martin Baulig  <martin@ximian.com>
7389
7390         Committing a patch from Carlos Alberto Cortez to fix #72887.
7391
7392         * convert.cs (Convert.ExplicitReferenceConversionExists): Allow
7393         casts from `T []' to `int []'.
7394
7395 2005-03-02  Martin Baulig  <martin@ximian.com>
7396
7397         * generic.cs (TypeManager.IsEqual): Make this symmetric.
7398
7399         * expression.cs (Binary.ResolveOperator): When resolving a
7400         BinaryDelegate, use `TypeManager.IsEqual (l, r)' rather than just
7401         `=='.  Fixes #71866.  See gen-127.cs.
7402
7403 2005-03-02  Martin Baulig  <martin@ximian.com>
7404
7405         * class.cs (TypeContainer.DoDefineMembers): We also need a default
7406         static constructor in static classes.
7407
7408 2005-03-02  Martin Baulig  <martin@ximian.com>
7409
7410         * generic.cs
7411         (NullableType.Name, NullableType.FullName): Add a "?" to the name.
7412         (Nullable.LiftedConversion): Added support for user-defined
7413         conversions.
7414
7415         * cs-tokenizer.cs (Tokenizer.PutbackCloseParens): New public method.
7416
7417         * cs-parser.jay: Use ComposedCast everywhere instead of
7418         NullableType, so we don't need to check for NullableType
7419         everywhere.
7420         (conditional_expression): Added `INTERR CLOSE_PARENS' rule for the
7421         case where we'll be resolved into a `parenthesized_expression_0'
7422         afterwards.
7423
7424         * convert.cs
7425         (Convert.UserDefinedConversion): Added nullable conversions.
7426
7427 2005-02-28  Martin Baulig  <martin@ximian.com>
7428
7429         * generic.cs (TypeManager.IsNullableType): New static method.
7430         (Nullable): New abstract class.
7431         (Nullable.NullLiteral): New public class.
7432         (Nullable.LiftedConversion): New public class.
7433
7434         * cs-parser.jay (non_expression_type): Changed `builtin_types' to
7435         `builtin_types opt_nullable'.
7436
7437         * convert.cs
7438         (Convert.ImplicitConversionStandard): Added nullable conversions.
7439         (Convert.ExplicitConversionStandard): Likewise.
7440         (Convert.ExplicitConversion): Likewise.
7441
7442 2005-02-26  Martin Baulig  <martin@ximian.com>
7443
7444         * expression.cs (ComposedCast.DoResolveAsTypeStep): Allow `dim' to
7445         begin with a "?", for instance "?[]".  Don't do a type lookup if
7446         `dim' is empty.
7447
7448 2005-02-25  Martin Baulig  <martin@ximian.com>
7449
7450         The first part of Nullable Types :-)
7451
7452         * generic.cs (NullableType): New public class.
7453         (NullCoalescingOperator): New public class.
7454         (TypeArguments.Resolve): Add a CS0306 check.
7455
7456         * cs-parser.jay (opt_error_modifier): Removed, this was unused.
7457         (opt_nullable): New rule.
7458         (type): Added `opt_nullable' to `namespace_or_type_name',
7459         `builtin_types' and `pointer_type'.
7460         (array_type): Added `opt_nullable'.
7461         (opt_rank_specifier_or_nullable): New rule; this is the
7462         combination of `opt_rank_specifier' and `opt_nullable'.
7463         (opt_error): New rule; catch errors here.
7464         (nullable_type_or_conditional): New rule; we use this to check for
7465         nullable and still detect the conditional operator.
7466         (local_variable_type): Use `opt_rank_specifier_or_nullable'
7467         instead `opt_rank_specifier'.
7468
7469         * expression.cs (ComposedCast.DoResolveAsTypeStep): Added support
7470         for nullables.
7471
7472 2005-02-24  Martin Baulig  <martin@ximian.com>
7473
7474         * README, README.Changes: Removed; they're old and obsolete.
7475
7476 2005-02-22  Martin Baulig  <martin@ximian.com>
7477
7478         * generic.cs (TypeParameter.Resolve): If resolving the constraints
7479         returned an error, set `constraints' to null to avoid a crash
7480         later on.
7481         (TypeParameter.ResolveType): Likewise.
7482
7483 2005-02-22  Martin Baulig  <martin@ximian.com>
7484
7485         * generic.cs
7486         (Constraints.ResolveTypes): Protect against being called twice.
7487         (Constraints.CheckInterfaceMethod): Don't call ResolveTypes().
7488         (TypeParameter.ResolveType): New public method; calls
7489         constraints.ResolveTypes().
7490         (TypeParameter.DefineType): Moved constraints.ResolveType() out
7491         into the new ResolveType().
7492         (GenericMethod.Define): Call ResolveType() on all our
7493         TypeParameter's.        
7494
7495 2005-02-21  Martin Baulig  <martin@ximian.com>
7496
7497         * generic.cs
7498         (TypeManager.generic_nullable_type): New static public field.
7499         (TypeManager.InitGenericCoreType): Lookup "System.Nullable`1".
7500
7501         * rootcontext.cs
7502         (RootContext.ResolveCore): Resolve "System.Nullable`1".
7503
7504 2005-02-15  Martin Baulig  <martin@ximian.com>
7505
7506         * generic.cs (ConstructedType.Constraints): Correctly check
7507         constraints if the argument type is a type parameter; fixes
7508         #72326. 
7509
7510 2005-02-02  Martin Baulig  <martin@ximian.com>
7511
7512         * delegate.cs (Delegate.DefineType): Report an internal error if
7513         TypeManager.multicast_delegate_type is null.  See bug #72015 for
7514         details.        
7515
7516 2005-01-29  Miguel de Icaza  <miguel@novell.com>
7517
7518         * pending.cs: Produce better code (no nops produced by using Ldarg
7519         + value).
7520         
7521         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
7522         i - 1' it should be arg + 1.
7523
7524         Fixes bug #71819.
7525         
7526 2005-01-26  Martin Baulig  <martin@ximian.com>
7527
7528         * cs-parser.jay (indexer_declarator): Don't report an error if we
7529         have type parameters since we can be an explicit interface
7530         implementation; fixes #71449.
7531
7532 2005-01-26  Martin Baulig  <martin@ximian.com>
7533
7534         * class.cs (TypeContainer.AttributeTargets): Return the correct
7535         AttributeTargets depending on our `Kind' instead of throwing an
7536         exception; fixes #71632.
7537
7538 2005-01-26  Martin Baulig  <martin@ximian.com>
7539
7540         * delegate.cs (Delegate.DefineType): Correctly define our type
7541         parameters.  Fixes #71483.
7542
7543 2005-01-25  Raja R Harinath  <rharinath@novell.com>
7544
7545         Fix #71602.
7546         * expression.cs (MemberAccess.DoResolve): Don't complain with
7547         cs0572 when the LHS of a member access has identical name and type
7548         name.
7549
7550 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
7551
7552         Fix #71651, #71675
7553         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
7554         CreatePermission.
7555         Create custom PermissionSet only for PermissionSetAttribute.
7556
7557 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
7558
7559         Fix #71649
7560         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
7561         delegates in static class.
7562
7563 2005-01-24  Martin Baulig  <martin@ximian.com>
7564
7565         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
7566         merging an implicit block, just use its reachability.
7567
7568         * statement.cs (Block.Resolve): Make the unreachable code check
7569         work wrt. implicit blocks; see test-337 from #63842.
7570
7571 2005-01-21  Alp Toker  <alp@atoker.com>
7572  
7573         * cs-parser.jay: destructor_declaration's container is PartialContainer
7574         not Class when partial types are used, so use Kind prop instead of
7575         'is'.
7576         
7577 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
7578
7579         * cs-parser.jay: Improve error reporting when an interface
7580         declares new types.
7581
7582 2005-01-20  Dick Porter  <dick@ximian.com>
7583
7584         * support.cs: SeekableStreamReader fix from Sandor Dobos
7585         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
7586         chars are read.  Fixes bug 70369.
7587
7588 2005-01-20  Raja R Harinath  <rharinath@novell.com>
7589
7590         * cs-parser.jay (catch_clause): Simplify current_block handling
7591         somewhat.
7592
7593 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
7594
7595         * convert.cs (ImplicitStandardConversionExists): Synchronize the
7596         code with ImplicitStandardConversion to handle the implicit
7597         conversion of method groups into valid delegate invocations. 
7598
7599         The problem is that in parameter handling we were using this code
7600         path.  Fixes bug #64698
7601
7602 2005-01-19  Raja R Harinath  <rharinath@novell.com>
7603
7604         * cs-parser.jay: Fix several infelicities.
7605         - Avoid assigning to the parser value stack.  Code like 
7606           '$3 = null' is unclean.  Synthesize a value for the code block
7607           instead. 
7608         - Avoid using oob_stack for storing location information.  Use ...
7609         (_mark_): ... this.  New (empty) rule.  Saves the current location
7610         in $$.
7611         (foreach_statement): Avoid using oob_stack for current_block
7612         handling.  Use technique used in for_statement and
7613         using_statement.  Synthesize a value for the code block to store
7614         additional intermediate information.
7615
7616 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
7617
7618         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
7619         of a different type is only allowed to private fields of a
7620         containing type, not on fields of a base class.
7621
7622         See test-174.cs and error cs0122-9.cs
7623
7624 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7625
7626         Fix test-335.cs (bug #58126).
7627         * cs-parser.jay (argument): Split out non-expression parts of the
7628         rule into 'non_simple_argument'.
7629         (invocation_expression): Support parenthesized invocations with
7630         multiple arguments, and with single non-simple arguments.
7631
7632 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7633
7634         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
7635         places.
7636
7637 2005-01-12  Raja R Harinath  <rharinath@novell.com>
7638
7639         Fix cs0038-1.cs, cs1640-6.cs.
7640         * ecore.cs (Expression.Resolve): Remove special-case for
7641         SimpleName in error-handling.
7642         (Expression.almostMatchedMembers): Relax access permission to
7643         protected.
7644         (Expression.MemberLookupFailed): Handle duplicates in
7645         almostMatchedMembers list.
7646         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
7647         * expression.cs (New.DoResolve): Report CS1540 for more cases.
7648         * typemanager.cs (GetFullNameSignature): Use the MethodBase
7649         overload if the passed in MemberInfo is a MethodBase.
7650
7651 2005-01-25  Martin Baulig  <martin@ximian.com>
7652
7653         * doc.cs
7654         (DocUtil.emptyParamList): Removed; use `Type.EmptyTypes' instead.
7655
7656 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
7657
7658         Fix #70749
7659         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
7660         for non-CAS & merge permission sets properly.
7661
7662 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7663
7664         Improve standard-compliance of simple name and member access 
7665         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
7666         * ecore.cs (FullNamedExpression): New abstract base class 
7667         for Namespaces and TypeExpressions.
7668         (ResolveFlags.SimpleName): Remove.
7669         (SimpleName): Remove support for dotted names.
7670         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
7671         DeclSpace.FindType and DeclSpace.LookupType.
7672         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
7673         (Expression.ExprClassName): Make member function.
7674         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
7675         a namespace.  Remove creation of dotted "SimpleName"s.
7676         (MemberAccess.DoResolve): Likewise.
7677         * decl.cs (DeclSpace.Cache): Make private.
7678         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
7679         (DeclSpace.FindType): Update.
7680         (DeclSpace.LookupType): Move here from RootContext.  Return a 
7681         FullNamedExpression.
7682         * namespace.cs (Namespace): Derive from FullNamedExpression
7683         so that it can be part of expression resolution.
7684         (Namespace.Lookup): Return an FullNamedExpression.
7685         (NamespaceEntry.LookupAlias): Lookup aliases only in current
7686         namespace.
7687         * rootcontext.cs (NamespaceLookup): Remove.
7688         (LookupType): Move to DeclSpace.
7689         * attribute.cs (CheckAttributeType): Update.
7690         * doc.cs (FindDocumentedType): Remove allowAlias argument.
7691         (FindDocumentedTypeNonArray): Likewise.
7692
7693 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7694
7695         Fix cs0509.cs, cs1632.cs.
7696         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
7697         is the same as IsInterface.
7698         (TypeContainer.GetClassBases): Likewise.
7699         * statement.cs (LabeledStatement.ig): New field.
7700         (LabeledStatement.LabelTarget): Save ILGenerator which created the
7701         label.
7702         (LabeledStatement.DoEmit): Check that the label was created with
7703         the same ILGenerator.
7704
7705 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7706
7707         Fix #71058
7708         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
7709         accessors to its properties.
7710
7711         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
7712         from accessors to property.
7713         
7714 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7715
7716         Fix #70722
7717         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
7718         only for overrides.
7719         
7720 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
7721
7722         * attribute.cs: Check for null and empty strings.  
7723
7724         I have lost another battle to Paolo.
7725
7726 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
7727
7728         Fix #70942
7729         * class.cs (PropertyMethod): Set Parent field in ctors.
7730         (SetMethod.InternalParameters): Add unsafe switch hack.
7731         Override MarkForDuplicationCheck where it is appropriate.
7732
7733         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
7734         It says whether container allows members with the same name.
7735         Base default is no.
7736         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
7737         Removed is_method parameter.
7738
7739 2005-01-06  Duncan Mak  <duncan@ximian.com>
7740
7741         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
7742         because the previous change led to incorrect reporting of CS1032
7743         ("Cannot define/undefine preprocessor symbols after first token in
7744         file"). Instead of using `tokens_seen' as the only flag that
7745         triggers CS1040, introduce `comments_seen'. This new flag is used
7746         to signify having seen comments on the current line, so it is
7747         unset after a newline.
7748
7749 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7750
7751         * doc.cs : When searching for a type, find nested type too.
7752           This fixes bug #71040.
7753
7754 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7755
7756         * doc.cs :
7757           - Warn missing member comment on those classes which also does not
7758             have doc comments. Fixed bug #71041.
7759           - Don't warn missing doc comment on default constructor.
7760             Fixed bug #71042.
7761
7762 2005-01-06  Duncan Mak  <duncan@ximian.com>
7763
7764         * cs-tokenizer.cs (xtoken): After handling traditional C-style
7765         comments, set `tokens_seen' to true. This allows us to detect
7766         misplaced preprocessor directives (i.e. not at the beginning of
7767         the a line, nor after whitespaces). In that case, report error
7768         CS1040. This fixes bug #56460.
7769
7770         * cs-parser.jay (interface_member_declaration): Add checks for
7771         IsExplicitImpl, and report CS0541 error if an interface member is
7772         defined as an explicit interface declaration.
7773
7774 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
7775
7776         Fix #70817
7777         * class.cs (PropertyMethod): Set Parent field in ctors.
7778         (SetMethod.InternalParameters): Add unsafe switch hack.
7779         
7780         * decl.cs (MemberCore.Parent): Cannot be readonly.
7781
7782 2005-01-06  Raja R Harinath  <rharinath@novell.com>
7783
7784         * decl.cs (DeclSpace.ResolveType): Remove.
7785         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
7786         Merge in code from ...
7787         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
7788         * class.cs, enum.cs: Update to changes.
7789
7790 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
7791
7792         * anonymous.cs: Ensure that we init the scope of our parent if it
7793         has not been initialized yet.
7794
7795 2004-12-30  Duncan Mak  <duncan@ximian.com>
7796
7797         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
7798         if field.FieldBuilder is null. Fixes #70758.
7799
7800         * convert.cs: Fixed some typos and updated some of the comments.
7801         (ImplicitStandardConversionExists):
7802         (TryImplicitIntConversion): If `target_type' is an interface and
7803         the type of `ic' implements this interface, return true or a new
7804         BoxedCast instead of null. This fixes #70468.
7805
7806 2004-12-29  Duncan Mak  <duncan@ximian.com>
7807
7808         * expression.cs (Argument.Emit): Check that Expr is
7809         IMemoryLocation before casting to it, and report CS1510 otherwise.
7810
7811         This fixes #70402.
7812
7813 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
7814
7815         * statement.cs (Block.ThisVariable): remove the recursion here, to
7816         make the --profile more sane.
7817
7818 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
7819
7820         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
7821         assembly, by JB Evain.
7822
7823 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7824
7825         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
7826           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
7827         "parent" refers to enclosing type/class.  "base" refers to superclass.
7828
7829 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7830
7831         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7832         Ensure that we only have GlobalAttributes.
7833         * attribute.cs (Attribute.Emit): Make non-virtual.
7834         (GlobalAttribute.Emit): Remove.
7835         (Attribute.Resolve): Make virtual.
7836         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
7837         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
7838         the argument. Don't create one.
7839         (Attribute.GetObsoleteAttribute): Likewise.
7840         (Attribute.GetClsCompliantAttributeValue): Likewise.
7841         * class.cs, decl.cs: Update to changes.
7842
7843 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
7844
7845         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
7846         
7847         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
7848         
7849         * statement.cs (Foreach.Resolve): Add error 186 report.
7850
7851 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
7852
7853         * expression.cs (Conditional.DoResolve): Add warning 429.
7854         
7855         * statement.cs (If.Resolve): Add warning 665.
7856
7857 2004-12-16  Raja R Harinath  <rharinath@novell.com>
7858
7859         New invariant: RootContext.Tree.Types.NamespaceEntry == null
7860         except when in the parser, and in GlobalAttribute.
7861         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
7862         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
7863         RootContext.Tree.Types.NamespaceEntry once work is done.
7864         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
7865         and resets RootContext.Tree.Types.NamespaceEntry.
7866
7867 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
7868
7869         * cs-parser.jay: Don't create a block for every variable.
7870
7871 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
7872
7873         * location.cs: Provide extra information.
7874
7875         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
7876         variables from the captured environment, it is the ldarg_0.
7877
7878 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7879
7880         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
7881         find a conclusion.
7882         
7883         * class.cs: Changed warning level for 169 to avoid developer
7884         displeasure from warning flooding. It will be changed back when they
7885         fix most of current BCL warnings.
7886         
7887         * RootContext.cs: Pushed default WarningLevel to 3.
7888         
7889         * statement.cs: Removed unused variable.
7890
7891 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7892
7893         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
7894         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
7895         Add error 502 report.
7896         (StaticClass.DefineType): Add error 441 report.
7897         (Class.AllowedModifiersProp): New virtual property as temporary
7898         extension to AllowedModifiers.
7899         (Class.DefineType): Add error 418 report. Moved ModFlags check here
7900         to share implementation with StaticClass and don't call virtual
7901         methods from ctor.
7902         
7903         * driver.cs (MainDriver): Add error 1558 test.
7904
7905         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
7906         report. Moved error 36 test here.
7907
7908         * statement.cs (Throw.Resolve): Add error 724 report.
7909
7910         * typemanager.cs: Add out_attribute_type core type.
7911         
7912 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
7913
7914         * class.cs (TypeContainer.VerifyClsCompliance): Add error
7915         3018 report.
7916         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
7917
7918         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
7919         3017 report.
7920         
7921         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
7922
7923         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
7924         Add error 3023 report.
7925         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
7926
7927         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
7928         implementation.
7929
7930 2004-12-12  John Luke  <john.luke@gmail.com>
7931
7932         * driver.cs (AddArgs): take -- into account when
7933         adding arguments, fixes bug 65710 
7934
7935 2004-12-12  Martin Baulig  <martin@ximian.com>
7936
7937         * expression.cs (Unary.TryReduceNegative): Added support for
7938         SByteConstant and ByteConstant.
7939         (Unary.Reduce): Check error values from TryReduceNegative().
7940
7941 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
7942
7943         * attributes.cs (Attribute.Resolve): Avoid multiple error report
7944         and report exception as error 182.
7945
7946 2004-12-10  Raja R Harinath  <rharinath@novell.com>
7947
7948         * driver.cs (Main): Fix message when there are warnings.
7949
7950 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
7951
7952         * delegate.cs: Fixed my fix from yesterday, sorry about that.
7953
7954 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
7955
7956         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
7957         Reduced number of warnings.
7958         
7959         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
7960
7961 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
7962
7963         * driver.cs: Removed message.
7964
7965         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
7966
7967 2004-12-08    <vargaz@freemail.hu>
7968
7969         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
7970
7971 2004-12-08  Martin Baulig  <martin@ximian.com>
7972
7973         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7974         instead of a CS3002 for properties and indexer.
7975
7976 2004-12-08  Martin Baulig  <martin@ximian.com>
7977
7978         * decl.cs (MemberName.ToString): Make this work again.
7979
7980 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
7981
7982         * attribute.cs (Resolve): Add error 591 detection.
7983
7984         * class.cs (FieldMember.Define): Add error 1547 detection.
7985         (Indexer.Define): Add error 620 detection.
7986         (Operator.Define): Add error 590 detection.
7987
7988         * ecore.cs: Missing argument for error 79.
7989
7990         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
7991         detection.
7992
7993 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
7994
7995         Fix #70106
7996         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
7997         only.
7998
7999 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
8000
8001         * cs-parser.jay : handle doc comments on implicit/explicit operators.
8002           Some operator comments were suppressed.
8003         * doc.cs : Implicit/explicit operator name in doc comments are like
8004           "op_Explicit(type)~returnType", so added suffix handling.
8005
8006 2005-01-21  Alp Toker  <alp@atoker.com>
8007
8008         * cs-parser.jay: destructor_declaration's container is PartialContainer
8009         not Class when partial types are used, so use Kind prop instead of 'is'.
8010
8011 2004-12-12  Martin Baulig  <martin@ximian.com>
8012
8013         * expression.cs (Unary.TryReduceNegative): Added support for
8014         SByteConstant and ByteConstant.
8015         (Unary.Reduce): Check error values from TryReduceNegative().
8016
8017 2004-12-11  Martin Baulig  <martin@ximian.com>
8018
8019         * support.cs (ReflectionParameters.ParameterName): If we have a
8020         `gpd', call `ParameterName' on it.
8021
8022         * parameter.cs (Parameter.GetParameterAttributes): New static method.
8023
8024         * pending.cs (PendingImplementation.DefineProxy): Call
8025         DefineParameter() for all of the MethodBuilder's arguments.
8026
8027 2004-12-09  Martin Baulig  <martin@ximian.com>
8028
8029         * doc.cs (DocUtil): Make this a static class.
8030
8031 2004-12-09  Martin Baulig  <martin@ximian.com>
8032
8033         * expression.cs (Invocation.InferType): Moved the type inference
8034         implementation into TypeManager.
8035
8036         * generics.cs (TypeManager): Moved the type inference
8037         implementation here.
8038
8039 2004-12-09  Martin Baulig  <martin@ximian.com>
8040
8041         * typemanager.cs (TypeManager): Make this a partial class.
8042
8043         * generics.cs
8044         (TypeManager): Move the generics part of `TypeManager' here.
8045
8046 2004-12-08  Martin Baulig  <martin@ximian.com>
8047
8048         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
8049         instead of a CS3002 for properties and indexer.  Added CS3024
8050         check for generic interfaces.
8051
8052         * attributes.cs (AttributeTester.AnalyzeTypeCompliance): Generic
8053         instances are not CLS-compliant.
8054
8055 2004-12-08  Martin Baulig  <martin@ximian.com>
8056
8057         * cs-parser.jay
8058         (void_pointer_expression): New rule for `void*', `void**' etc.
8059         (typeof_expression): Add `void_pointer_expression'; fixes #66846.       
8060
8061 2004-12-08  Martin Baulig  <martin@ximian.com>
8062
8063         * expression.cs (Invocation.InferType): Removed the hack for
8064         MethodCore.MayUnify().  
8065
8066         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Make
8067         this actually work.
8068
8069         * class.cs (MethodCore.MayUnify): Use
8070         TypeManager.MayBecomeEqualGenericTypes().       
8071
8072 2004-12-08  Martin Baulig  <martin@ximian.com>
8073
8074         * expression.cs (Is.DoResolve, As.DoResolve): If we're a type
8075         parameter, box it.  Fixes #69233.
8076
8077 2004-12-08  Martin Baulig  <martin@ximian.com>
8078
8079         * generic.cs (ConstructedType.CheckConstraints): Valuetypes always
8080         have the ctor constraint.  Fixes #68326.
8081
8082 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
8083
8084         * cs-parser.jay : interface comment was not consumed because of
8085           extra opt_semicolon before doc handling.
8086
8087 2004-12-03  Raja R Harinath  <rharinath@novell.com>
8088
8089         Fix test-327.cs, test-328.cs, and put in early infrastructure
8090         for eventually fixing #52697.
8091         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
8092         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
8093         from other methods.
8094         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
8095         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
8096         (VerifyUsing, error246): Update.
8097         * rootcontext.cs (RootContext.NamespaceLookup): Just use
8098         'NamespaceEntry.LookupNamespaceOrType'.
8099
8100 2004-12-07  Martin Baulig  <martin@ximian.com>
8101
8102         * driver.cs: Call it "BETA SOFTWARE" :-)
8103
8104 2004-12-06  Raja R Harinath  <rharinath@novell.com>
8105
8106         Fix crash on cs0657-17.cs.
8107         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
8108         Use RootContext.Tree.Types, not 'new RootTypes ()'.
8109         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
8110         the case where the NamespaceEntry gets overwritten.
8111
8112 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
8113
8114         Fixed #69195, #56821
8115         * ecore.cs (ResolveBoolean): Tiny refactoring.
8116
8117         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
8118         of right expression resolving when left is false constant and
8119         operator is LogicalAnd OR true constant and operator is LogicalOr.
8120
8121         * statement.cs (ResolveUnreachable): Always reports warning.
8122
8123 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
8124
8125         * class.cs: Distinguish between 1721 and 1722 (just a little help
8126         for the programmer).
8127
8128 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
8129
8130         * delegate.cs: Only allow this on new versions of the language. 
8131
8132 2004-12-02  Duncan Mak  <duncan@ximian.com>
8133
8134         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
8135         Expression class.
8136         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
8137         here as a static method. Take an additional bool out parameter
8138         `must_do_cs1540_check' for signaling to InstanceResolve.
8139         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
8140         member field from PropertyExpr class and made it an argument of
8141         the method instead.
8142         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
8143         check for MarshalByRefObject, and report CS0122 instead of CS1540.
8144         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
8145         and `remove_accessor' as well as InstanceResolve: report CS0122
8146         where applicable.
8147
8148         Fixes #70129.
8149
8150 2004-12-07  Martin Baulig  <martin@ximian.com>
8151
8152         * decl.cs (DeclSpace.AddToContainer): Report correct errors CS0694
8153         and CS0692 where appropriate.
8154
8155 2004-12-06  Martin Baulig  <martin@ximian.com>
8156
8157         * class.cs (MethodCore.MayUnify): Moved the CS0408 check here from
8158         IsDuplicateImplementation() and improved it.
8159
8160         * expression.cs (Invocation.InferTypeArguments): Added
8161         `Type[] inferred_class_types' argument (for MethodCore.MayUnify)
8162         and removed the "ref" modifier from `infered_types'.
8163
8164         * decl.cs (MemberName.ToString): Removed the exception.
8165
8166 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
8167
8168         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
8169           comments are allowed.
8170
8171 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
8172
8173         * delegate.cs: Add checks for subtypes in paramaters and return values
8174         in VerifyMethod () to add support for Covariance/Contravariance
8175         in delegates.
8176         
8177 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
8178
8179         * report.cs: Remove extra closing parenthesis.
8180
8181         * convert.cs (Error_CannotImplicitConversion): If the name of the
8182         types are the same, provide some extra information.
8183
8184 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
8185
8186         Fix bug #70102
8187         * attribute.cs (Resolve): Improved implementation of params
8188         attribute arguments.
8189
8190         * support.cs (ParameterData): Add HasParams to be faster.
8191
8192 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
8193
8194         all things are for /doc support:
8195
8196         * doc.cs: new file that supports XML documentation generation.
8197         * mcs.exe.sources: added doc.cs.
8198         * driver.cs:
8199           Handle /doc command line option.
8200           Report error 2006 instead of 5 for missing file name for /doc.
8201           Generate XML documentation when required, after type resolution.
8202         * cs-tokenizer.cs:
8203           Added support for picking up documentation (/// and /** ... */),
8204           including a new XmlCommentState enumeration.
8205         * cs-parser.jay:
8206           Added lines to fill Documentation element for field, constant,
8207           property, indexer, method, constructor, destructor, operator, event
8208           and class, struct, interface, delegate, enum.
8209           Added lines to warn incorrect comment.
8210         * rootcontext.cs :
8211           Added Documentation field (passed only when /doc was specified).
8212         * decl.cs:
8213           Added DocComment, DocCommentHeader, GenerateDocComment() and
8214           OnGenerateDocComment() and some supporting private members for
8215           /doc feature to MemberCore.
8216         * class.cs:
8217           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
8218         * delegate.cs:
8219           Added overriden DocCommentHeader.
8220         * enum.cs:
8221           Added overriden DocCommentHeader and GenerateDocComment().
8222
8223 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
8224
8225         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
8226         unwrapping the enumeration values, chain to
8227         DoConstantNumericPromotions again, so we can promote things to the
8228         fundamental types (takes care of enums that are bytes, sbytes).
8229
8230         Fixes bug #62054.
8231
8232 2004-12-01  Raja R Harinath  <rharinath@novell.com>
8233
8234         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
8235         Fix long-standing bug in type-lookup.  Use FindType instead of
8236         LookupType when ec.ResolvingTypeTree.
8237         (Attribute.ResolveType, Attribute.Resolve)
8238         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
8239         Update to changes.
8240         (Attributes.Search): Remove internal version.  Update.
8241         (Attributes.SearchMulti): Update.
8242         (Attributes.GetClsCompliantAttribute): Remove.
8243         (Attributes.GetIndexerNameAttribute): Remove.
8244         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
8245         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
8246         * class.cs (Indexer.Define): Likewise.
8247
8248 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
8249
8250         Fix bug #68790
8251         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
8252         MarshallByReference members access.
8253
8254         * expression.cs: Use CheckMarshallByRefAccess;
8255         Better error CS0197 message.
8256
8257         * report.cs: Print whole related error message.
8258
8259 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
8260
8261         * class (GetClassBases): Better error 60 report.
8262         (EventProperty): Disabled warning 67 detection.
8263
8264 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
8265
8266         Fix bug #60324
8267         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
8268
8269         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
8270         precise values.
8271
8272 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
8273
8274         Fix bug #49488
8275         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
8276
8277         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
8278
8279 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
8280
8281         * attribute.cs (Attribute.Resolve): Refine error reporting and
8282         report a cs0117 if the identifier does not exist, to distinguish
8283         from 0617 which is a miss-use of the actual identifier.
8284
8285         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
8286         between cs0070 and cs0079.
8287
8288         * class.cs (MemberBase.DoDefine): When reporting a wrong
8289         accessibility level, we use MethodCore to compare instead of
8290         Method (this was a regression in some refactoring effort).
8291
8292         So now we correctly report cs0056 again.
8293
8294         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
8295         testing the target_type (which was known to be object_type) and
8296         not the source type (which is anonymous_method).
8297
8298         Fixed reporting of error cs1660.
8299
8300         * expression.cs (UserCast.Source): Expose the underlying cast.
8301
8302         * statement.cs (Switch.SwitchGoverningType): Sort the list of
8303         allowed types to find a match to int32 first (most common).
8304
8305         In addition, it ignores any ImplicitUserConversions that did an
8306         internal implicit conversion (as the switch statement allows only
8307         one integral conversion to exist).
8308
8309         * class.cs (PartialContainer.Create): rename `name' to
8310         `member_name' for clarity.  Then replace the string calls with a
8311         call to MemberName.GetPartialName, as now using
8312         MemberName.ToString is an error (this is due to the side effects
8313         it had, that were fixed in the past).
8314
8315         This will restore the error reporting on a number of partial class
8316         errors that were missusing this (and getting an exception as a
8317         results, which is now just a plain textual warning, because
8318         yyparse debug output would crash otherwise).
8319
8320 2004-11-26  Raja R Harinath  <rharinath@novell.com>
8321
8322         * Makefile (PROGRAM_INSTALL_DIR): Remove.
8323
8324 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
8325
8326         * rootcontext.cs (LookupType): Make sure to cache lookups that
8327         don't give us a negative result. This saves about 5% of corlib
8328         compilation time.
8329
8330 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
8331
8332         * report.cs (AbstractMessage.Print): messages are sent to stderr
8333
8334         * class.cs (TypeContainer.GetClassBases): It is an error to have a
8335         non-interface in the list of interfaces (at this point, either
8336         parent was properly set, or a base class is being listed in the
8337         interfaces section).
8338
8339         This flags error 1722, and resolves the crash from bug 69259.
8340
8341 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
8342
8343         * statement.cs (Using.EmitExpressionFinally): make this work right
8344         for valuetypes. Fixes 69926.
8345
8346 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
8347
8348         * const.cs (Const.ChangeType): Cope with the "0 literal can be
8349         converted to an enum" here, before we try to change the underlying
8350         type.  This code exists, but it is a different code path than the
8351         one used while encoding constants.
8352
8353         (ImplicitReferenceConversionExists): In addition, resynchronized
8354         the code here, so it matches the same code in
8355         ImplicitReferenceConversionExists for the `from any class-type S
8356         to any interface-type T'.       
8357
8358 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
8359
8360         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
8361
8362 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
8363
8364         * cs-parser.jay: Use verbosity accordingly. 
8365
8366 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
8367
8368         * expression.cs (Unary.ResolveOperator): Do not report warning;
8369         AddressOf reads from variable.
8370         
8371         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
8372
8373 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
8374
8375         Fix bug #69462
8376
8377         * attribute.cs (Attributable): Removed CheckTargets.
8378         (Attributes.Emit): Explicit attribute targets are tested here.
8379
8380         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
8381         not enabled for interfaces.
8382
8383         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
8384         (GetAssemblyName): Ouch next bug there.
8385
8386 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
8387
8388         * expression.cs: Error 275 added.
8389         
8390 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
8391
8392         Fix bug #69177 (Implemented decimal constant support)
8393
8394         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
8395         (BinaryFold): Add DecimalConstant.
8396
8397         * const.cs (Define): Decimal constant 
8398         (is not constant.
8399         (ChangeType): Add decimal type handling.
8400         (LookupConstantValue): Don't set value for decimal type but
8401         emit DecimalConstantAttribute. Needed for constant optimization.
8402
8403         * constant.cs (ToDecimal): New method.
8404         (ConvertToDecimal): New method.
8405         (IntConstant): Implemented ConvertToDecimal.
8406         (DecimalConstant.Emit): Emit optimized version for decimals in
8407         int range.
8408
8409         * expression.cs (ResolveOperator): Changed order of constant
8410         reduction to work correctly with native types which have
8411         overloaded operators.
8412         (ResolveMemberAccess): Extract constant value from attribute
8413         for decimal type.
8414
8415         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
8416
8417         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
8418         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
8419         (ChangeType): Decimal is special.
8420         (TypeToCoreType): Add decimal type.
8421
8422 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
8423
8424         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
8425         decimal types.
8426
8427 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
8428
8429         * class.cs (EventField.ApplyAttributeBuilder): Fix error
8430         test cs1667-5.cs.
8431
8432 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
8433
8434         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
8435
8436         * pending.cs (PendingImplementation): Grab only interfaces.
8437
8438 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
8439
8440         * statement.cs (ForeachHelperMethods): Add location member and
8441         error 202 detection.
8442
8443 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
8444
8445         * expression.cs (DoResolveBase): Fixed wrong warning for out
8446         variables.
8447
8448 2004-12-04  Martin Baulig  <martin@ximian.com>
8449
8450         * convert.cs (Convert.TypeParameter_to_Null): Use the constraints
8451         to check whether the conversion is ok.
8452
8453         * typemanager.cs (TypeManager.GetTypeArguments): Just return
8454         `Type.EmptyTypes' if we're not a generic TypeContainer.
8455
8456 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
8457
8458         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
8459         old bug: when converting from the null literal to a pointer,
8460         return an EmptyCast, not the NullLiteral.
8461
8462         This fixes #69921, the recent null_type changes probably made this
8463         bug more prominent.
8464
8465 2004-12-03  Martin Baulig  <martin@ximian.com>
8466
8467         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
8468         method as our child, call AnonymousMethod.Compatible() on it.
8469
8470 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
8471
8472         * class.cs (FieldBase): Use an unused bit field from the field to
8473         encode the `has_offset' property from the FieldMember.  This saves
8474         a couple of Ks on bootstrap compilation.
8475
8476         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
8477         method as our child, return the AnonymousMethod resolved
8478         expression.
8479
8480         * expression.cs (New.DoResolve): Allow return values from
8481         NewDelegate to also include AnonymousMethods.
8482
8483         Fixes #70150.
8484
8485 2004-11-29  Raja R Harinath  <rharinath@novell.com>
8486
8487         * decl.cs (MemberCore.MemberName): Remove readonly to fix an error
8488         cs1648 report.
8489         * rootcontext.cs (ResolveCore::interfaces_first_stage): Add
8490         System.Runtime.InteropServices._Exception, since it's a base
8491         interface of the core type System.Exception in the net_2_0 profile.
8492
8493 2004-11-27  Martin Baulig  <martin@ximian.com>
8494
8495         * ecore.cs (Expression.StoreFromPtr): Use `stobj' for generic parameters.
8496
8497 2004-11-26  Raja R Harinath  <rharinath@novell.com>
8498
8499         * Makefile: Convert to use executable.make.
8500         * gmcs.exe.sources: New.
8501
8502 2004-11-25  Martin Baulig  <martin@ximian.com>
8503
8504         * expression.cs (Invocation.InferType): Added support for byref types.
8505
8506 2004-11-25  Martin Baulig  <martin@ximian.com>
8507
8508         * statement.cs (Foreach.FetchMethodMoveNext): Wrap `mi.ReturnType'
8509         in TypeManager.TypeToCoreType().
8510
8511 2004-11-25  Martin Baulig  <martin@ximian.com>
8512
8513         * iterators.cs (Iterator.DoDefineMembers): Override and lookup the
8514         "Dispose" method from the `current_type'.
8515         (Iterator.EmitMoveNext): Use the `dispose_method' we looked up in
8516         DoDefineMembers() instead of using the MethodBuilder; this is
8517         required for generic iterators.
8518
8519         * class.cs (TypeContainer.DoDefineMembers): Make this virtual.
8520
8521 2004-11-24  Martin Baulig  <martin@ximian.com>
8522
8523         * ecore.cs (Expression.LoadFromPtr): Use `ldobj' for generic parameters.
8524
8525 2004-11-20  Martin Baulig  <martin@ximian.com>
8526
8527         * expression.cs (Invocation.InferType): Correctly infer generic
8528         instances; see gen-103.cs.
8529         (Invocation.InferTypeArguments): If a generic method doesn't have
8530         any unbound type parameters, we don't need to infer anything.
8531
8532 2004-11-19  Raja R Harinath  <rharinath@novell.com>
8533
8534         * Makefile (gmcs.exe): Update to new location of bootstrap mcs.exe.
8535
8536 2004-11-17  Raja R Harinath  <rharinath@novell.com>
8537
8538         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
8539         (TypeHandle.GetMemberCache): New.
8540         (TypeHandle.TypeHandle): Update.
8541         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
8542         (TypeManager.LookupParentInterfacesCache):
8543         Rename from LookupInterfaceCache.  Optimize slightly.
8544         (TypeManager.MemberLookup_FindMembers): Update.
8545         * decl.cs (MemberCache.MemberCache): Set Container to null in the
8546         multi-type variant.
8547         (AddCacheContents): Rename from AddHashtable.
8548         * class.cs (TypeContainer.parent_container): Remove.
8549         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
8550         (TypeContainer.DoDefineMembers): Don't initialize it.
8551         Update to name changes.
8552         
8553 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
8554
8555         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
8556         that factors the code to check access modifiers on override.  
8557
8558         (PropertyBase): Use the code here.
8559
8560         Patch from Lluis S'anchez, fixes bug #69361.
8561
8562 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
8563
8564         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
8565         routine that is used to report the use of a captured variable
8566         whose address has been taken.
8567
8568         There are two checks: one when variables are being captured and
8569         the other check is when the address of a variable is taken. 
8570         
8571         (because an anonymous methods might be resolved before *or* after
8572         the address has been taken) and 
8573
8574         * expression.cs (Conditional.DoResolve): Remove the special
8575         casing that Martin added to trueExpr and falseExpr being both
8576         NullLiteral.  We get the right behavior now just by introducing
8577         the null_type into the compiler. 
8578
8579         * convert.cs (ExplicitConversion): Change the code to use
8580         null_type instead of testing `expr is NullLiteral'.
8581         (ImplicitConversionStandard): use null_type too.
8582         (ImplicitReferenceConversionExists): use null_type too.
8583         (ImplicitReferenceConversion): use null_type too.
8584
8585         * literal.cs: The type of `NullLiteral' is now null_type instead
8586         of object_type. 
8587         (Resolve): Set the type here.
8588
8589         * typemanager.cs: Introduce null_type.
8590
8591 2004-11-18  Martin Baulig  <martin@ximian.com>
8592
8593         * rootcontext.cs
8594         (RootContext.LookupType): Return a `Type', not a `TypeExpr'.
8595
8596 2004-11-18  Martin Baulig  <martin@ximian.com>
8597
8598         * ecore.cs (TypeExpr.DoResolveAsTypeStep): Make this protected.
8599
8600 2004-11-18  Martin Baulig  <martin@ximian.com>
8601
8602         * generic.cs (Constraints.Resolve): Take an `EmitContext' instead
8603         of a `DeclSpace'.  If one of our constraints is a `ConstructedType',
8604         call ResolveConstructedType() on it to resolve it without checking
8605         constraints.
8606         (Constraints.ResolveTypes): Check them here.
8607         (ConstructedType.DoResolveAsTypeStep): Fully resolve ourselves,
8608         but don't check constraints.
8609         (ConstructedType.ResolveAsTypeTerminal): Override this and also
8610         check constraints here.
8611         (ConstructedType.ResolveConstructedType): New public method.  This
8612         is called from DoResolveAsTypeStep() and Constraints.Resolve() to
8613         resolve ourselves without checking constraints.
8614
8615         * ecore.cs (Expression.ResolveAsTypeTerminal): Make this virtual.
8616
8617 2004-11-18  Martin Baulig  <martin@ximian.com>
8618
8619         * decl.cs
8620         (DeclSpace.CurrentType): Changed type from `TypeExpr' to `Type'.
8621
8622         * delegate.cs (Delegate.DefineType): Always create the EmitContext.
8623
8624 2004-11-18  Martin Baulig  <martin@ximian.com>
8625
8626         * ecore.cs (TypeExpr.ResolveType): Removed.
8627         (Expression.ResolveAsTypeTerminal): We always return a fully
8628         resolved `TypeExpr', so we can just access its `Type'.
8629
8630         * class.cs (TypeContainer.DefineType): Resolve `CurrentType' here.
8631
8632 2004-11-17  Martin Baulig  <martin@ximian.com>
8633
8634         * ecore.cs (IAlias.Type): Replaced with ResolveAsType() to make
8635         sure we don't return any unresolved TypeExpr's.
8636         (TypeAliasExpression): The .ctor now takes an `IAlias' instead of
8637         a `TypeExpr'.
8638         (Expression.ResolveAsTypeTerminal): Make sure `te.Type != null'.
8639
8640         * expression.cs (MemberAccess.ResolveAsTypeStep): Don't return any
8641         unresolved `ConstructedType's.
8642
8643 2004-11-17  Martin Baulig  <martin@ximian.com>
8644
8645         * ecore.cs (TypeExpr.ResolveType): Don't make this virtual.
8646
8647 2004-11-17  Martin Baulig  <martin@ximian.com>
8648
8649         * ecore.cs
8650         (Expression.ResolveAsTypeTerminal): Removed the `bool silent' argument.
8651
8652         * decl.cs (DeclSpace.ResolveType): Removed.
8653         (DeclSpace.ResolveTypeExpr): Removed the `bool silent' argument.
8654
8655 2004-11-17  Martin Baulig  <martin@ximian.com>
8656
8657         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
8658         direction, like FindMembers() does.  Fixes #69546, testcase is in
8659         test-315.cs.    
8660
8661 2004-11-16  Martin Baulig  <martin@ximian.com>
8662
8663         This is based on a patch from Marek Safar, see bug #69082.
8664         Fixes bugs #63705 and #67130.
8665
8666         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
8667         method; create a MemberCache for an interface type and cache the
8668         result.
8669
8670         * decl.cs (IMemberContainer.ParentContainer): Removed.
8671         (IMemberContainer.ParentCache): New property.
8672         (MemberCache.SetupCacheForInterface): Removed.
8673         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
8674         to create a cache for an interface's "parent".
8675
8676         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
8677         interfaces too.
8678
8679 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
8680
8681         * statement.cs: Avoid adding bools to a hashtable.
8682
8683 2004-11-15  Martin Baulig  <martin@ximian.com>
8684
8685         * decl.cs (MemberName.GetPartialName): Removed, use GetTypeName() instead.
8686
8687 2004-11-11  Martin Baulig  <martin@ximian.com>
8688
8689         * typemanager.cs (TypeManager.GetMethodName): New method.
8690
8691         * class.cs (MethodData.Define): Include the generic arity in the
8692         name of an explicit interface; also add it to the method name.
8693
8694         * pending.cs (PendingImplementation.InterfaceMethod): The method
8695         name now includes the generic arity.
8696
8697 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
8698
8699         * expression.cs (Invocation.OverloadResolve): Flag error if we are
8700         calling an unsafe method from a safe location.
8701
8702 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
8703
8704         Fix #69167
8705         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
8706
8707 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
8708
8709         * namespace.cs (VerifyUsing): use GetPartialName instead of
8710         ToString. 
8711
8712 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
8713
8714         * statement.cs (Return.Resolve): Fix regression in typo: if
8715         `in_exc', we have to request a NeedReturnLabel, this was a typo
8716         introduced in the anonymous method check-in.  Fixes #69131.
8717
8718         * Indexers were using the ShortName when defining themselves,
8719         causing a regression in the compiler bootstrap when applying the
8720         patch from 2004-11-02 (first part), now they use their full name
8721         and the bug is gone.
8722
8723 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
8724
8725         * driver.cs: Strip the path from the names of embedded resources. Fixes
8726         #68519.
8727
8728 2004-11-04  Raja R Harinath  <rharinath@novell.com>
8729
8730         Fix error message regression: cs0104-2.cs.
8731         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
8732         (AliasEntry.Resolve): Update.
8733         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
8734         'silent' flag.
8735         (RootContext.LookupType): Update.
8736
8737 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
8738
8739         * cs-parser.jay: Add support for handling accessor modifiers
8740         * class: Add support port accessor modifiers and error checking,
8741         define PropertyMethod.Define as virtual (not abstract anymore)
8742         * ecore.cs: Add checking for proeprties access with access modifiers
8743         * iterators.cs: Modify Accessor constructor call based in the modified
8744         constructor
8745 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
8746
8747         * expression.cs (StringConcat): Handle being called twice,
8748         as when we have a concat in a field init with more than two
8749         ctors in the class
8750
8751 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
8752
8753         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
8754         special case explicit implementations, we should always produce
8755         the .property or .event declaration.
8756         
8757         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
8758         since it will not return correct data if people use this
8759         unresolved in the presence of using statements (see test-313).
8760
8761         * class.cs (MethodData.Define): If we are an explicit interface
8762         implementation, set the method name to the full name of the
8763         interface plus the name of the method.  
8764
8765         Notice that using the method.MethodName.GetFullName() does not
8766         work, as it will only contain the name as declared on the source
8767         file (it can be a shorthand in the presence of using statements)
8768         and not the fully qualifed type name, for example:
8769
8770         using System;
8771
8772         class D : ICloneable {
8773                 object ICloneable.Clone ()  {
8774                 }
8775         }
8776
8777         Would produce a method called `ICloneable.Clone' instead of
8778         `System.ICloneable.Clone'.
8779
8780         * namespace.cs (Alias.Resolve): Use GetPartialName.
8781         
8782 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8783
8784         * cs-parser.jay: Add error 1055 report.
8785
8786 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
8787
8788         * assign.cs (Assign.DoResolve): Only do the transform of
8789         assignment into a New if the types are compatible, if not, fall
8790         through and let the implicit code deal with the errors and with
8791         the necessary conversions. 
8792
8793 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8794
8795         * cs-parser.jay: Add error 1031 report.
8796
8797         * cs-tokenizer.cs: Add location for error 1038.
8798
8799 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8800
8801         * cs-parser.jay: Add error 1016 report.
8802
8803 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8804
8805         * cs-parser.jay: Add errors 1575,1611 report.
8806
8807 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8808
8809         * cs-parser.jay: Add error 1001 report.
8810
8811 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8812
8813         Fix #68850
8814         * attribute.cs (GetMarshal): Add method argument for
8815         caller identification.
8816
8817         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
8818         agument for GetMarshal and RuntimeMissingSupport.
8819
8820 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8821
8822         * attribute.cs (ExtractSecurityPermissionSet): Removed
8823         TypeManager.code_access_permission_type.
8824
8825         * typemanager.cs: Removed TypeManager.code_access_permission_type.
8826
8827 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
8828
8829         * expression.cs (LocalVariableReference.DoResolveLValue): Check
8830         for obsolete use of a variable here.   Fixes regression on errors
8831         cs0619-25 and cs0619-26.
8832
8833 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
8834
8835         Fix #62358, implemented security attribute encoding.
8836
8837         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
8838         Tests permitted SecurityAction for assembly or other types.
8839         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
8840         data from SecurityPermissionAttribute to PermisionSet class.
8841
8842         * class.cs (ApplyAttributeBuilder): Added special handling
8843         for System.Security.Permissions.SecurityAttribute based types.
8844
8845         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
8846         special handling for System.Security.Permissions.SecurityAttribute
8847         based types.
8848
8849         * enum.cs (ApplyAttributeBuilder): Added special handling
8850         for System.Security.Permissions.SecurityAttribute based types.
8851
8852         * parameter.cs (ApplyAttributeBuilder): Added special handling
8853         for System.Security.Permissions.SecurityAttribute based types.
8854
8855         * rootcontext.cs: Next 2 core types.
8856
8857         * typemanager.cs (TypeManager.security_permission_attr_type):
8858         Built in type for the SecurityPermission Attribute.
8859         (code_access_permission_type): Build in type.
8860
8861 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
8862
8863         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
8864         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
8865         all of this information into
8866         EmitContext.EmitCapturedVariableInstance.
8867         
8868         * codegen.cs (EmitCapturedVariableInstance): move here the
8869         funcionality of emitting an ldarg.0 in the presence of a
8870         remapping.   This centralizes the instance emit code.
8871
8872         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
8873         then emit a load of this: it means that we have reached the
8874         topmost ScopeInfo: the one that contains the pointer to the
8875         instance of the class hosting the anonymous method.
8876
8877         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
8878         captures to the topmost CaptureContext.
8879
8880 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
8881
8882         * expression.cs (LocalVariableReference): Move the knowledge about
8883         the iterators into codegen's EmitCapturedVariableInstance.
8884
8885 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
8886
8887         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
8888         all code paths return a value from an anonymous method (it is the
8889         same as the 161 error, but for anonymous methods).
8890
8891 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
8892
8893         The introduction of anonymous methods in the compiler changed
8894         various ways of doing things in the compiler.  The most
8895         significant one is the hard split between the resolution phase
8896         and the emission phases of the compiler.
8897
8898         For instance, routines that referenced local variables no
8899         longer can safely create temporary variables during the
8900         resolution phase: they must do so from the emission phase,
8901         since the variable might have been "captured", hence access to
8902         it can not be done with the local-variable operations from the runtime.
8903         
8904         * statement.cs 
8905
8906         (Block.Flags): New flag `IsTopLevel' to indicate that this block
8907         is a toplevel block.
8908
8909         (ToplevelBlock): A new kind of Block, these are the blocks that
8910         are created by the parser for all toplevel method bodies.  These
8911         include methods, accessors and anonymous methods.
8912
8913         These contain some extra information not found in regular blocks:
8914         A pointer to an optional CaptureContext (for tracking captured
8915         local variables and parameters).  A pointer to the parent
8916         ToplevelBlock.
8917         
8918         (Return.Resolve): Catch missmatches when returning a value from an
8919         anonymous method (error 1662).
8920         Invoke NeedReturnLabel from the Resolve phase instead of the emit
8921         phase.
8922
8923         (Break.Resolve): ditto.
8924
8925         (SwitchLabel): instead of defining the labels during the
8926         resolution phase, we now turned the public ILLabel and ILLabelCode
8927         labels into methods called GetILLabelCode() and GetILLabel() that
8928         only define the label during the Emit phase.
8929
8930         (GotoCase): Track the SwitchLabel instead of the computed label
8931         (its contained therein).  Emit the code by using
8932         SwitchLabel.GetILLabelCode ().
8933
8934         (LocalInfo.Flags.Captured): A new flag has been introduce to track
8935         whether the Local has been captured or not.
8936
8937         (LocalInfo.IsCaptured): New property, used to tell whether the
8938         local has been captured.
8939         
8940         * anonymous.cs: Vastly updated to contain the anonymous method
8941         support.
8942
8943         The main classes here are: CaptureContext which tracks any
8944         captured information for a toplevel block and ScopeInfo used to
8945         track the activation frames for various local variables.   
8946
8947         Each toplevel block has an optional capture context associated
8948         with it.  When a method contains an anonymous method both the
8949         toplevel method and the anonymous method will create a capture
8950         context.   When variables or parameters are captured, they are
8951         recorded on the CaptureContext that owns them, for example:
8952
8953         void Demo () {
8954              int a;
8955              MyDelegate d = delegate {
8956                  a = 1;
8957              }
8958         }
8959
8960         Here `a' will be recorded as captured on the toplevel
8961         CapturedContext, the inner captured context will not have anything
8962         (it will only have data if local variables or parameters from it
8963         are captured in a nested anonymous method.
8964
8965         The ScopeInfo is used to track the activation frames for local
8966         variables, for example:
8967
8968         for (int i = 0; i < 10; i++)
8969                 for (int j = 0; j < 10; j++){
8970                    MyDelegate d = delegate {
8971                         call (i, j);
8972                    }
8973                 }
8974
8975         At runtime this captures a single captured variable `i', but it
8976         captures 10 different versions of the variable `j'.  The variable
8977         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
8978         recorded on a child.  
8979
8980         The toplevel ScopeInfo will also track information like the `this'
8981         pointer if instance variables were referenced (this is necessary
8982         as the anonymous method lives inside a nested class in the host
8983         type of the method). 
8984
8985         (AnonymousMethod): Expanded to track the Toplevel, implement
8986         `AnonymousMethod.Compatible' to tell whether an anonymous method
8987         can be converted to a target delegate type. 
8988
8989         The routine now also produces the anonymous method content
8990
8991         (AnonymousDelegate): A helper class that derives from
8992         DelegateCreation, this is used to generate the code necessary to
8993         produce the delegate for the anonymous method that was created. 
8994
8995         * assign.cs: API adjustments for new changes in
8996         Convert.ImplicitStandardConversionExists.
8997
8998         * class.cs: Adjustments to cope with the fact that now toplevel
8999         blocks are of type `ToplevelBlock'. 
9000
9001         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
9002         insteda of standard blocks.
9003
9004         Flag errors if params arguments are passed to anonymous methods.
9005
9006         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
9007         `CurrentAnonymousMethod' which points to the current Anonymous
9008         Method.  The variable points to the AnonymousMethod class that
9009         holds the code being compiled.  It is set in the new EmitContext
9010         created for the anonymous method.
9011
9012         (EmitContext.Phase): Introduce a variable and an enumeration to
9013         assist in enforcing some rules about when and where we are allowed
9014         to invoke certain methods (EmitContext.NeedsReturnLabel is the
9015         only one that enfonces this right now).
9016
9017         (EmitContext.HaveCaptureInfo): new helper method that returns
9018         whether we have a CapturedContext initialized.
9019
9020         (EmitContext.CaptureVariable): New method used to register that a
9021         LocalInfo must be flagged for capturing. 
9022
9023         (EmitContext.CapturedParameter): New method used to register that a
9024         parameters must be flagged for capturing. 
9025         
9026         (EmitContext.CapturedField): New method used to register that a
9027         field must be flagged for capturing. 
9028
9029         (EmitContext.HaveCapturedVariables,
9030         EmitContext.HaveCapturedFields): Return whether there are captured
9031         variables or fields. 
9032
9033         (EmitContext.EmitMethodHostInstance): This is used to emit the
9034         instance for the anonymous method.  The instance might be null
9035         (static methods), this (for anonymous methods that capture nothing
9036         and happen to live side-by-side with the current method body) or a
9037         more complicated expression if the method has a CaptureContext.
9038
9039         (EmitContext.EmitTopBlock): Routine that drives the emission of
9040         code: it will first resolve the top block, then emit any metadata
9041         and then emit the code.  The split is done so that we can extract
9042         any anonymous methods and flag any captured variables/parameters.
9043         
9044         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
9045         during this phase, the ILGenerator should not be used as labels
9046         and local variables declared here might not be accessible to any
9047         code that is part of an anonymous method.  
9048
9049         Exceptions to this include the temporary variables that are
9050         created by some statements internally for holding temporary
9051         variables. 
9052         
9053         (EmitContext.EmitMeta): New routine, in charge of emitting all the
9054         metadata for a cb
9055
9056         (EmitContext.TemporaryReturn): This method is typically called
9057         from the Emit phase, and its the only place where we allow the
9058         ReturnLabel to be defined other than the EmitMeta.  The reason is
9059         that otherwise we would have to duplicate a lot of logic in the
9060         Resolve phases of various methods that today is on the Emit
9061         phase. 
9062
9063         (EmitContext.NeedReturnLabel): This no longer creates the label,
9064         as the ILGenerator is not valid during the resolve phase.
9065
9066         (EmitContext.EmitThis): Extended the knowledge in this class to
9067         work in anonymous methods in addition to iterators. 
9068
9069         (EmitContext.EmitCapturedVariableInstance): This emits whatever
9070         code is necessary on the stack to access the instance to a local
9071         variable (the variable will be accessed as a field).
9072
9073         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
9074         EmitContext.EmitAddressOfParameter): Routines to support
9075         parameters (not completed at this point). 
9076         
9077         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
9078         will also remove the parameters.
9079
9080         * convert.cs (Convert): Define a `ConstantEC' which points to a
9081         null.  This is just to prefity some code that uses
9082         ImplicitStandardConversion code and do not have an EmitContext
9083         handy.
9084
9085         The idea is to flag explicitly that at that point in time, it is
9086         known that the conversion will not trigger the delegate checking
9087         code in implicit conversions (which requires a valid
9088         EmitContext). 
9089
9090         Everywhere: pass new EmitContext parameter since
9091         ImplicitStandardConversionExists now requires it to check for
9092         anonymous method conversions. 
9093
9094         (Convert.ImplicitStandardConversionExists): If the type of an
9095         expression is the anonymous_method_type, and the type is a
9096         delegate, we invoke the AnonymousMethod.Compatible method to check
9097         whether an implicit conversion is possible. 
9098
9099         (Convert.ImplicitConversionStandard): Only do implicit method
9100         group conversions if the language level is not ISO_1.
9101
9102         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
9103         MethodInfo for the Invoke method.  used by Delegate and
9104         AnonymousDelegate.
9105
9106         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
9107         method conversions if the target type is a delegate.
9108
9109         Removed extra debugging nops.
9110
9111         (LocalVariableReference): Turn the `local_info' into a public
9112         field. 
9113
9114         Add `prepared' field, the same hack used for FieldExprs to cope
9115         with composed assignments, as Local variables do not necessarily
9116         operate purely on the stack as they used to: they can be captured
9117         fields. 
9118
9119         Add `temp' for a temporary result, like fields.
9120
9121         Refactor DoResolve and DoResolveLValue into DoResolveBase.
9122
9123         It now copes with Local variables that are captured and emits the
9124         proper instance variable to load it from a field in the captured
9125         case. 
9126
9127         (ParameterReference.DoResolveBase): During the resolve phase,
9128         capture parameters if we are in an anonymous method.
9129
9130         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
9131         anonymous method, use the EmitContext helper routines to emit the
9132         parameter reference.
9133
9134         * iterators.cs: Set RemapToProxy to true/false during the
9135         EmitDispose class.
9136
9137         * parameters.cs (GetParameterByName): New helper method. 
9138
9139         * typemanager.cs (anonymous_method_type) a new type that
9140         represents an anonyous method.  This is always an internal type,
9141         used as a fencepost to test against the anonymous-methodness of an
9142         expression. 
9143         
9144 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
9145
9146         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
9147         561 report.
9148         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
9149
9150 2004-11-10  Martin Baulig  <martin@ximian.com>
9151
9152         * expression.cs (Invocation.BetterFunction): If two methods have
9153         equal parameter types, but only one of them is generic, the
9154         non-generic one wins.
9155         (New.DoResolve): Don't set `is_struct' to false if we're a generic
9156         instance; just use `Type.IsValueType' to determine whether
9157         something is a struct or not.
9158         (MemberAccess.DoResolveAsTypeStep): Don't modify the `args' field,
9159         so we can be called multiple times.
9160
9161 2004-11-10  Martin Baulig  <martin@ximian.com>
9162
9163         * generic.cs (TypeParameter.DefineConstraints): New public method.
9164         (TypeParameter.CheckAccessLevel): Override this and return true.
9165         (ConstructedType.ResolveType): Renamed to DoResolveType(), don't
9166         override ResolveType() anymore.
9167         (ConstructedType.DoResolveAsTypeStep): Call DoResolveType() here.
9168
9169 2004-11-10  Martin Baulig  <martin@ximian.com>
9170
9171         * rootcontext.cs (RootContext.LookupType): If we're a nested type,
9172         call DeclSpace.ResolveNestedType() on it.
9173
9174 2004-11-10  Martin Baulig  <martin@ximian.com>
9175
9176         * support.cs (ReflectionParameters.ParameterModifier): If `gpd' is
9177         non-null, call ParameterModifier() on it.
9178
9179 2004-11-10  Martin Baulig  <martin@ximian.com>
9180
9181         * iterators.cs
9182         (Iterators): Added `current_type' and `this_type' fields.
9183         (Iterators.DefineIterator): Create a new EmitContext and store it
9184         in `ec'; compute `this_type'.
9185
9186 2004-11-10  Martin Baulig  <martin@ximian.com>
9187
9188         * typemanager.cs
9189         (TypeManager.IsPrivateAccessible): New public method.
9190         (Closure.Filter): Use IsPrivateAccessible() instead of IsEqual().
9191
9192 2004-11-10  Martin Baulig  <martin@ximian.com>
9193
9194         * class.cs (TypeContainer.DefineType): Call
9195         TypeBuilder.DefineGenericParameters() before resolving the type
9196         parameters.
9197         (MethodData.parent_method): New protected field.
9198         (MethodData..ctor): Added `MethodInfo parent_method' argument.
9199         (MethodData.Define): Compute `parent_method'.
9200
9201         * decl.cs
9202         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
9203         (MemberCore.GetClsCompliantAttributeValue): Likewise.
9204         (DeclSpace.ec): New protected field; store the EmitContext here.
9205         (DeclSpace.EmitContext): New public property.
9206         (DeclSpace.ResolveType): Un-comment from the [Obsolte] attribute.
9207         (DeclSpace.ResolveNestedType): New public method.
9208         (DeclSpace.ResolveTypeExpr): Just call ResolveAsTypeTerminal() here.
9209         (DeclSpace.NestedAccessible): Added `Type tb' argument.
9210         (DeclSpace.FamilyAccessible): Likewise.
9211         (DeclSpace.FindType): Call ResolveNestedType() for nested types.
9212         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
9213         EmitContext.
9214
9215         * delegate.cs (Delegate.Define): Store the EmitContext in the `ec'
9216         field.
9217
9218         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
9219         (Enum.Emit): Don't create a new EmitContext.
9220
9221 2004-10-18  Martin Baulig  <martin@ximian.com>
9222
9223         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
9224         `Type' directly, but call ResolveType() on it.
9225         (Catch.Resolve): Likewise.
9226         (Foreach.Resolve): Likewise.
9227
9228 2004-10-18  Martin Baulig  <martin@ximian.com>
9229
9230         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
9231         `Type' directly, but call ResolveType() on it.
9232         (Probe.DoResolve): Likewise.
9233         (ArrayCreation.LookupType): Likewise.
9234         (TypeOf.DoResolve): Likewise.
9235         (SizeOf.DoResolve): Likewise.
9236
9237 2004-10-18  Raja R Harinath  <rharinath@novell.com>
9238
9239         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
9240         the ResolveType.
9241
9242 2004-10-17  John Luke  <john.luke@gmail.com>
9243
9244         * class.cs (Operator.GetSignatureForError): use CSharpName
9245
9246         * parameter.cs (Parameter.GetSignatureForError): Returns
9247         correct name even if was not defined.
9248
9249 2004-10-13  Raja R Harinath  <rharinath@novell.com>
9250
9251         Fix #65816.
9252         * class.cs (TypeContainer.EmitContext): New property.
9253         (DefineNestedTypes): Create an emitcontext for each part.
9254         (MethodCore.DoDefineParameters): Use container's emitcontext.
9255         Pass type array to InternalParameters.
9256         (MemberBase.DoDefine): Use container's emitcontext.
9257         (FieldMember.Define): Likewise.
9258         (Event.Define): Likewise.
9259         (SetMethod.GetParameterInfo): Change argument to EmitContext.
9260         Pass type array to InternalParameters.
9261         (SetIndexerMethod.GetParameterInfo): Likewise.
9262         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
9263         * delegate.cs (Define): Pass emitcontext to
9264         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
9265         array to InternalParameters.
9266         * expression.cs (ParameterReference.DoResolveBase): Pass
9267         emitcontext to GetParameterInfo.
9268         (ComposedCast.DoResolveAsTypeStep): Remove check on
9269         ec.ResolvingTypeTree.
9270         * parameter.cs (Parameter.Resolve): Change argument to
9271         EmitContext.  Use ResolveAsTypeTerminal.
9272         (Parameter.GetSignature): Change argument to EmitContext.
9273         (Parameters.ComputeSignature): Likewise.
9274         (Parameters.ComputeParameterTypes): Likewise.
9275         (Parameters.GetParameterInfo): Likewise.
9276         (Parameters.ComputeAndDefineParameterTypes): Likewise.
9277         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
9278         * support.cs (InternalParameters..ctor): Remove variant that takes
9279         a DeclSpace.
9280         * typemanager.cs (system_intptr_expr): New.
9281         (InitExpressionTypes): Initialize it.
9282
9283 2004-10-12  Chris Toshok  <toshok@ximian.com>
9284
9285         * cs-parser.jay: fix location for try_statement and catch_clause.
9286
9287 2004-10-18  Martin Baulig  <martin@ximian.com>
9288
9289         * class.cs (FieldMember.Define): Don't access the TypeExpr's
9290         `Type' directly, but call ResolveType() on it.
9291         (MemberBase.DoDefine): Likewise.
9292
9293         * expression.cs (New.DoResolve): Don't access the TypeExpr's
9294         `Type' directly, but call ResolveType() on it.
9295         (ComposedCast.DoResolveAsTypeStep): Likewise.
9296
9297         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
9298         `Type' directly, but call ResolveType() on it.
9299
9300 2004-10-17  John Luke  <john.luke@gmail.com>
9301
9302         * class.cs (Operator.GetSignatureForError): use CSharpName
9303
9304         * parameter.cs (Parameter.GetSignatureForError): Returns
9305         correct name even if was not defined.
9306
9307 2004-10-13  Raja R Harinath  <rharinath@novell.com>
9308
9309         Fix #65816.
9310         * class.cs (TypeContainer.EmitContext): New property.
9311         (DefineNestedTypes): Create an emitcontext for each part.
9312         (MethodCore.DoDefineParameters): Use container's emitcontext.
9313         Pass type array to InternalParameters.
9314         (MemberBase.DoDefine): Use container's emitcontext.
9315         (FieldMember.Define): Likewise.
9316         (Event.Define): Likewise.
9317         (SetMethod.GetParameterInfo): Change argument to EmitContext.
9318         Pass type array to InternalParameters.
9319         (SetIndexerMethod.GetParameterInfo): Likewise.
9320         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
9321         * delegate.cs (Define): Pass emitcontext to
9322         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
9323         array to InternalParameters.
9324         * expression.cs (ParameterReference.DoResolveBase): Pass
9325         emitcontext to GetParameterInfo.
9326         (ComposedCast.DoResolveAsTypeStep): Remove check on
9327         ec.ResolvingTypeTree.
9328         * parameter.cs (Parameter.Resolve): Change argument to
9329         EmitContext.  Use ResolveAsTypeTerminal.
9330         (Parameter.GetSignature): Change argument to EmitContext.
9331         (Parameters.ComputeSignature): Likewise.
9332         (Parameters.ComputeParameterTypes): Likewise.
9333         (Parameters.GetParameterInfo): Likewise.
9334         (Parameters.ComputeAndDefineParameterTypes): Likewise.
9335         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
9336         * support.cs (InternalParameters..ctor): Remove variant that takes
9337         a DeclSpace.
9338         * typemanager.cs (system_intptr_expr): New.
9339         (InitExpressionTypes): Initialize it.
9340
9341 2004-10-12  Chris Toshok  <toshok@ximian.com>
9342
9343         * cs-parser.jay: fix location for try_statement and catch_clause.
9344
9345 2004-10-07  Raja R Harinath  <rharinath@novell.com>
9346
9347         More DeclSpace.ResolveType avoidance.
9348         * decl.cs (MemberCore.InUnsafe): New property.
9349         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
9350         with newly created EmitContext.
9351         (FieldMember.Define): Likewise.
9352         * delegate.cs (Delegate.Define): Likewise.
9353         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
9354         only if normal name-lookup fails.
9355         (TypeExpr.DoResolve): Enable error-checking.
9356         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
9357         (SizeOf.DoResolve): Likewise.
9358         (ComposedCast.DoResolveAsTypeStep): Likewise.
9359         (StackAlloc.DoResolve): Likewise.
9360         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
9361         (Block.Unsafe): New property.
9362         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
9363         (Unsafe): Set 'unsafe' flag of contained block.
9364         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
9365         (Fixed.Resolve): Likewise.
9366         (Catch.Resolve): Likewise.
9367         (Using.ResolveLocalVariableDecls): Likewise.
9368         (Foreach.Resolve): Likewise.
9369
9370 2004-10-05  John Luke <john.luke@gmail.com>
9371
9372         * cs-parser.jay: add location to error CS0175
9373
9374 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
9375
9376         * ecore.cs (Expression.Constantity): Add support for turning null
9377         into a constant.
9378
9379         * const.cs (Const.Define): Allow constants to be reference types
9380         as long as the value is Null.
9381
9382 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
9383
9384         * namespace.cs (NamespaceEntry.Using): No matter which warning
9385         level is set, check if this namespace name has already been added.
9386
9387 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
9388
9389         * expression.cs: reftype [!=]= null should always use br[true,false].
9390         # 67410
9391
9392 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
9393
9394         Fix #67108
9395         * attribute.cs: Enum conversion moved to 
9396         GetAttributeArgumentExpression to be applied to the all
9397         expressions.
9398
9399 2004-10-01  Raja R Harinath  <rharinath@novell.com>
9400
9401         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
9402         * class.c (TypeContainer.DefineType): Flag error if
9403         base types aren't accessible due to access permissions.
9404         * decl.cs (DeclSpace.ResolveType): Move logic to
9405         Expression.ResolveAsTypeTerminal.
9406         (DeclSpace.ResolveTypeExpr): Thin layer over
9407         Expression.ResolveAsTypeTerminal.
9408         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
9409         Refactor code into NestedAccess.  Use it.
9410         (DeclSpace.NestedAccess): New.
9411         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
9412         argument to silence errors.  Check access permissions.
9413         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
9414         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
9415         (Cast.DoResolve): Likewise.
9416         (New.DoResolve): Likewise.
9417         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
9418         (TypeOf.DoResolve): Likewise.
9419
9420         * expression.cs (Invocation.BetterConversion): Return the Type of
9421         the better conversion.  Implement section 14.4.2.3 more faithfully.
9422         (Invocation.BetterFunction): Make boolean.  Make correspondence to
9423         section 14.4.2.2 explicit.
9424         (Invocation.OverloadResolve): Update.
9425         (Invocation): Remove is_base field.
9426         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
9427         (Invocation.Emit): Likewise.
9428
9429 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
9430
9431         * cs-parser.jay: Reverted 642 warning fix.
9432
9433 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9434
9435         Fix bug #66615
9436         * decl.cs (FindMemberWithSameName): Indexer can have more than
9437         1 argument.
9438
9439 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9440
9441         * expression.cs (LocalVariableReference.DoResolveLValue):
9442         Do not report warning 219 for out values.
9443         (EmptyExpression.Null): New member to avoid extra allocations.
9444
9445 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9446
9447         * cs-parser.jay: Fix wrong warning 642 report.
9448
9449         * cs-tokenizer.cs (CheckNextToken): New helper;
9450         Inspect next character if is same as expected.
9451
9452 2004-09-23  Martin Baulig  <martin@ximian.com>
9453
9454         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
9455         (Convert.ImplicitReferenceConversionExists): Likewise.
9456
9457 2004-11-09  Raja R Harinath  <rharinath@novell.com>
9458
9459         * Makefile (DISTFILES): Comment out a few missing files.
9460
9461 2004-10-29  Raja R Harinath  <rharinath@novell.com>
9462
9463         * Makefile (bootstrap_libs,bootstrap_libfiles): New.
9464         (bootstrap-libs): New target.  Invokes the net_2_0_bootstrap profile.
9465         (gmcs.exe): Invoke bootstrap-libs.
9466         (clean-local): Clean the net_2_0_bootstrap profile too.
9467         (PROGRAM_INSTALL_DIR): New.
9468         (install-local): Use it.
9469
9470 2004-10-13  Martin Baulig  <martin@ximian.com>
9471
9472         * generic.cs (TypeManager.InflatedConstraints): New nested class.
9473         (TypeParameter.DefineType): If we're a method type parameter and
9474         that method is overriding something, "inflate" its constraints.
9475
9476 2004-10-12  Martin Baulig  <martin@ximian.com>
9477
9478         * expression.cs (MemberAccess.DoResolve): If we're a SimpleName
9479         and have type arguments, create and resolve a ConstructedType.
9480
9481 2004-10-12  Martin Baulig  <martin@ximian.com>
9482
9483         * decl.cs (MemberCache.FindMemberToOverride): Use
9484         TypeManager.IsEqual() to compare the parameters and Type.Equals()
9485         to compare the invocationType.
9486
9487         * typemanager.cs (TypeManager.IsEqual): Added support for arrays.
9488         When comparing two type parameters, only do the signature-only
9489         comparision for method type parameters.
9490
9491 2004-10-11  Martin Baulig  <martin@ximian.com>
9492
9493         * report.cs: Don't make --fatal abort on warnings, we have
9494         -warnaserror for that.
9495
9496 2004-10-11  Martin Baulig  <martin@ximian.com>
9497
9498         * typemanager.cs
9499         (TypeManager.IsEqualGenericType): Removed, use IsEqual() instead.
9500         (TypeManager.IsEqual): Call ourself recursively instead of using
9501         Type.IsEqual(). 
9502
9503 2004-10-11  Martin Baulig  <martin@ximian.com>
9504
9505         * class.cs (TypeContainer.DefineType): Only call TypeParameter.Define()
9506         on our own type parameters, not on the ones we inherit from a containing
9507         class.
9508
9509         * expression.cs (Invocation.InferType): Use `==', not `Equals()' for
9510         the comparision.
9511
9512         * generic.cs (TypeParameter.Define): We may only be called once.
9513
9514         * pending.cs (Pending.InterfaceMethod): Call TypeManager.Real_IsEqual()
9515         instead of TypeManager.IsEqual().
9516
9517 2004-09-28  Martin Baulig  <martin@ximian.com>
9518
9519         * generic.cs
9520         (GenericConstraints.EffectiveBaseClass): New public property.
9521         (TypeParameter.GenericConstraints): New public property.
9522         (ConstructedType.CheckConstraints): Improved.
9523
9524         * convert.cs (Convert.TypeParam_EffectiveBaseType): New private method.
9525         (Convert.TypeParameterConversion): New private method; use this in
9526         ImplicitReferenceConversion() and ImplicitReferenceConversionExists()
9527         for all conversions related to type parameters.
9528
9529 2004-09-24  Martin Baulig  <martin@ximian.com>
9530
9531         * convert.cs (Convert.ImplicitReferenceConversion): Added implicit
9532         type parameter conversions for type parameters which are known to
9533         be reference types.
9534
9535 2004-09-24  Martin Baulig  <martin@ximian.com>
9536
9537         * generic.cs (GenericConstraints): Added `IsReferenceType' and
9538         `IsValueType' properties.
9539
9540         * support.cs (ReflectionConstraints): Use
9541         Type.GetGenericParameterConstraints() instead of the old hack.
9542
9543 2004-09-24  Martin Baulig  <martin@ximian.com>
9544
9545         * generic.cs (GenericConstraints): Moved here and made it an
9546         abstract class.
9547
9548         * support.cs (GenericConstraints): Moved to generic.cs.
9549
9550 2004-09-24  Martin Baulig  <martin@ximian.com>
9551
9552         * support.cs
9553         (ReflectionConstraints): Un-nested this class and made it public.
9554
9555         * typemanager.cs
9556         (TypeManager.GetTypeParameterConstraints): New public method.
9557         (TypeManager.HasConstructorConstraint): Use the attributes.
9558
9559 2004-09-24  Martin Baulig  <martin@ximian.com>
9560
9561         * support.cs (GenericConstraints): Replaced `HasConstructor',
9562         `IsReferenceType' and `IsValueType' with `Attributes'.
9563         (ReflectionParameters.ReflectionConstraints): Removed the Create()
9564         method and made the .ctor public.
9565
9566         * generic.cs (Constraints.Attributes): New public property.
9567         (Constraints): Renamed `HasConstructor' -> `HasConstructorConstraint',
9568         `IsReferenceType' -> `HasReferenceTypeConstraint' and
9569         `IsValueType' -> `HasValueTypeConstraint'.
9570
9571 2004-09-23  Martin Baulig  <martin@ximian.com>
9572
9573         * generic.cs (Constraints): Reflect latest runtime changes.
9574
9575 2004-09-23  Martin Baulig  <martin@ximian.com>
9576
9577         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
9578         (Convert.ImplicitReferenceConversionExists): Likewise.
9579
9580 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9581
9582         * class.cs (Operator.Define): Add error 448 and 559 report.
9583         
9584 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9585
9586         * class.cs (MemberBase.IsTypePermitted): New protected
9587         method for checking error CS0610.
9588
9589 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9590
9591         * class.cs (TypeContainer.HasExplicitLayout): New property
9592         Returns whether container has StructLayout attribute set Explicit.
9593         (FieldMember): New abstract class for consts and fields.
9594         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
9595         (Field): Reuse FieldMember.
9596
9597         * const.cs (Const): Reuse FieldMember.
9598
9599         * rootcontext.cs: EmitConstants call moved to class.
9600
9601 2004-09-22  Martin Baulig  <martin@ximian.com>
9602
9603         Marek and me just fixed one of our oldest bugs: #28562 :-)
9604
9605         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
9606
9607         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
9608         we're an EnumConstant, just return that.
9609         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
9610         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
9611         to get the value which'll actually be written into the attribute.
9612         However, we have to use GetValue() to access the attribute's value
9613         in the compiler.        
9614
9615 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9616
9617         * constant.cs (Constant.IsNegative): New abstract property
9618         IsNegative.
9619
9620         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
9621         (StackAlloc.DoResolve): Reused IsNegative.
9622
9623 2004-09-22  Martin Baulig  <martin@ximian.com>
9624
9625         * typemanager.cs (TypeManager.LookupGenericTypeContainer): New
9626         public method; like LookupTypeContainer, but also works for
9627         generic instances.
9628
9629         * report.cs (Report.SymbolRelatedToPreviousError): Use
9630         TypeManager.LookupGenericTypeContainer().       
9631
9632 2004-09-22  Martin Baulig  <martin@ximian.com>
9633
9634         Thanks to Peter Sestoft for this bug report.
9635
9636         * expression.cs (Conditional): If both the `trueExpr' and the
9637         `falseExpr' is a NullLiteral, return a NullLiteral.
9638
9639 2004-09-22  Martin Baulig  <martin@ximian.com>
9640
9641         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
9642         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
9643         for the "get_Current" call.
9644
9645 2004-09-21  Martin Baulig  <martin@ximian.com>
9646
9647         * convert.cs (Convert.ImplicitReferenceConversion): When
9648         converting to an interface type, first check whether we're
9649         converting from a reference type.
9650
9651 2004-09-14  Martin Baulig  <martin@ximian.com>
9652
9653         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
9654
9655 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
9656
9657         Fixed bug #61902
9658         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
9659         called and is obsolete then this member suppress message
9660         when call is inside next [Obsolete] method or type.
9661
9662         * expression.cs: Use TestObsoleteMethodUsage member.
9663
9664 2004-09-14  Martin Baulig  <martin@ximian.com>
9665
9666         * genericparser.cs: Removed.
9667
9668 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
9669
9670         * class.cs (MethodCore.CheckBase): Fix bug #65757.
9671
9672 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
9673
9674         * attribute.cs (Attribute.Resolve): Add error 653 report.
9675
9676         * class.cs (Class.ApplyAttributeBuilder): Add error 641
9677         report.
9678         (Method.ApplyAttributeBuilder): Add error 685 report.
9679         (Operator.Define): Add error 564 report.
9680
9681         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
9682
9683         * expression.cs (Invocation.DoResolve): Add error
9684         245 and 250 report.
9685
9686         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
9687         error 674 report.
9688
9689 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9690
9691         * class.cs (ConstructorInitializer.Resolve):
9692         Wrong error number (515->516).
9693
9694 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9695
9696         * class.cs (Indexer.Define): Add error 631 report.
9697
9698 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9699
9700         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
9701
9702 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9703
9704         * expression.cs (Probe.DoResolve): Add error CS0241 report.
9705
9706 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
9707
9708         * cs-parser.jay: Added error CS0241 report.
9709
9710 2004-09-10  Raja R Harinath  <rharinath@novell.com>
9711
9712         * cs-parser.jay (fixed_statement): Introduce a scope for the
9713         declaration in the 'fixed' statement.
9714
9715 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9716
9717         * cs-parser.jay: Added CS0230 error report.
9718
9719 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9720
9721         * cs-parser.jay: Added errors CS0231 and CS0257 report.
9722
9723 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9724
9725         * expression.cs (Argument.Resolve): Added error CS0192 and
9726         CS0199 report.
9727
9728 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9729
9730         C# 2.0 #pragma warning feature
9731
9732         * cs-tokenizer.cs (PreProcessPragma): New method; 
9733         Handles #pragma directive.
9734
9735         * report.cs (WarningRegions): New class; Support
9736         class for #pragma warning directive. It tests whether
9737         warning is enabled for a given line.
9738
9739 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
9740
9741         * const.cs: Add more descriptive error report, tahnks to
9742         Sebastien. 
9743
9744 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
9745
9746         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
9747
9748 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
9749
9750         * expression.cs: Apply patch from Ben: Remove dead code from
9751         ArrayCreation, and remove the TurnintoConstant call in const.cs,
9752         as that code just threw an exception anwyays.
9753
9754         * const.cs: Remove the call to the turnintoconstant, for details
9755         see bug: #63144
9756         
9757         * literal.cs: The type of the null-literal is the null type;  So
9758         we use a placeholder type (literal.cs:System.Null, defined here)
9759         for it.
9760
9761         * expression.cs (Conditional.DoResolve): Remove some old code that
9762         is no longer needed, conversions have been fixed.
9763
9764         (ArrayCreationExpression.DoResolve): Return false if we fail to
9765         resolve the inner expression.
9766
9767 2004-09-07  Raja R Harinath  <rharinath@novell.com>
9768
9769         Fix test-290.cs.
9770         * cs-parser.jay (delegate_declaration): Record a delegate
9771         declaration as a type declaration.
9772         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
9773
9774 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
9775
9776         * parameter.cs: Do not crash if the type can not be resolved. 
9777
9778         * expression.cs: Report errors with unsafe pointers, fixes #64896
9779
9780 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
9781
9782         * expression.cs: Pointer arith always needs to do a conv.i
9783         if the operand is a long. fix 65320
9784
9785 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9786
9787         Fixed cs0619-37.cs, cs0619-38.cs
9788
9789         * enum.cs (GetObsoleteAttribute): Removed.
9790
9791         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
9792         on Enum member is double staged. The first is tested member
9793         and then enum.
9794
9795 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9796
9797         Fixed #56986, #63631, #65231
9798
9799         * class.cs: (TypeContainer.AddToMemberContainer): New method,
9800         adds member to name container.
9801         (TypeContainer.AddToTypeContainer): New method, adds type to
9802         name container.
9803         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
9804         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
9805         AddOperator): Simplified by reusing AddToMemberContainer.
9806         (TypeContainer.UserDefinedStaticConstructor): Changed to property
9807         instead of field.
9808         (Method.CheckForDuplications): Fixed implementation to test all
9809         possibilities.
9810         (MemberBase): Detection whether member is explicit interface
9811         implementation is now in constructor.
9812         (MemberBase.UpdateMemberName): Handles IndexerName.
9813         (Accessor): Changed to keep also location information.
9814         (AbstractPropertyEventMethod): Is derived from MemberCore.
9815         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
9816         will be emited or not.
9817         (PropertyBase.AreAccessorsDuplicateImplementation):
9818         Tests whether accessors are not in collision with some method.
9819         (Operator): Is derived from MethodCore to simplify common
9820         operations.
9821
9822         * decl.cs (Flags.TestMethodDuplication): Test for duplication
9823         must be performed.
9824         (DeclSpace.AddToContainer): Adds the member to defined_names
9825         table. It tests for duplications and enclosing name conflicts.
9826
9827         * enum.cs (EnumMember): Clean up to reuse the base structures
9828
9829 2004-09-03  Martin Baulig  <martin@ximian.com>
9830
9831         Merged latest changes into gmcs.  Please keep this comment in
9832         here, it makes it easier for me to see what changed in MCS since
9833         the last time I merged.
9834
9835 2004-09-03  Martin Baulig  <martin@ximian.com>
9836
9837         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9838         into TypeContainer, to make partial classes work again.
9839
9840 2004-09-03  Martin Baulig  <martin@ximian.com>
9841
9842         * rootcontext.cs (RootContext.V2): Removed.
9843
9844 2004-03-23  Martin Baulig  <martin@ximian.com>
9845
9846         * expression.cs (Invocation.OverloadResolve): Added `bool
9847         may_fail' argument and use it instead of the Location.IsNull() hack.
9848
9849 2004-09-09  Martin Baulig  <martin@ximian.com>
9850
9851         * cs-parser.jay (namespace_declaration): Fixed CS0134 reporting.
9852
9853 2004-09-09  Martin Baulig  <martin@ximian.com>
9854
9855         * generic.cs (TypeParameter.DefineType): Added support for
9856         explicit interface methods.
9857
9858 2004-09-09  Martin Baulig  <martin@ximian.com>
9859
9860         * README.Changes: New document.  Started to list important changes
9861         between MCS and GMCS here.
9862
9863 2004-09-08  Martin Baulig  <martin@ximian.com>
9864
9865         * class.cs
9866         (TypeContainer.CheckRecursiveDefinition): New protected method.
9867         (TypeContainer.DefineType): Move the CS0146 check into
9868         CheckRecursiveDefinition().     
9869
9870 2004-09-06  Martin Baulig  <martin@ximian.com>
9871
9872         * generic.cs (ConstructedType.CheckConstraints): Allow builtin
9873         types for the constructor constraint.
9874
9875 2004-09-03  Martin Baulig  <martin@ximian.com>
9876
9877         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9878         into TypeContainer, to make partial classes work again.
9879
9880 2004-09-03  Martin Baulig  <martin@ximian.com>
9881
9882         * rootcontext.cs (RootContext.V2): Removed.
9883
9884 2004-03-23  Martin Baulig  <martin@ximian.com>
9885
9886         * expression.cs (Invocation.OverloadResolve): Added `bool
9887         may_fail' argument and use it instead of the Location.IsNull() hack.
9888
9889 2004-09-03  Martin Baulig  <martin@ximian.com>
9890
9891         Merged latest changes into gmcs.  Please keep this comment in
9892         here, it makes it easier for me to see what changed in MCS since
9893         the last time I merged.
9894
9895 2004-09-03  Raja R Harinath  <rharinath@novell.com>
9896
9897         Fix #61128.
9898         * expression.cs (BetterConversion): Don't allow either conversion 
9899         to be null.  Remove redundant implicit conversion test when 'q ==
9900         null' -- when this function is invoked, we already know that the
9901         implicit conversion exists.
9902         (BetterFunction): Assume that 'best' is non-null.  Remove
9903         redundant reimplementation of IsApplicable when 'best' is null.
9904         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
9905         number of arguments.
9906         (IsAncestralType): Extract from OverloadResolve.
9907         (OverloadResolve): Make robust to the MethodGroupExpr being
9908         unsorted.  Implement all the logic of Section 14.5.5.1, and
9909         support overloading of methods from multiple applicable types.
9910         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
9911
9912         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
9913         (RealError, Warning): Append type of report to related symbol.
9914
9915 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
9916
9917         * enum.cs: Fixed CLS-Compliance checks for enum members.
9918         Error tests cs3008-8.cs, cs3014-8.cs
9919
9920 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9921
9922         Fixed bug #62342, #63102
9923         * class.cs: ImplementIndexer uses member.IsExplicitImpl
9924         like ImplementMethod.
9925
9926 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9927
9928         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9929         Fixed bug #65170.
9930
9931 2004-09-02  Martin Baulig  <martin@ximian.com>
9932
9933         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9934         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9935         on the MethodBase.
9936
9937 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
9938
9939         C# 2.0 Static classes implemented
9940
9941         * class.cs (TypeContainer): instance_constructors,
9942         initialized_fields, initialized_static_fields,
9943         default_constructor, base_inteface_types are protected to be
9944         accessible from StaticClass.
9945         (TypeContainer.DefineDefaultConstructor): New virtual method
9946         for custom default constructor generating
9947         (StaticClass): New class to handle "Static classes" feature.
9948
9949         * cs-parser.jay: Handle static keyword on class like instance
9950         of StaticClass.
9951
9952         * driver.cs: Added "/langversion" command line switch with two
9953         options (iso-1, default).
9954
9955 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
9956
9957         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
9958
9959 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
9960
9961         * delegate.cs: Style.
9962
9963 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
9964
9965         * delegate.cs: Add seperate instance expr field for miguel.
9966
9967 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9968
9969         * PointerArithmetic (Resolve): make sure we are not doing
9970         pointer arith on void*. Also, make sure we are resolved
9971         by not setting eclass until resolve.
9972
9973         All callers: Make sure that PointerArithmetic gets resolved.
9974
9975 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9976
9977         * ArrayCreation (LookupType): If the type does not resolve 
9978         to an array, give an error.
9979
9980 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
9981
9982         * statement.cs (Try.Resolve): Fixed bug #64222
9983
9984 2004-08-27  Martin Baulig  <martin@ximian.com>
9985
9986         * class.cs
9987         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9988         crash here.     
9989
9990 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9991
9992         * ecore.cs (Constantify): Get underlying type via
9993         System.Enum.GetUnderlyingType to avoid StackOverflow on the
9994         Windows in special cases.
9995
9996 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9997
9998         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
9999         for obtaining also private methods.
10000         (GetRemoveMethod): Used GetRemoveMethod (true)
10001         for obtaining also private methods.
10002
10003 2004-09-02  Martin Baulig  <martin@ximian.com>
10004
10005         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
10006         TypeManager.GetArgumentTypes() rather than calling GetParameters()
10007         on the MethodBase.
10008
10009 2004-08-27  Martin Baulig  <martin@ximian.com>
10010
10011         * class.cs
10012         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
10013         crash here.     
10014
10015 2004-08-25  Martin Baulig  <martin@ximian.com>
10016
10017         * support.cs (ReflectionParameters..ctor): If this is a generic
10018         method, retrieve and store its type parameters.
10019         (InternalParameters..ctor): Added `TypeParameter[]' argument.
10020         (ReflectionParameters.GenericConstraints): The argument specifies
10021         the type parameter, not the method parameter.
10022         (InternalParameters.GenericConstraints): Likewise.
10023
10024         * generic.cs (TypeParameter.DefineType): Correctly handle
10025         constraints wrt. generic methods in interfaces and their
10026         implementations.        
10027
10028 2004-08-24  Martin Baulig  <martin@ximian.com>
10029
10030         * generic.cs (TypeParameter.IsSubclassOf): New public method.
10031         (Constraints.IsSubclassOf): New internal method.
10032
10033         * typemanager.cs (TypeManager.FindMembers): Added special support
10034         for GenericTypeParameterBuilder's.      
10035         (TypeManager.IsSubclassOf, IsFamilyAccessible): Added support for
10036         type parameters.
10037
10038 2004-08-24  Martin Baulig  <martin@ximian.com>
10039
10040         * typemanager.cs
10041         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
10042         this for accessibility checks.
10043         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
10044         IsNestedFamilyAccessible.
10045         (TypeManager.IsSubclassOf): New method, do what the name actually
10046         says.   
10047
10048 2004-08-24  Martin Baulig  <martin@ximian.com>
10049
10050         * expression.cs (MemberAccess.DoResolve): When resolving ourselves
10051         as a SimpleName, include the generic arity.
10052
10053 2004-08-24  Martin Baulig  <martin@ximian.com>
10054
10055         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
10056         MethodAttributes.HideBySig for operators.
10057
10058 2004-08-23  Martin Baulig  <martin@ximian.com>
10059
10060         Back to the old error reporting system :-)
10061
10062         * report.cs (Message): Removed.
10063         (Report.MessageData, ErrorData, WarningData): Removed.
10064         (Report.Error, Warning): Back to the old system.
10065
10066 2004-08-23  Martin Baulig  <martin@ximian.com>
10067
10068         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
10069
10070         * class.cs (TypeContainer.ParentContainer): New public virtual
10071         method; replaces the explicit interface implementation.
10072         (ClassPart.ParentContainer): Override.
10073
10074 2004-08-23  Martin Baulig  <martin@ximian.com>
10075
10076         * statement.cs (Switch): Added support for constant switches; see
10077         #59428 or test-285.cs.
10078
10079 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
10080
10081         Fixed bug #62740.
10082         * statement.cs (GetEnumeratorFilter): Removed useless
10083         logic because C# specs is strict. GetEnumerator must be
10084         public.
10085
10086 2004-08-22  Martin Baulig  <martin@ximian.com>
10087
10088         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
10089         a switch and may break, reset the barrier.  Fixes #59867.
10090
10091 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
10092
10093         CLS-Compliance speed up (~5% for corlib)
10094
10095         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
10096         New method. Tests container for CLS-Compliant names
10097
10098         * class.cs (TypeContainer.VerifyClsName): New method.
10099         Checks whether container name is CLS Compliant.
10100         (Constructor): Implements IMethodData.
10101
10102         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
10103         low-case table for CLS Compliance test.
10104         (MemberCache.VerifyClsParameterConflict): New method.
10105         Checks method parameters for CS3006 error.
10106
10107         * enum.cs (EnumMember): Is derived from MemberCore.
10108         (Enum.VerifyClsName): Optimized for better performance.
10109
10110 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
10111
10112         * report.cs: Renamed Error_T to Error and changed all
10113         references.
10114
10115 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
10116
10117         * class.cs (TypeContainer.IndexerArrayList): New inner class
10118         container for indexers.
10119         (TypeContainer.DefaultIndexerName): New constant for default
10120         indexer name. Replaced all "Item" with this constant.
10121         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
10122
10123         * typemanager.cs (TypeManager.default_member_ctor): Cache here
10124         DefaultMemberAttribute constructor.
10125
10126 2004-08-05  Martin Baulig  <martin@ximian.com>
10127
10128         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
10129         Fix bug #59429.
10130
10131 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
10132
10133         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
10134         multi platforms problem.
10135
10136         * compiler.csproj: Included shared files.
10137
10138 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
10139
10140         Fix bug 60333, 55971 in the more general way
10141         * attribute.cs (Attribute.GetAttributeArgumentExpression):
10142         Added arg_type argument for constant conversion.
10143         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
10144
10145 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
10146
10147         Fix bug #59760
10148         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
10149         OperatorArrayList, MethodCoreArrayList for typecontainer
10150         containers. Changed class member types to these new types.
10151         (MethodArrayList.DefineMembers): Added test for CS0659.
10152
10153 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
10154
10155         * cfold.cs: Synchronize the folding with the code in expression.cs
10156         Binary.DoNumericPromotions for uint operands.
10157
10158         * attribute.cs: Revert patch from Raja, it introduced a regression
10159         while building Blam-1.2.1 (hard to isolate a test case).
10160
10161 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
10162
10163         Fix for #55382
10164         * class.cs:
10165         (TypeContainer.Define): Renamed to DefineContainerMembers because of
10166         name collision.
10167         (MethodCore.parent_method): New member. The method we're overriding
10168         if this is an override method.
10169         (MethodCore.CheckBase): Moved from Method class and made common.
10170         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
10171         private.
10172         (MethodCore.CheckForDuplications): New abstract method. For custom
10173         member duplication search in a container
10174         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
10175         method and its return type.
10176         (Event.conflict_symbol): New member. Symbol with same name in the
10177         parent class.
10178
10179         * decl.cs:
10180         (MemberCache.FindMemberWithSameName): New method. The method
10181         is looking for conflict with inherited symbols.
10182
10183 2004-08-04  Martin Baulig  <martin@ximian.com>
10184
10185         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
10186
10187         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
10188
10189 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
10190
10191         * report.cs (Message): New enum for better error, warning reference in
10192         the code.
10193         (MessageData): New inner abstract class. It generally handles printing of
10194         error and warning messages.
10195         Removed unused Error, Warning, Message methods.
10196
10197 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
10198
10199         Fix for cs0592-8.cs test
10200         * attribute.cs
10201         (Attributable.ValidAttributeTargets): Made public.
10202         (Attribute.ExplicitTarget): New member for explicit target value.
10203         (Attribute.CheckTargets): Now we translate explicit attribute
10204         target to Target here.
10205
10206 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
10207
10208         * ecore.cs (MethodGroupExpr): new IsBase property.
10209
10210         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
10211
10212         * delegate.cs (DelegateCreation): store a MethodGroupExpr
10213         rather than an instance expr.
10214
10215         (DelegateCreation.Emit): Use the method group rather than
10216         the instance expression. Also, if you have base.Foo as the
10217         method for a delegate, make sure to emit ldftn, not ldftnvirt.
10218
10219         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
10220
10221         (NewDelegate.DoResolve): Only check for the existance of Invoke
10222         if the method is going to be needed. Use MethodGroupExpr.
10223
10224         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
10225
10226         * expression.cs: For pointer arith., make sure to use
10227         the size of the type, not the size of the pointer to
10228         the type.
10229
10230 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
10231
10232         Fix for #60722
10233         * class.cs (Class): Added error CS0502 test.
10234
10235 2004-08-03  John Luke  <jluke@cfl.rr.com>
10236             Raja R Harinath  <rharinath@novell.com>
10237
10238         Fix for #60997.
10239         * attribute.cs (Attribute.complained_before): New flag.
10240         (Attribute.ResolveType, Attribute.Resolve),
10241         (Attribute.DefinePInvokeMethod): Set it.
10242         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
10243         
10244 2004-08-03  Martin Baulig  <martin@ximian.com>
10245
10246         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
10247         use a user-defined operator; we still need to do numeric
10248         promotions in case one argument is a builtin type and the other
10249         one has an implicit conversion to that type.  Fixes #62322.
10250
10251 2004-08-18  Martin Baulig  <martin@ximian.com>
10252
10253         * class.cs (Method.Define): Use the correct method name when
10254         creating the MethodBuilder for a generic method.
10255
10256 2004-08-17  Martin Baulig  <martin@ximian.com>
10257
10258         * generic.cs (Constraints): Support type parameter constraints.
10259
10260 2004-08-16  Martin Baulig  <martin@ximian.com>
10261
10262         * cs-tokenizer.cs (Tokenizer.TypeOfParsing): New public property.
10263         (Token.GENERIC_DIMENSION): New token; this is returned if we
10264         encounter an unbound generic type in a typeof() expression.
10265
10266         * cs-parser.jay (opt_type_argument_list): Added GENERIC_DIMENSION;
10267         this token is only generated while parsing a typeof() expression.
10268         (typeof_expression): Removed the old unbound_type hack.
10269
10270         * generic.cs (TypeArguments.IsUnbound): New public property.
10271
10272         * decl.cs (MemberName): Added support for unbound types.
10273
10274 2004-08-14  Martin Baulig  <martin@ximian.com>
10275
10276         * typemanager.cs
10277         (TypeManager.IsEqualGenericInstance): New static method.
10278         (TypeManager.IsSubclassOrNestedChildOf, IsSubclassOf): This is
10279         just used to check accessibility, so follow the rules of 26.1.6.        
10280
10281         * expression.cs (MemberAccess.ResolveAsTypeStep): Return a
10282         ConstructedType instead of a TypeExpression if we have type arguments.
10283
10284         * cs-parser.jay (typeof_expression): Support unbound generic types.
10285
10286         * ecore.cs (UnboundTypeExpression): New public class.
10287
10288 2004-08-12  Martin Baulig  <martin@ximian.com>
10289
10290         * typemanager.cs (TypeManager.IsNestedChildOf): Use
10291         TypeManager.IsEqual() rather than `=='.
10292
10293         * decl.cs (DeclSpace.CheckAccessLevel): Use `tb.FullName' for
10294         generic instances as well.
10295
10296 2004-08-12  Martin Baulig  <martin@ximian.com>
10297
10298         * expression.cs (Invocation.InferType): We can only infer method
10299         type parameters.  Fixes #62647.
10300
10301 2004-08-11  Martin Baulig  <martin@ximian.com>
10302
10303         * class.cs (TypeContainer.DefineType): Create the TypeBuilder
10304         before resolving the base classes.
10305
10306 2004-08-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
10307
10308         * Makefile: install .mdb file too.
10309
10310 2004-08-05  Martin Baulig  <martin@ximian.com>
10311
10312         * ecore.cs (FieldExpr.DoResolveLValue): If we're resolving a field
10313         initializer, the current type is just the TypeBuilder, not the
10314         instantiated generic type.
10315         (FieldExpr.IsFieldInitializer): New public property.
10316
10317 2004-08-04  Martin Baulig  <martin@ximian.com>
10318
10319         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
10320
10321         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
10322
10323 2004-08-03  Martin Baulig  <martin@ximian.com>
10324
10325         * class.cs (MethodData.Define): If we're an explicit
10326         implementation, remove the generic arity from the type name.
10327
10328 2004-08-03  Martin Baulig  <martin@ximian.com>
10329
10330         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
10331         use a user-defined operator; we still need to do numeric
10332         promotions in case one argument is a builtin type and the other
10333         one has an implicit conversion to that type.  Fixes #62322.
10334
10335 2004-08-02  Martin Baulig  <martin@ximian.com>
10336
10337         * class.cs (TypeContainer.ifaces): Make this a `Type[]', not a
10338         `TypeExpr[]' array.
10339         (TypeContainer.GetClassBases): Return the unexpanded list of
10340         interfaces; we expand them later.
10341         (TypeContainer.DefineType): After creating the TypeBuilder, call
10342         TypeManager.ExpandInterfaces() to get an expanded and resolved
10343         list of interfaces.
10344
10345         * ecore.cs (TypeExpr.GetInterfaces): Removed
10346
10347         * generics.cs (Constraints.InterfaceConstraints): Remove.
10348         (TypeParameter.DefineType): Call TypeManager.RegisterBuilder() to
10349         register the interface constraints.
10350
10351         * typemanager.cs
10352         (TypeManager.AddUserType): Removed the `ifaces' argument.
10353         (TypeManager.AddTypeParameter): Likewise.
10354         (TypeManager.AddUserInterface): Removed, was unused.
10355         (TypeManager.RegisterBuilder): Take a `Type[]' instead of a
10356         `TypeExpr[]' array for the interfaces.
10357         (TypeManager.ExpandInterfaces): Call this after the TypeBuilder
10358         has been defined, returns a list of the resolved interfaces types.
10359         (TypeManager.GetInterfaces): Return a `Type[]', not a `TypeExpr[]'.
10360         (TypeManager.GetExplicitInterfaces): Likewise.  
10361
10362 2004-08-02  Martin Baulig  <martin@ximian.com>
10363
10364         * expression.cs (Invocation.EmitCall): If we're invoking a method
10365         on a type parameter, use the new `Constrained' prefix opcode.
10366
10367 2004-08-02  Martin Baulig  <martin@ximian.com>
10368
10369         * statement.cs (LocalInfo.Flags): Added `IsThis'.
10370         (LocalInfo.IsThis): New public property.
10371         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
10372
10373 2004-08-01  Martin Baulig  <martin@ximian.com>
10374
10375         * class.cs (TypeContainer.GetClassBases): Don't set the default
10376         here since we may get called from GetPartialBases().
10377         (TypeContainer.DefineType): If GetClassBases() didn't return a
10378         parent, use the default one.
10379
10380 2004-07-30  Martin Baulig  <martin@ximian.com>
10381
10382         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
10383
10384         * class.cs (SourceMethod): New public class, derive from the
10385         symbol writer's ISourceMethod.
10386         (Method): Use the new symbol writer API.
10387
10388         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
10389         as argument and use the new symbol writer.
10390
10391         * location.cs
10392         (SourceFile): Implement the symbol writer's ISourceFile.
10393         (Location.SymbolDocument): Removed.
10394         (Location.SourceFile): New public property.
10395
10396         * symbolwriter.cs: Use the new symbol writer API.
10397
10398 2004-07-30  Raja R Harinath  <rharinath@novell.com>
10399
10400         * Makefile (install-local): Remove.  Functionality moved to
10401         executable.make.
10402
10403 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
10404
10405         * Makefile: Install mcs.exe.config file together with mcs.exe.
10406         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
10407         correct runtime version.
10408         
10409 2004-07-25  Martin Baulig  <martin@ximian.com>
10410
10411         * class.cs
10412         (TypeContainer.RegisterOrder): Removed, this was unused.
10413         (TypeContainer, interface_order): Removed.
10414         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
10415         TypeContainer as argument since we can also be called with a
10416         `PartialContainer' for a partial class/struct/interface.
10417         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
10418         of checking whether we're an `Interface' - we could be a
10419         `PartialContainer'.
10420         (PartialContainer.Register): Override; call
10421         AddClass()/AddStruct()/AddInterface() on our parent.
10422
10423         * cs-parser.jay (interface_member_declaration): Add things to the
10424         `current_container', not the `current_class'.
10425
10426         * rootcontext.cs (RegisterOrder): The overloaded version which
10427         takes an `Interface' was unused, removed.
10428
10429         * typemanager.cs (TypeManager.LookupInterface): Return a
10430         `TypeContainer', not an `Interface'.
10431         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
10432         contain a `PartialContainer' for an interface, so check it's
10433         `Kind' to figure out what it is.
10434
10435 2004-07-25  Martin Baulig  <martin@ximian.com>
10436
10437         * class.cs (Class.DefaultTypeAttributes): New public constant.
10438         (Struct.DefaultTypeAttributes): Likewise.
10439         (Interface.DefaultTypeAttributes): Likewise.
10440         (PartialContainer.TypeAttr): Override this and add the
10441         DefaultTypeAttributes.
10442
10443 2004-07-25  Martin Baulig  <martin@ximian.com>
10444
10445         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
10446         we can just use the `Parent' field instead.
10447
10448 2004-07-25  Martin Baulig  <martin@ximian.com>
10449
10450         * class.cs (TypeContainer.Emit): Renamed to EmitType().
10451
10452 2004-07-25  Martin Baulig  <martin@ximian.com>
10453
10454         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
10455         our parts before defining any methods.
10456         (TypeContainer.VerifyImplements): Make this virtual.
10457         (ClassPart.VerifyImplements): Override and call VerifyImplements()
10458         on our PartialContainer.
10459
10460 2004-07-25  Martin Baulig  <martin@ximian.com>
10461
10462         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
10463
10464         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
10465         argument, we can just use the `Parent' field instead.
10466
10467         * class.cs
10468         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
10469         (MemberBase.DoDefine): Likewise.
10470
10471 2004-07-24  Martin Baulig  <martin@ximian.com>
10472
10473         * decl.cs (MemberCore.Parent): New public field.
10474         (DeclSpace.Parent): Moved to MemberCore.
10475
10476         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
10477         (MemberBase.ctor): Added TypeContainer argument, pass it to our
10478         parent's .ctor.
10479         (FieldBase, Field, Operator): Likewise.
10480         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
10481         (EventField, Event): Likewise.
10482
10483 2004-07-23  Martin Baulig  <martin@ximian.com>
10484
10485         * class.cs (PartialContainer): New public class.
10486         (ClassPart): New public class.
10487         (TypeContainer): Added support for partial classes.
10488         (TypeContainer.GetClassBases): Splitted some of the functionality
10489         out into GetNormalBases() and GetPartialBases().
10490
10491         * cs-tokenizer.cs (Token.PARTIAL): New token.
10492         (Tokenizer.consume_identifier): Added some hacks to recognize
10493         `partial', but only if it's immediately followed by `class',
10494         `struct' or `interface'.
10495
10496         * cs-parser.jay: Added support for partial clases.
10497
10498 2004-07-23  Martin Baulig  <martin@ximian.com>
10499
10500         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
10501         a `DeclSpace' and also made it readonly.
10502         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
10503         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
10504         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
10505
10506         * cs-parser.jay: Pass the `current_class', not the
10507         `current_container' (at the moment, this is still the same thing)
10508         to a new Method, Property, Event, Indexer or Constructor.
10509
10510 2004-07-23  Martin Baulig  <martin@ximian.com>
10511
10512         * cs-parser.jay (CSharpParser): Added a new `current_class' field
10513         and removed the `current_interface' one.
10514         (struct_declaration, class_declaration, interface_declaration):
10515         Set `current_class' to the newly created class/struct/interface;
10516         set their `Bases' and call Register() before parsing their body.
10517
10518 2004-07-23  Martin Baulig  <martin@ximian.com>
10519
10520         * class.cs (Kind): New public enum.
10521         (TypeContainer): Made this class abstract.
10522         (TypeContainer.Kind): New public readonly field.
10523         (TypeContainer.CheckDef): New public method; moved here from
10524         cs-parser.jay.
10525         (TypeContainer.Register): New public abstract method.
10526         (TypeContainer.GetPendingImplementations): New public abstract
10527         method.
10528         (TypeContainer.GetClassBases): Removed the `is_class' and
10529         `is_iface' parameters.
10530         (TypeContainer.DefineNestedTypes): Formerly known as
10531         DoDefineType().
10532         (ClassOrStruct): Made this class abstract.
10533
10534         * tree.cs (RootTypes): New public type. 
10535
10536 2004-07-20  Martin Baulig  <martin@ximian.com>
10537
10538         * tree.cs (Tree.RecordNamespace): Removed.
10539         (Tree.Namespaces): Removed.
10540
10541         * rootcontext.cs (RootContext.IsNamespace): Removed.
10542
10543         * cs-parser.jay (namespace_declaration): Just create a new
10544         NamespaceEntry here.
10545
10546 2004-07-21  Lluis Sanchez Gual  <lluis@novell.com>
10547
10548         * Makefile: Install gmcs.exe.config file together with gmcs.exe.
10549         * gmcs.exe.config: Renamed from mcs.exe.config. Added supportedRuntime
10550         entry to make sure it runs in the correct runtime version.
10551         
10552 2004-07-18  Martin Baulig  <martin@ximian.com>
10553
10554         * generic.cs (ConstructedType.CheckConstraints): Improved
10555         constraints checking.
10556
10557 2004-07-18  Martin Baulig  <martin@ximian.com>
10558
10559         * expression.cs (Invocation.BetterMethod): Call
10560         TypeManager.TypeToCoreType() on all types and removed my previous
10561         hack; we're already doig the right thing here.
10562
10563 2004-07-17  Martin Baulig  <martin@ximian.com>
10564
10565         * decl.cs (MemberName.MakeName): Create the "class`1" names here.
10566
10567 2004-07-16  Martin Baulig  <martin@ximian.com>
10568
10569         * iterators.cs: Added generics support.
10570
10571 2004-07-16  Martin Baulig  <martin@ximian.com>
10572
10573         * iterators.cs: Rewrote this.  We're now using one single Proxy
10574         class for both the IEnumerable and the IEnumerator interface and
10575         `Iterator' derives from Class so we can use the high-level API.
10576
10577         * class.cs (TypeContainer.AddIterator): New method.
10578         (TypeContainer.DoDefineType): New protected virtual method, which
10579         is called from DefineType().
10580         (TypeContainer.DoDefineMembers): Call DefineType() and
10581         DefineMembers() on all our iterators.
10582         (TypeContainer.Emit): Call Emit() on all our iterators.
10583         (TypeContainer.CloseType): Call CloseType() on all our iterators.
10584
10585         * codegen.cs (EmitContext.CurrentIterator): New public field.
10586
10587 2004-07-15  Martin Baulig  <martin@ximian.com>
10588
10589         * typemanager.cs
10590         (TypeManager.not_supported_exception_type): New type.   
10591
10592 2004-07-14  Martin Baulig  <martin@ximian.com>
10593
10594         * typemanager.cs
10595         (TypeManager.generic_ienumerable_type): New type.
10596         (TypeManager.generic_ienumerator_type): New type.
10597
10598         * rootcontext.cs
10599         (RootContext.interfaces_first_stage): Added
10600         "System.Collections.Generic.IEnumerator`1" and
10601         "System.Collections.Generic.IEnumerable`1".     
10602
10603 2004-07-14  Martin Baulig  <martin@ximian.com>
10604
10605         * iterators.cs: Use real error numbers.
10606
10607 2004-07-14  Martin Baulig  <martin@ximian.com>
10608
10609         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
10610         requires this to be a System.Collection.IEnumerable and not a
10611         class implementing that interface.
10612         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
10613
10614 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
10615
10616         * class.cs: Fixed previous fix, it broke some error tests.
10617
10618 2004-07-12  Martin Baulig  <martin@ximian.com>
10619
10620         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
10621         Fixes #61293.
10622
10623 2004-07-14  Martin Baulig  <martin@ximian.com>
10624
10625         * decl.cs, expression.cs, generic.cs: Use a backqoute (`) and not
10626         an exclamation mark (!) for the generic arity to reflect the
10627         latest spec changes; ie. use "System.Collections.Generic.IList`1".
10628
10629 2004-07-13  Martin Baulig  <martin@ximian.com>
10630
10631         * cs-tokenizer.cs (Tokenizer.parse_less_than): Allow array rank
10632         specifiers being part of a type argument.
10633
10634 2004-07-13  Martin Baulig  <martin@ximian.com>
10635
10636         * expression.cs (MemberAccess.ResolveAsTypeStep): Use the full `!'
10637         name for generic types.
10638
10639 2004-07-13  Martin Baulig  <martin@ximian.com>
10640
10641         * assign.cs (Assign.DoResolve): Moved the CS0131 check up a little
10642         bit to fix #60119.
10643
10644 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
10645
10646         * assign.cs (LocalTemporary): Add new argument: is_address,If
10647         `is_address' is true, then the value that we store is the address
10648         to the real value, and not the value itself.
10649         
10650         * ecore.cs (PropertyExpr): use the new local temporary
10651         stuff to allow us to handle X.Y += z (where X is a struct)
10652
10653 2004-07-08  Martin Baulig  <martin@ximian.com>
10654
10655         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
10656         not always return, just like we're doing in Using.Resolve().
10657
10658 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
10659
10660         * cs-parser.jay (fixed_statement): flag this as Pinned.
10661
10662 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
10663
10664         * typemanager.cs (TypeManager): Removed MakePinned method, this
10665         mechanism is replaced with the .NET 2.x compatible mechanism of
10666         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
10667
10668         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
10669         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
10670         `IsFixed' property which has a different meaning.
10671
10672 2004-07-02  Raja R Harinath  <rharinath@novell.com>
10673
10674         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
10675         visible from inside a nested class, not just the names of the
10676         immediately enclosing class.
10677         Fix for bug #60730.
10678
10679 2004-06-24  Raja R Harinath  <rharinath@novell.com>
10680
10681         * expression.cs (BetterConversion): Remove buggy special-case
10682         handling of "implicit constant expression conversions".  At this
10683         point, we already know that the conversion is possible -- we're
10684         only checking to see which is better.
10685
10686 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10687
10688         * cs-parser.jay: Added error CS0210 test.
10689
10690 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10691
10692         * cs-parser.jay: Added error CS0134 test.
10693
10694 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10695
10696         Fix bug #52507
10697         * cs-parser.jay: Added error CS0145 test.
10698
10699 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10700
10701         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
10702
10703 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
10704         
10705         * expression.cs (StackAlloc.Resolve): The argument may not
10706         be a constant; deal with this case.
10707         
10708 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
10709
10710         * attribute.cs (IndexerName_GetIndexerName): Renamed to
10711         GetIndexerAttributeValue.
10712         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
10713
10714         * class.cs (Indexer.Define): Added error tests for CS0415,
10715         CS0609.
10716
10717 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
10718
10719         * attribute.cs (Attribute.Resolve): Keep field code in sync with
10720         property code.
10721
10722 2004-06-23  Martin Baulig  <martin@ximian.com>
10723
10724         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
10725         neither return nor throw, reset the barrier as well.  Fixes #60457.
10726
10727 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
10728
10729         * class.cs : EventAttributes is now set to None by default.
10730           This fixes bug #60459.
10731
10732 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10733
10734         Fix bug #60219
10735         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10736         Don't throw exception but return null (it's sufficient now).
10737
10738 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10739
10740         * typemanager.cs (GetArgumentTypes): Faster implementation.
10741
10742 2004-06-18  Martin Baulig  <martin@ximian.com>
10743
10744         * attribute.cs (Attribute.Resolve): Check whether we're an
10745         EmptyCast which a Constant child.  Fixes #60333.
10746
10747 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
10748
10749         * statement.cs (EmitCollectionForeach): Account for the fact that
10750         not all valuetypes are in areas which we can take the address of.
10751         For these variables, we store to a temporary variable. Also, make
10752         sure that we dont emit a `callvirt' on a valuetype method.
10753
10754 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10755
10756         * expression.cs (StackAlloc.DoReSolve): Added test for
10757         negative parameter (CS0247).
10758
10759 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10760
10761         Fix bug #59792
10762         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
10763
10764 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10765
10766         Fix bug #59781
10767         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
10768         ulong.
10769
10770 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10771
10772         Fix bug #58254 & cs1555.cs, cs1556.cs
10773         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
10774
10775 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10776
10777         * cs-parser.jay: Added error CS1669 test for indexers.
10778
10779 2004-06-18  Martin Baulig  <martin@ximian.com>
10780
10781         * generics.cs (GenericMethod.ctor): Don't take an Attributes
10782         argument.  Fixes #60441.
10783
10784 2004-06-16  Ben Maurer  <bmaurer@ximian.com>
10785         * ecore.cs (MethodGroupExpr.Name): Revert Martin's patch.
10786         The name needs to have the actual name of the method in order
10787         for other tests (such as the one in OverloadResolve for Invoke
10788         on a delegate) to work. As well, it does not really help
10789         error reporting because the method group had multiple methods.
10790         * Makefile: Remove MCS_DEBUG, you can enable with the DEBUG_FLAGS.
10791         Make profiling work.
10792         
10793 2004-06-13  Martin Baulig  <martin@ximian.com>
10794
10795         * cs-parser.jay: Don't allow generic attributes.
10796
10797 2004-06-13  Martin Baulig  <martin@ximian.com>
10798
10799         * class.cs (MemberBase.DoDefineBase): New protected method.
10800         (MemberBase.DoDefine): Compute the `flags' in the new
10801         DoDefineBase() which must be called first.
10802         (Method.Define): Call DoDefineBase() first so we have the flags
10803         when defining the generic method.
10804
10805         * cs-parser.jay (interface_method_declaration): Support generic methods.
10806
10807 2004-06-13  Martin Baulig  <martin@ximian.com>
10808
10809         * decl.cs (TypeName): Removed.
10810         (MemberName): Removed TypeName and MemberNow; now we just have
10811         MemberName.
10812
10813         * cs-parser.jay: Don't distinguish between type arguments and type
10814         parameters in the grammar and simplified the rules a bit.  The
10815         reduce/reduce conflicts are now gone (except the one we inherited
10816         from mcs).
10817
10818 2004-06-11  Martin Baulig  <martin@ximian.com>
10819
10820         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
10821         call this twice: for params and varargs methods.
10822
10823 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10824
10825         * class.cs:
10826         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
10827
10828 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10829
10830         * attribute.cs (Attribute.GetValidTargets): Made public.
10831
10832         * class.cs: 
10833         (AbstractPropertyEventMethod): New class for better code sharing.
10834         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
10835         CS1667 report.
10836         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
10837
10838 2004-06-09  Martin Baulig  <martin@ximian.com>
10839
10840         * cs-parser.jay: Removed a reduce/reduce conflict.
10841
10842 2004-06-03  Martin Baulig  <martin@ximian.com>
10843
10844         * generic.cs (ConstructedType.GetMemberAccess): Renamed to
10845         GetSimpleName() and return a SimpleName.
10846
10847         * ecore.cs (SimpleName.Arguments): New public field.
10848         (SimpleName): Added overloaded ctor which takes an additional
10849         TypeArguments argument.
10850         (SimpleName.SimpleNameResolve): Added support for generic methods.
10851         (MethodGroupExpr.ResolveGeneric): New public method.  The code was
10852         formerly in MemberAccess.DoResolve(), but we also need it in
10853         SimpleNameResolve().
10854
10855         * expression.cs (MemberAccess.DoResolve): Use the new
10856         MethodGroupExpr.ResolveGeneric().       
10857
10858 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10859
10860         * decl.cs: If possible, use lookuptypedirect here. We can only do
10861         this if there is no `.' after the namespace. Avoids using
10862         LookupType, which does lots of slow processing.
10863         (FindNestedType) New method, does what it says :-).
10864         * namespace.cs: use LookupTypeDirect.
10865         * rootcontext.cs: use membercache, if possible.
10866         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10867
10868 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10869
10870         * expression.cs:
10871         According to the spec, 
10872
10873         In a member access of the form E.I, if E is a single identifier,
10874         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10875         field, property, localvariable, or parameter with the same type as
10876         the meaning of E as a type-name (§3.8), then both possible
10877         meanings of E are permitted.
10878
10879         We did not check that E as a simple-name had the same type as E as
10880         a type name.
10881
10882         This trivial check gives us 5-7% on bootstrap time.
10883
10884 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10885
10886         * expression.cs (Invocation.OverloadResolve): Avoid the
10887         use of hashtables and boxing here by allocating on demand.
10888
10889 2004-05-30  Martin Baulig  <martin@ximian.com>
10890
10891         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10892         we're doing a silent lookup.  Don't try to lookup nested types in
10893         TypeManager.object_type (thanks to Ben Maurer).
10894
10895 2004-05-30  Martin Baulig  <martin@ximian.com>
10896
10897         Committing a patch from Ben Maurer.
10898
10899         * rootcontext.cs (RootContext.LookupType): Cache negative results.
10900
10901 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10902
10903         * convert.cs: add a trivial cache for overload operator resolution.
10904
10905 2004-05-31  Marek Safar  <marek.safar@seznam.cz>
10906
10907         * attribute.cs
10908         (AttributeTester.GetObsoleteAttribute): Returns instance of
10909         ObsoleteAttribute when type is obsolete.
10910
10911         * class.cs
10912         (TypeContainer.VerifyObsoleteAttribute): Override.
10913         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
10914         (MethodCode.VerifyObsoleteAttribute): Override.
10915         (MemberBase.VerifyObsoleteAttribute): Override.
10916
10917         * decl.cs
10918         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
10919         and report proper error.
10920
10921         *delegate.cs
10922         (Delegate.VerifyObsoleteAttribute): Override.
10923
10924         * ecore.cs
10925         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
10926         and report proper error.
10927         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
10928
10929         * enum.cs
10930         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
10931         and enum member.
10932
10933         * expression.cs
10934         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
10935         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
10936         Added test for ObsoleteAttribute.
10937
10938         * statement.cs
10939         (Catch): Derived from Statement.
10940
10941 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10942
10943         * decl.cs: If possible, use lookuptypedirect here. We can only do
10944         this if there is no `.' after the namespace. Avoids using
10945         LookupType, which does lots of slow processing.
10946         (FindNestedType) New method, does what it says :-).
10947         * namespace.cs: use LookupTypeDirect.
10948         * rootcontext.cs: use membercache, if possible.
10949         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10950
10951 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10952
10953         * expression.cs:
10954         According to the spec, 
10955
10956         In a member access of the form E.I, if E is a single identifier,
10957         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10958         field, property, localvariable, or parameter with the same type as
10959         the meaning of E as a type-name (§3.8), then both possible
10960         meanings of E are permitted.
10961
10962         We did not check that E as a simple-name had the same type as E as
10963         a type name.
10964
10965         This trivial check gives us 5-7% on bootstrap time.
10966
10967 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10968
10969         Fixed bug #59071 & cs0160.cs
10970         * statement.cs (Try.Resolve): Check here whether order of catch
10971         clauses matches their dependencies.
10972
10973 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10974
10975         Fixed bug #58624
10976         * ecore.cs (SimpleName.SimpleNameResolve): Added test for
10977         unsafe type.
10978
10979 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10980
10981         * expression.cs (Invocation.OverloadResolve): Avoid the
10982         use of hashtables and boxing here by allocating on demand.
10983
10984 2004-05-30  Martin Baulig  <martin@ximian.com>
10985
10986         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10987         we're doing a silent lookup.  Don't try to lookup nested types in
10988         TypeManager.object_type (thanks to Ben Maurer).
10989
10990 2004-05-30  Martin Baulig  <martin@ximian.com>
10991
10992         Committing a patch from Ben Maurer.
10993
10994         * rootcontext.cs (RootContext.LookupType): Cache negative results.      
10995
10996 2004-05-29  Martin Baulig  <martin@ximian.com>
10997
10998         * class.cs (IMethodData.ShouldIgnore): New method.
10999
11000         * typemanager.cs (TypeManager.MethodFlags): Don't take a
11001         `Location' argument, we don't need it anywhere.  Use
11002         `IMethodData.ShouldIgnore ()' instead of
11003         `MethodData.GetMethodFlags ()'.
11004         (TypeManager.AddMethod): Removed.
11005         (TypeManager.AddMethod2): Renamed to AddMethod.
11006
11007 2004-05-29  Martin Baulig  <martin@ximian.com>
11008
11009         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
11010
11011         * convert.cs (Convert.ImplicitReferenceConversion): If we're
11012         converting from a class type S to an interface type and we already
11013         have an object on the stack, don't box it again.  Fixes #52578.
11014
11015 2004-05-29  Martin Baulig  <martin@ximian.com>
11016
11017         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
11018         Added support for `params' parameters.  Fixes #59267.
11019
11020 2004-05-29  Martin Baulig  <martin@ximian.com>
11021
11022         * literal.cs (NullPointer): Provide a private .ctor which sets
11023         `type' to TypeManager.object_type.  Fixes #59048.
11024
11025 2004-05-29  Martin Baulig  <martin@ximian.com>
11026
11027         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
11028         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
11029
11030         * ecore.cs (EventExpr.instance_expr): Make the field private.
11031
11032 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
11033
11034         Fixed bug #50080 & cs0214-2.cs
11035         * expression.cs (Cast.DoResolve): Check unsafe context here.
11036         
11037         * statement.cs (Resolve.DoResolve): Likewise.
11038
11039 2004-05-26  Martin Baulig  <martin@ximian.com>
11040
11041         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
11042
11043         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
11044         (RootContext.LookupType): Pass down the `silent' flag.
11045
11046 2004-05-25  Martin Baulig  <martin@ximian.com>
11047
11048         * expression.cs
11049         (MethodGroupExpr.IdenticalTypeName): New public property.
11050         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
11051         expression actually refers to a type.
11052
11053 2004-05-25  Martin Baulig  <martin@ximian.com>
11054
11055         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
11056         for #56176 and made it actually work.
11057
11058 2004-05-25  Martin Baulig  <martin@ximian.com>
11059
11060         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
11061         (FieldExpr, PropertyExpr): Override and implement
11062         CacheTemporaries.  Fixes #52279.
11063
11064 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
11065
11066         * location.cs: In the new compiler listing a file twice is a
11067         warning, not an error.
11068
11069 2004-05-24  Martin Baulig  <martin@ximian.com>
11070
11071         * enum.cs (Enum.DefineType): For the `BaseType' to be a
11072         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
11073
11074 2004-05-24  Martin Baulig  <martin@ximian.com>
11075
11076         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
11077         walking the `using' list.  Fixes #53921.
11078
11079 2004-05-24  Martin Baulig  <martin@ximian.com>
11080
11081         * const.cs (Const.LookupConstantValue): Added support for
11082         EmptyCast's; fixes #55251.
11083
11084 2004-05-24  Martin Baulig  <martin@ximian.com>
11085
11086         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
11087         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
11088         which does the CS0135 check.  The reason is that we first need to
11089         check whether the variable actually exists.
11090
11091 2004-05-24  Martin Baulig  <martin@ximian.com>
11092
11093         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
11094         than RootContext.LookupType() to find the explicit interface
11095         type.  Fixes #58584.
11096
11097 2004-05-24  Raja R Harinath  <rharinath@novell.com>
11098
11099         * Makefile: Simplify.  Use executable.make.
11100         * mcs.exe.sources: New file.  List of sources of mcs.exe.
11101
11102 2004-05-24  Anders Carlsson  <andersca@gnome.org>
11103
11104         * decl.cs:
11105         * enum.cs:
11106         Use the invariant culture when doing String.Compare for CLS case
11107         sensitivity.
11108         
11109 2004-05-23  Martin Baulig  <martin@ximian.com>
11110
11111         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
11112         don't have any dots.  Fixes #52622, added cs0246-8.cs.
11113
11114         * namespace.cs (NamespaceEntry.Lookup): Likewise.
11115
11116 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
11117
11118         * class.cs (MemberBase.Define): Reuse MemberType member for 
11119         resolved type. Other methods can use it too.
11120
11121 2004-05-23  Martin Baulig  <martin@ximian.com>
11122
11123         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
11124         the variable also exists in the current block (otherwise, we need
11125         to report a CS0103).  Fixes #58670.
11126
11127 2004-05-23  Martin Baulig  <martin@ximian.com>
11128
11129         * flowanalysis.cs (Reachability.Reachable): Compute this
11130         on-the-fly rather than storing it as a field.
11131
11132 2004-05-23  Martin Baulig  <martin@ximian.com>
11133
11134         * flowanalysis.cs (Reachability.And): Manually compute the
11135         resulting `barrier' from the reachability.      
11136        
11137 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
11138
11139         Fix bug #57835
11140         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
11141         instance of ObsoleteAttribute when symbol is obsolete.
11142
11143         * class.cs
11144         (IMethodData): Extended interface for ObsoleteAttribute support.
11145
11146 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
11147
11148         * attribute.cs: Fix bug #55970
11149
11150 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
11151
11152         Fix bug #52705
11153         * attribute.cs
11154         (GetObsoleteAttribute): New method. Creates the instance of
11155         ObsoleteAttribute.
11156         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
11157         ObsoleteAttribute when member is obsolete.
11158         (AttributeTester.Report_ObsoleteMessage): Common method for
11159         Obsolete error/warning reporting.
11160
11161         * class.cs
11162         (TypeContainer.base_classs_type): New member for storing parent type.
11163
11164         * decl.cs
11165         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
11166         for this MemberCore.
11167
11168 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
11169
11170         * attribute.cs, const.cs: Fix bug #58590
11171
11172 2004-05-21  Martin Baulig  <martin@ximian.com>
11173
11174         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
11175         out parameters if the end of the method is unreachable.  Fixes
11176         #58098. 
11177
11178 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
11179
11180         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
11181         Hari was right, why extra method.
11182
11183 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
11184
11185         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
11186
11187 2004-05-20  Martin Baulig  <martin@ximian.com>
11188
11189         * delegate.cs: Convert this file to Unix mode - like the original
11190         version in mcs is.
11191
11192 2004-05-20  Martin Baulig  <martin@ximian.com>
11193
11194         * attribute.cs: Convert this file to Unix mode - like the original
11195         version in mcs is.
11196
11197 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
11198
11199        Fix bug #58688 (MCS does not report error when the same attribute
11200        is assigned twice)
11201
11202        * attribute.cs (Attribute.Emit): Distinction between null and default.
11203
11204 2004-05-19  Raja R Harinath  <rharinath@novell.com>
11205
11206        * cs-parser.jay (attribute): Create a GlobalAttribute for the case
11207        of a top-level attribute without an attribute target.
11208        * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
11209        Make non-static.
11210        (Attribute.Conditional_GetConditionName), 
11211        (Attribute.Obsolete_GetObsoleteMessage): Update.
11212        (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
11213        part of ScanForIndexerName.
11214        (Attribute.CanIgnoreInvalidAttribute): New function.
11215        (Attribute.ScanForIndexerName): Move to ...
11216        (Attributes.ScanForIndexerName): ... here.
11217        (Attributes.Attrs): Rename from now-misnamed AttributeSections.
11218        (Attributes.Search): New internal variant that can choose not to
11219        complain if types aren't resolved.  The original signature now
11220        complains.
11221        (Attributes.GetClsCompliantAttribute): Use internal variant, with
11222        complaints suppressed.
11223        (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
11224        only if it not useful.
11225        (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
11226        top-level for attributes that are shared between the assembly
11227        and a top-level class.
11228        * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
11229        * class.cs: Update to reflect changes.
11230        (DefineIndexers): Fuse loops.
11231        * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
11232        a couple more variants of attribute names.
11233
11234 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
11235
11236         Fix bug #52585 (Implemented explicit attribute declaration)
11237
11238         * attribute.cs:
11239         (Attributable.ValidAttributeTargets): New abstract method. It gets
11240         list of valid attribute targets for explicit target declaration.
11241         (Attribute.Target): It holds target itself.
11242         (AttributeSection): Removed.
11243         (Attribute.CheckTargets): New method. It checks whether attribute
11244         target is valid for the current element.
11245
11246         * class.cs:
11247         (EventProperty): New class. For events that are declared like
11248         property (with add and remove accessors).
11249         (EventField): New class. For events that are declared like field.
11250         class.cs
11251
11252         * cs-parser.jay: Implemented explicit attribute target declaration.
11253
11254         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
11255         Override ValidAttributeTargets.
11256
11257         * parameter.cs:
11258         (ReturnParameter): Class for applying custom attributes on 
11259         the return type.
11260         (ParameterAtribute): New class. Class for applying custom
11261         attributes on the parameter type.
11262
11263 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
11264
11265         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
11266         definitions. 
11267
11268         (Method): Allow UNSAFE here.
11269
11270         * modifiers.cs: Support unsafe reporting.
11271
11272 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
11273
11274         * decl.cs: Fix bug #58478.
11275
11276 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11277
11278         * statement.cs: When checking for unreachable code on an EmptyStatement,
11279         set the location. Fixes bug #58488.
11280
11281 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
11282
11283         * driver.cs: Add -pkg handling.
11284
11285         From Gonzalo: UseShelLExecute=false
11286
11287 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
11288
11289         * attribute.cs:
11290         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
11291         for attribute.
11292         (Attribute.IsClsCompliaceRequired): Moved to base for better
11293         accesibility.
11294         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
11295         when attribute is AttributeUsageAttribute.
11296         (Attribute.GetValidTargets): Simplified.
11297         (Attribute.GetAttributeUsage): New method returns AttributeUsage
11298         attribute for this type.
11299         (Attribute.ApplyAttributes): Method renamed to Emit and make
11300         non-static.
11301         (GlobalAttributeSection): New class for special handling of global
11302         attributes (assembly, module).
11303         (AttributeSection.Emit): New method.
11304
11305         * class.cs: Implemented Attributable abstract methods.
11306         (MethodCore.LabelParameters): Moved to Parameter class.
11307         (Accessor): Is back simple class.
11308         (PropertyMethod): Implemented Attributable abstract class.
11309         (DelegateMethod): Implemented Attributable abstract class.
11310         (Event): New constructor for disctintion between normal Event
11311         and Event with accessors.
11312
11313         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
11314
11315         * codegen.cs, const.cs, decl.cs, delegate.cs:
11316         (CommonAssemblyModulClass): Implemented Attributable abstract class
11317         and simplified.
11318
11319         * enum.cs: Implement IAttributeSupport interface.
11320         (EnumMember): New class for emum members. Implemented Attributable
11321         abstract class
11322
11323         * parameter.cs:
11324         (ParameterBase): Is abstract.
11325         (ReturnParameter): New class for easier [return:] attribute handling.
11326
11327         * typemanager.cs: Removed builder_to_attr.
11328
11329 2004-05-11  Raja R Harinath  <rharinath@novell.com>
11330
11331         Fix bug #57151.
11332         * attribute.cs (Attribute.GetPositionalValue): New function.
11333         * class.cs (TypeContainer.VerifyMembers): New function.
11334         (TypeContainer.Emit): Use it.
11335         (ClassOrStruct): New base class for Class and Struct.
11336         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
11337         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
11338         class.
11339         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
11340         then each non-static field should have a FieldOffset attribute.
11341         Otherwise, none of the fields should have a FieldOffset attribute.
11342         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
11343         and FieldOffset attributes.
11344         * typemanager.cs (TypeManager.struct_layout_attribute_type)
11345         (TypeManager.field_offset_attribute_type): New core types.
11346         (TypeManager.InitCoreTypes): Initialize them.
11347
11348 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
11349
11350         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
11351         Return correct type.
11352         From bug #58270.
11353
11354 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
11355
11356         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
11357         be implicitly converted to ulong.
11358         
11359         * expression.cs: The logic for allowing operator &, | and ^ worked
11360         was wrong, it worked before because we did not report an error in
11361         an else branch.  Fixes 57895.
11362
11363         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
11364         allow volatile fields to be reference types.
11365
11366 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
11367
11368         * driver.cs: Add support for /debug-
11369
11370 2004-05-07  Raja R Harinath  <rharinath@novell.com>
11371
11372         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
11373         Add a 'complain' parameter to silence errors.
11374         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
11375         silently overlooked type-resolutions.
11376         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
11377         to reflect changes.
11378         (Attributes.Search): New function.
11379         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
11380         (Attributes.GetAttributeFullName): Remove hack.
11381         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
11382         Update to reflect changes.
11383         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
11384         Use Attributes.Search instead of nested loops.
11385
11386 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
11387
11388         * decl.cs:
11389         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
11390         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
11391         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
11392
11393         * report.cs: (Report.Warning): Renamed to Warning_T because of
11394         parameter collision.
11395
11396 2004-05-05  Raja R Harinath  <rharinath@novell.com>
11397
11398         * expression.cs (MemberAccess.ResolveMemberAccess):
11399         Exit with non-zero status after Report.Error.
11400         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
11401         Likewise.
11402         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
11403
11404 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
11405
11406         * support.cs: Don't hang when the file is empty.
11407
11408 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
11409
11410         * support.cs: In SeekableStreamReader, compute the preamble size of the
11411           underlying stream. Position changes should take into account that initial
11412           count of bytes.
11413
11414 2004-05-03  Todd Berman  <tberman@sevenl.net>
11415
11416         * driver.cs: remove unused GetSysVersion function.
11417
11418 2004-05-03  Todd Berman  <tberman@sevenl.net>
11419
11420         * driver.cs: Remove the hack from saturday, as well as the hack
11421         from jackson (LoadAssemblyFromGac), also adds the CWD to the
11422         link_paths to get that bit proper.
11423
11424 2004-05-01  Todd Berman  <tberman@sevenl.net>
11425
11426         * driver.cs: Try a LoadFrom before a Load, this checks the current
11427         path. This is currently a bug in mono that is be fixed, however, this
11428         provides a workaround for now. This will be removed when the bug
11429         is fixed.
11430
11431 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
11432
11433         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11434         incomplete key pairs (#57941).
11435
11436 2004-05-01  Todd Berman  <tberman@sevenl.net>
11437
11438         * driver.cs: Remove '.' from path_chars, now System.* loads properly
11439         from the GAC
11440
11441 2004-04-30  Jackson Harper  <jackson@ximian.com>
11442
11443         * codegen.cs: Open keys readonly.
11444         
11445 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11446
11447         * typemanager.cs: don't report cyclic struct layout when a struct
11448         contains 2 or more fields of the same type. Failed for Pango.AttrShape
11449         which has 2 Pango.Rectangle fields.
11450
11451 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11452
11453         * expression.cs: Handle IntPtr comparisons with IL code
11454         rather than a method call.
11455
11456 2004-04-29  Martin Baulig  <martin@ximian.com>
11457
11458         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
11459         the list of PropertyInfo's in class hierarchy and find the
11460         accessor.  Fixes #56013.
11461
11462 2004-04-29  Martin Baulig  <martin@ximian.com>
11463
11464         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
11465
11466 2004-04-29  Martin Baulig  <martin@ximian.com>
11467
11468         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
11469
11470         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
11471
11472 2004-04-29  Martin Baulig  <martin@ximian.com>
11473
11474         * class.cs (ConstructorInitializer.Resolve): Check whether the
11475         parent .ctor is accessible.  Fixes #52146.
11476
11477 2004-04-29  Martin Baulig  <martin@ximian.com>
11478
11479         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
11480
11481         * statement.cs (Using.EmitLocalVariableDecls): Use
11482         TypeManager.idisposable_type, not typeof (IDisposable).
11483         (Foreach.EmitCollectionForeach): Added support for valuetypes.
11484
11485 2004-04-29  Martin Baulig  <martin@ximian.com>
11486
11487         * class.cs (Event.Define): Don't emit the field and don't set
11488         RTSpecialName and SpecialName for events on interfaces.  Fixes
11489         #57703. 
11490
11491 2004-04-29  Raja R Harinath  <rharinath@novell.com>
11492
11493         Refactor Attribute.ApplyAttributes.
11494         * attribute.cs (Attributable): New base class for objects that can
11495         have Attributes applied on them.
11496         (Attribute): Make AttributeUsage fields public.
11497         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
11498         (Attribute.IsInternalCall): New property.
11499         (Attribute.UsageAttr): Convert to a public read-only property.
11500         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
11501         (Attribute.ResolveType, Attribute.Resolve)
11502         (Attribute.ScanForIndexerName): Update to reflect changes.
11503         (Attribute.CheckAttributeTarget): Re-format.
11504         (Attribute.ApplyAttributes): Refactor, to various
11505         Attributable.ApplyAttributeBuilder methods.
11506         * decl.cs (MemberCore): Make Attributable.
11507         * class.cs (Accessor): Make Attributable.
11508         (MethodData.ApplyAttributes): Use proper attribute types, not
11509         attribute names.
11510         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
11511         (TypeContainer.ApplyAttributeBuilder)
11512         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
11513         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
11514         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
11515         (Operator.ApplyAttributeBuilder): New factored-out methods.
11516         * const.cs (Const.ApplyAttributeBuilder): Likewise.
11517         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
11518         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
11519         * parameter.cs (ParameterBase): New Attributable base class
11520         that can also represent Return types.
11521         (Parameter): Update to the changes.
11522
11523 2004-04-29  Jackson Harper  <jackson@ximian.com>
11524
11525         * driver.cs: Prefer the corlib system version when looking for
11526         assemblies in the GAC. This is still a hack, but its a better hack
11527         now.
11528         
11529 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
11530
11531         * decl.cs, enum.cs: Improved error 3005 reporting.
11532   
11533         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
11534         (related_symbols): New private member for list of symbols
11535         related to reported error/warning.
11536         
11537         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
11538
11539 2004-04-29  Martin Baulig  <martin@ximian.com>
11540
11541         * ecore.cs (Expression.Constantify): If we're an enum and
11542         TypeManager.TypeToCoreType() doesn't give us another type, use
11543         t.UnderlyingSystemType.  Fixes #56178.  
11544
11545 2004-04-29  Martin Baulig  <martin@ximian.com>
11546
11547         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
11548         interfaces and for each interface, only add members directly
11549         declared in that interface.  Fixes #53255.
11550
11551 2004-04-28  Martin Baulig  <martin@ximian.com>
11552
11553         * expression.cs (ConditionalLogicalOperator): Use a temporary
11554         variable for `left' to avoid that we evaluate it more than once;
11555         bug #52588.
11556
11557 2004-04-28  Martin Baulig  <martin@ximian.com>
11558
11559         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
11560         `void[]' (CS1547).
11561
11562 2004-04-28  Martin Baulig  <martin@ximian.com>
11563
11564         * statement.cs (LocalInfo.Resolve): Check whether the type is not
11565         void (CS1547).
11566
11567         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
11568         whether the type is not void (CS1547).
11569
11570 2004-04-28  Martin Baulig  <martin@ximian.com>
11571
11572         * expression.cs (Unary.DoResolveLValue): Override this and report
11573         CS0131 for anything but Operator.Indirection.
11574
11575 2004-04-28  Martin Baulig  <martin@ximian.com>
11576
11577         Committing a patch from Ben Maurer; see bug #50820.
11578
11579         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11580         check for classes.
11581
11582         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11583         classes.        
11584
11585 2004-04-28  Martin Baulig  <martin@ximian.com>
11586
11587         Committing a patch from Ben Maurer; see bug #50820.
11588
11589         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11590         check for classes.
11591
11592         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11593         classes.        
11594
11595 2004-04-28  Martin Baulig  <martin@ximian.com>
11596
11597         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
11598         (Block.AddLabel): Call DoLookupLabel() to only search in the
11599         current block.
11600
11601 2004-04-28  Martin Baulig  <martin@ximian.com>
11602
11603         * cfold.cs (ConstantFold.BinaryFold): Added special support for
11604         comparing StringConstants and NullLiterals in Equality and Inequality.
11605
11606 2004-04-28  Jackson Harper  <jackson@ximian.com>
11607
11608         * driver.cs: Attempt to load referenced assemblies from the
11609         GAC. This is the quick and dirty version of this method that
11610         doesnt take into account versions and just takes the first
11611         canidate found. Will be good enough for now as we will not have more
11612         then one version installed into the GAC until I update this method.
11613
11614 2004-04-28  Martin Baulig  <martin@ximian.com>
11615
11616         * typemanager.cs (TypeManager.CheckStructCycles): New public
11617         static method to check for cycles in the struct layout.
11618
11619         * rootcontext.cs (RootContext.PopulateTypes): Call
11620         TypeManager.CheckStructCycles() for each TypeContainer.
11621         [Note: We only need to visit each type once.]
11622
11623 2004-04-28  Martin Baulig  <martin@ximian.com>
11624
11625         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
11626
11627         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
11628         success and added `out object value'.  Use a `bool resolved' field
11629         to check whether we've already been called rather than
11630         `ConstantValue != null' since this breaks for NullLiterals.
11631
11632 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11633
11634         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
11635         setting of this flag, since the 'set' method may be non-public.
11636
11637 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11638
11639         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
11640         check on current_vector.Block.
11641
11642 2004-04-27  Martin Baulig  <martin@ximian.com>
11643
11644         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
11645         a field initializer.  Fixes #56459.
11646
11647 2004-04-27  Martin Baulig  <martin@ximian.com>
11648
11649         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
11650         we're not attempting to use an indexer.  Fixes #52154.
11651
11652 2004-04-27  Martin Baulig  <martin@ximian.com>
11653
11654         * statement.cs (Return): Don't create a return label if we don't
11655         need it; reverts my change from January 20th.  Thanks to Ben
11656         Maurer for this.
11657
11658 2004-04-27  Martin Baulig  <martin@ximian.com>
11659
11660         According to the spec, `goto' can only leave a nested scope, but
11661         never enter it.
11662
11663         * statement.cs (Block.LookupLabel): Only lookup in the current
11664         block, don't recurse into parent or child blocks.
11665         (Block.AddLabel): Check in parent and child blocks, report
11666         CS0140/CS0158 if we find a duplicate.
11667         (Block): Removed this indexer for label lookups.
11668         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
11669         this already does the error reporting for us.
11670
11671         * flowanalysis.cs
11672         (FlowBranching.UsageVector.Block): New public variable; may be null.
11673         (FlowBranching.CreateSibling): Added `Block' argument.
11674         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
11675         label for the target of a `goto' and check whether we're not
11676         leaving a `finally'.
11677
11678 2004-04-27  Martin Baulig  <martin@ximian.com>
11679
11680         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
11681         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
11682         just for returns).
11683
11684 2004-04-27  Martin Baulig  <martin@ximian.com>
11685
11686         * statement.cs (Block.AddLabel): Also check for implicit blocks
11687         and added a CS0158 check.
11688
11689 2004-04-27  Martin Baulig  <martin@ximian.com>
11690
11691         * flowanalysis.cs (FlowBranchingLoop): New class.
11692         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
11693         UsageVector's instead of an ArrayList.
11694         (FlowBranching.Label): Likewise.
11695         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
11696         (FlowBranching.AddBreakVector): New method.
11697
11698 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
11699
11700         * attribute.cs: Small regression fix: only convert the type if we
11701         the type is different, fixes System.Drawing build.
11702
11703 2004-04-27  Martin Baulig  <martin@ximian.com>
11704
11705         * attribute.cs (Attribute.Resolve): If we have a constant value
11706         for a named field or property, implicity convert it to the correct
11707         type.
11708
11709 2004-04-27  Raja R Harinath  <rharinath@novell.com>
11710
11711         * statement.cs (Block.Block): Implicit blocks share
11712         'child_variable_names' fields with parent blocks.
11713         (Block.AddChildVariableNames): Remove.
11714         (Block.AddVariable): Mark variable as "used by a child block" in
11715         every surrounding block.
11716         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
11717         been used in a child block, complain about violation of "Invariant
11718         meaning in blocks" rule.
11719         * cs-parser.jay (declare_local_variables): Don't use
11720         AddChildVariableNames.
11721         (foreach_statement): Don't create an implicit block: 'foreach'
11722         introduces a scope.
11723
11724 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
11725
11726         * convert.cs (ImplicitNumericConversion): 0 is also positive when
11727         converting from 0L to ulong.  Fixes 57522.
11728
11729 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11730
11731         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
11732         derived class hides via 'new' keyword field from base class (test-242.cs).
11733         TODO: Handle this in the more general way.
11734         
11735         * class.cs (CheckBase): Ditto.
11736
11737 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11738
11739         * decl.cs (caching_flags): New member for storing cached values
11740         as bit flags.
11741         (MemberCore.Flags): New enum where bit flags for caching_flags
11742         are defined.
11743         (MemberCore.cls_compliance): Moved to caching_flags.
11744         (DeclSpace.Created): Moved to caching_flags.
11745
11746         * class.cs: Use caching_flags instead of DeclSpace.Created
11747         
11748 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
11749
11750         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
11751         if we are only a derived class, not a nested class.
11752
11753         * typemanager.cs: Same as above, but do this at the MemberLookup
11754         level (used by field and methods, properties are handled in
11755         PropertyExpr).   Allow for the qualified access if we are a nested
11756         method. 
11757
11758 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
11759
11760         * class.cs: Refactoring.
11761         (IMethodData): New inteface; Holds links to parent members
11762         to avoid member duplication (reduced memory allocation).
11763         (Method): Implemented IMethodData interface.
11764         (PropertyBase): New inner classes for get/set methods.
11765         (PropertyBase.PropertyMethod): Implemented IMethodData interface
11766         (Event): New inner classes for add/remove methods.
11767         (Event.DelegateMethod): Implemented IMethodData interface.
11768
11769         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
11770         EmitContext (related to class.cs refactoring).
11771
11772 2004-04-21  Raja R Harinath  <rharinath@novell.com>
11773
11774         * delegate.cs (Delegate.VerifyApplicability): If the number of
11775         arguments are the same as the number of parameters, first try to
11776         verify applicability ignoring  any 'params' modifier on the last
11777         parameter.
11778         Fixes #56442.
11779
11780 2004-04-08  Martin Baulig  <martin@ximian.com>
11781
11782         Merged latest changes into gmcs.  Please keep this comment in
11783         here, it makes it easier for me to see what changed in MCS since
11784         the last time I merged.
11785
11786 2004-04-16  Raja R Harinath  <rharinath@novell.com>
11787
11788         * class.cs (TypeContainer.AddIndexer): Use
11789         'ExplicitInterfaceName' to determine if interface name was
11790         explicitly specified.  'InterfaceType' is not initialized at this time.
11791         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
11792         Indexers array is already in the required order.  Initialize
11793         'IndexerName' only if there are normal indexers.
11794         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
11795         (TypeContainer.Emit): Emit DefaultMember attribute only if
11796         IndexerName is initialized.
11797         Fixes #56300.
11798
11799 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
11800
11801         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
11802         Fixes #57007
11803
11804 2004-04-15  Raja R Harinath  <rharinath@novell.com>
11805
11806         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
11807         attributes.
11808         Fix for #56456.
11809
11810         * attribute.cs (Attribute.Resolve): Check for duplicate named
11811         attributes.
11812         Fix for #56463.
11813
11814 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
11815
11816         * iterators.cs (MarkYield): track whether we are in an exception,
11817         and generate code accordingly.  Use a temporary value to store the
11818         result for our state.
11819
11820         I had ignored a bit the interaction of try/catch with iterators
11821         since their behavior was not entirely obvious, but now it is
11822         possible to verify that our behavior is the same as MS .NET 2.0
11823
11824         Fixes 54814
11825
11826 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
11827
11828         * iterators.cs: Avoid creating temporaries if there is no work to
11829         do. 
11830
11831         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
11832         Enumerations, use TypeManager.EnumToUnderlying and call
11833         recursively. 
11834
11835         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
11836         bug #57013
11837
11838         (This.Emit): Use EmitContext.EmitThis to emit our
11839         instance variable.
11840
11841         (This.EmitAssign): Ditto.
11842
11843         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
11844         codepaths, we will move all the functionality into
11845         Mono.CSharp.This 
11846
11847         (FieldExpr.EmitAssign): Ditto.
11848
11849         This fixes several hidden bugs that I uncovered while doing a code
11850         review of this today.
11851
11852         * codegen.cs (EmitThis): reworked so the semantics are more clear
11853         and also support value types "this" instances.
11854
11855         * iterators.cs: Changed so that for iterators in value types, we
11856         do not pass the value type as a parameter.  
11857
11858         Initialization of the enumerator helpers is now done in the caller
11859         instead of passing the parameters to the constructors and having
11860         the constructor set the fields.
11861
11862         The fields have now `assembly' visibility instead of private.
11863
11864 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
11865
11866         * expression.cs (Argument.Resolve): Check if fields passed as ref
11867         or out are contained in a MarshalByRefObject.
11868
11869         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
11870         another compiler type.
11871
11872 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
11873
11874         * class.cs (Indexer.Define): use the new name checking method.
11875         Also, return false on an error.
11876         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
11877         (is_identifier_[start/part]_character): make static.
11878
11879 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
11880
11881         * expression.cs (Binary.ResolveOperator): Do no append strings
11882         twice: since we can be invoked more than once (array evaluation)
11883         on the same concatenation, take care of this here.  Based on a fix
11884         from Ben (bug #56454)
11885
11886 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11887
11888         * codegen.cs: Fix another case where CS1548 must be reported (when 
11889         delay-sign isn't specified and no private is available #56564). Fix
11890         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11891         error when MCS is used on the MS runtime and we need to delay-sign 
11892         (which seems unsupported by AssemblyBuilder - see #56621).
11893
11894 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
11895
11896         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
11897         (TypeManager.ComputeNamespaces): Faster implementation for
11898         Microsoft runtime.
11899
11900         * compiler.csproj: Updated AssemblyName to mcs.
11901
11902 2004-05-11  Jackson Harper  <jackson@ximian.com>
11903
11904         * Makefile: Preserve MONO_PATH
11905         
11906 2004-05-11  Jackson Harper  <jackson@ximian.com>
11907
11908         * Makefile: Use mono and mcs to build gmcs
11909         
11910 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
11911
11912         * codegen.cs: Add patch from Robert Shade
11913         <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
11914         sync with mcs.
11915
11916 2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
11917
11918         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11919         incomplete key pairs (#57941).
11920
11921 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11922
11923         * codegen.cs: Fix another case where CS1548 must be reported (when 
11924         delay-sign isn't specified and no private is available #56564). Fix
11925         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11926         error when MCS is used on the MS runtime and we need to delay-sign 
11927         (which seems unsupported by AssemblyBuilder - see #56621).
11928
11929 2004-04-29  Jackson Harper  <jackson@ximian.com>
11930
11931         * Makefile: Set MONO_PATH to use the bootstrap corlib
11932         * driver.cs: Check the GAC for referenced assemblies.
11933                 
11934 2004-04-29  Martin Baulig  <martin@ximian.com>
11935
11936         * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
11937
11938 2004-04-07  Martin Baulig  <martin@ximian.com>
11939
11940         * expression.cs (Binary.ResolveOperator): Added special case for
11941         Equality/Inequality between a type parameter and a null literal.
11942
11943 2004-04-07  Martin Baulig  <martin@ximian.com>
11944
11945         * convert.cs: Check null literal -> type parameter conversions.
11946
11947 2004-04-07  Martin Baulig  <martin@ximian.com>
11948
11949         * generic.cs (ConstructedType.CheckConstraints): Enforce the
11950         `class' and `struct' constraints.
11951
11952 2004-04-07  Martin Baulig  <martin@ximian.com>
11953
11954         * generic.cs (SpecialConstraint): New public enum.
11955         (Constraints.Resolve): Added support for the `class' and `struct'
11956         constraints.
11957
11958         * cs-parser.jay (type_parameter_constraint): Added support for the
11959         `class' and `struct' constraints.
11960
11961 2004-04-07  Martin Baulig  <martin@ximian.com>
11962
11963         * support.cs (GenericConstraints): Replaced `Types' by
11964         `ClassConstraint' and `InterfaceConstraints'; added
11965         `HasClassConstraint'.   
11966
11967 2004-04-07  Martin Baulig  <martin@ximian.com>
11968
11969         * generic.cs
11970         (Constraints.InterfaceConstraints): New public property.
11971         (Constraints.Types): Make this property public
11972         (TypeParameter): Implement IMemberContainer.
11973         (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
11974         instead of a TypeBuilder/MethodBuilder; pass the interface
11975         constraints to TypeManager.AddTypeParameter().
11976         (TypeParameter.DefineType): Just take an EmitContext and no
11977         TypeBuilder/MethodBuilder.  Use the new public API.
11978
11979         * typemanager.cs (TypeManager.AddTypeParameter): Added
11980         `TypeExpr[]' argument; add the interfaces to the
11981         `builder_to_ifaces' hash.
11982         (TypeManager.LookupMemberContainer): For
11983         GenericTypeParameterBuilders, get the TypeParameter from the
11984         `builder_to_type_param'.
11985         (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
11986         the TypeParameter and call FindMembers on it.
11987
11988 2004-04-07  Martin Baulig  <martin@ximian.com>
11989
11990         * class.cs
11991         (MethodCore.GenericMethod): Moved this field here from Method.
11992         (MethodCore.IsDuplicateImplementation): Take the number of type
11993         parameters into account if we're a generic method.
11994
11995         * expression.cs (Invocation.InferTypeArguments): Don't return true
11996         if `arguments' is null; we still need to check whether we actually
11997         don't need to infer anything in this case.
11998         (MemberAccess): Merged the functionality from GenericMemberAccess
11999         into this class.
12000
12001         * generic.cs (GenericMemberAccess): Removed.
12002
12003 2004-04-05  Martin Baulig  <martin@ximian.com>
12004
12005         * decl.cs (MemberCore): For generic classes, interfaces and
12006         structs, `Name' now includes the number of type parameters
12007         ("Stack!1.Node!1").
12008         (DeclSpace.FindType): Removed the `num_type_args' argument; we now
12009         encode the number of type arguments in the type name.
12010
12011         * expression.cs (Expression.MemberLookup): Removed the
12012         `num_type_args' argument; we now encode the number of type
12013         arguments in the type name.
12014
12015         * ecore.cs (SimpleName): Encode the number of type arguments in
12016         the type name itself.
12017
12018         * generic.cs (ConstructedType): Likewise.
12019
12020         * tree.cs (Tree.RecordDecl): Take a `string' instead of a
12021         `MemberName'; we now include the number of type parameters in the
12022         type name.
12023
12024         * typemanager.cs (TypeManager.CheckGeneric): Removed.
12025         (TypeManager.MemberLookup): Removed the
12026         `num_type_args' argument; we now encode the number of type
12027         arguments in the type name.     
12028
12029 2004-04-03  Martin Baulig  <martin@ximian.com>
12030
12031         * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
12032         (MemberCore.MemberName): Moved here from MemberBase.
12033         (DeclSpace.SetParameterInfo): Just take the constraints as an
12034         ArrayList; we already have the type parameters in our
12035         `MemberName'; also do the CS0080 reporting here.
12036
12037         * cs-parser.jay (struct_declaration): Use `member_name' instead of
12038         `IDENTIFIER opt_type_parameter_list'; when constructing our
12039         `MemberName', it'll already include our type parameters.
12040         (class_declaration, interface_declaration): Likewise.
12041         (delegate_declaration): Likewise.
12042         (MakeName): Take a MemberName and return a MemberName.
12043         The following two changes are required to avoid shift/reduce conflicts:
12044         (member_name): Don't include a TypeName anymore; ie. this is now
12045         just 'IDENTIFIER opt_type_parameter_list'.
12046         (property_declaration, event_declaration): Use a
12047         `namespace_or_type_name' instead of a `member_name'.            
12048
12049 2004-04-03  Martin Baulig  <martin@ximian.com>
12050
12051         * decl.cs (MemberName): Renamed to `TypeName' and created a new
12052         `MemberName' class.
12053         (TypeName): Formerly known as MemberName.
12054
12055         * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
12056         instead of a `MemberName'.
12057
12058         * cs-parser.jay (namespace_or_type_name): Create a TypeName.
12059         (member_name): New rule; create a MemberName.
12060
12061 2004-04-02  Martin Baulig  <martin@ximian.com>
12062
12063         * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
12064         (CS0305 and CS0308).
12065
12066 2004-04-02  Martin Baulig  <martin@ximian.com>
12067
12068         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
12069         support for nested types.
12070
12071 2004-04-02  Martin Baulig  <martin@ximian.com>
12072
12073         * ecore.cs (IAlias): New public interface.
12074         (TypeExpr, TypeExpression): Implement IAlias.
12075         (TypeAliasExpression): New public class.
12076
12077         * namespace.cs (Namespace): Implement IAlias.
12078         (Namespace.Lookup): Return an IAlias instead on an object.
12079         (Namespace.DefineName): Take an IAlias instead of an object.
12080         (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
12081         an object.
12082         (NamespaceEntry.UsingAlias): Take a Membername instead of an
12083         Expression.
12084         (NamespaceEntry.LookupAlias): Return an IAlias instead on an
12085         object.
12086         (NamespaceEntry.Lookup): Likewise.
12087
12088         * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
12089         instead of a Type.      
12090
12091         * decl.cs (DeclSpace): Implement IAlias.
12092         (DeclSpace.LookupAlias): Return an IAlias instead of a string.
12093
12094         * generic.cs (ConstructedType): Improved error checking.
12095
12096 2004-04-02  Martin Baulig  <martin@ximian.com>
12097
12098         * convert.cs: Added type parameter conversions.
12099
12100         * ecore.cs
12101         (UnboxCast.Emit): Emit an `unbox.any' for type params.
12102         (ClassCast.Emit): If the source type is a type parameter, box it.
12103         If the target type is a type parameter, emit an `unbox.any'
12104         instead of a `classcast'.1      
12105
12106 2004-04-01  Martin Baulig  <martin@ximian.com>
12107
12108         * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
12109
12110 2004-04-01  Martin Baulig  <martin@ximian.com>
12111
12112         * generic.cs (ConstructedType.CheckConstraints): Use
12113         Convert.ImplicitStandardConversionExists(); user-defined implicit
12114         conversions are not allowed according to the spec.
12115
12116 2004-03-30  Martin Baulig  <martin@ximian.com>
12117
12118         * expression.cs (New): Added support for type parameters.
12119
12120         * typemanager.cs
12121         (TypeManager.activator_type): New public static field.
12122         (TypeManager.activator_create_instance): Likewise.
12123
12124 2004-03-30  Martin Baulig  <martin@ximian.com>
12125
12126         * typemanager.cs (TypeManager.HasConstructorConstraint): New
12127         public method.
12128
12129 2004-03-30  Martin Baulig  <martin@ximian.com>
12130
12131         * generic.cs (ConstructedType.CheckConstraints): Actually follow
12132         the spec here: the argument type must be convertible to the
12133         constraints.
12134
12135 2004-03-30  Martin Baulig  <martin@ximian.com>
12136
12137         * generic.cs
12138         (TypeParameter.Define, TypeParameter.DefineMethod): Call
12139         TypeManager.AddTypeParameter().
12140         (ConstructedType.CheckConstraints): Re-enable this and actually
12141         check whether we have a constructor constraint.
12142
12143         * typemanager.cs
12144         (TypeManager.builder_to_type_param): New static field.
12145         (TypeManager.AddTypeParameter): New static method.
12146         (TypeManager.LookupTypeParameter): New public method.
12147
12148 2004-03-30  Martin Baulig  <martin@ximian.com>
12149
12150         * generic.cs (TypeParameter.DefineType): Return a boolean and use
12151         the new API to actually define the constructor constraint.
12152
12153         * typemanager.cs
12154         (TypeManager.new_constraint_attr_type): New static field.
12155         (TypeManager.InitCoreTypes): Initialize it.
12156
12157 2004-03-30  Martin Baulig  <martin@ximian.com>
12158
12159         * generic.cs (Constraints): Completed error checking, use correct
12160         error numbers.
12161
12162 2004-03-29  Martin Baulig  <martin@ximian.com>
12163
12164         * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
12165
12166         * expression.cs (Invocation.InferTypeArguments): Added overloaded
12167         public version which takes a `ParameterData pd' instead of an
12168         `ArrayList args'.
12169
12170 2004-03-29  Martin Baulig  <martin@ximian.com>
12171
12172         * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
12173         not a MethodInfo.       
12174
12175 2004-03-29  Martin Baulig  <martin@ximian.com>
12176
12177         * expression.cs (Argument.ResolveMethodGroup): If we're a
12178         ConstructedType, call GetMemberAccess() on it.  
12179
12180 2004-03-29  Martin Baulig  <martin@ximian.com>
12181
12182         * class.cs (MethodBase.CheckGenericOverride): New abstract method.
12183         (MethodCore.CheckGenericOverride): When overriding a generic
12184         method, check whether the constraints match.
12185
12186         * support.cs (GenericConstraints): New public interface.
12187         (ParameterData.GenericConstraints): New public method.
12188
12189         * parameter.cs (Parameter.Resolve): Check whether we're a generic
12190         method parameter and compute our constraints if appropriate.
12191         (Parameter.GenericConstraints): New public property.
12192
12193         * generic.cs (Constraints): Implement GenericConstraints.
12194
12195 2004-03-29  Martin Baulig  <martin@ximian.com>
12196
12197         * decl.cs (MemberCache.FindMemberToOverride): Use
12198         `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
12199
12200 2004-03-29  Martin Baulig  <martin@ximian.com>
12201
12202         * generic.cs (GenericMethod.Define): Resolve our type parameters.
12203
12204 2004-03-29  Martin Baulig  <martin@ximian.com>
12205
12206         * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
12207         not allowed on non-generic declarations").
12208
12209 2004-03-29  Martin Baulig  <martin@ximian.com>
12210
12211         * expression.cs (Invocation.InferTypeArguments): Added overloaded
12212         public version of this method.
12213
12214         * class.cs (MethodCore.IsDuplicateImplementation): Use
12215         Invocation.InferTypeArguments() to check this.
12216
12217 2004-03-29  Martin Baulig  <martin@ximian.com>
12218
12219         * convert.cs: Use TypeManager.IsDelegateType() instead of
12220         comparing types correctly.
12221
12222 2004-03-29  Martin Baulig  <martin@ximian.com>
12223
12224         * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
12225         types directly to make it work for generic instances.
12226
12227         * typemanager.cs (TypeManager.IsSubclassOf): New static method.
12228
12229 2004-03-29  Martin Baulig  <martin@ximian.com>
12230
12231         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
12232         support for arrays.     
12233
12234 2004-03-24  Martin Baulig  <martin@ximian.com>
12235
12236         * decl.cs (DeclSpace.FindType): Also use
12237         TypeManager.CheckGeneric() for types from the using clauses.
12238
12239 2004-03-23  Martin Baulig  <martin@ximian.com>
12240
12241         * expression.cs (Invocation.OverloadResolve): Added `bool
12242         may_fail' argument and use it instead of the Location.IsNull() hack.
12243
12244 2004-03-23  Martin Baulig  <martin@ximian.com>
12245
12246         * expression.cs (Invocation.InferType): Use correct type inference
12247         rules here.     
12248
12249 2004-03-23  Martin Baulig  <martin@ximian.com>
12250
12251         * ecore.cs (MethodGroupExpr.Name): Use
12252         TypeManager.CSharpSignature() instead of just the name.
12253
12254         * expression.cs (Invocation.OverloadResolve): Provide better error
12255         reporting.
12256         (Invocation.DoResolve): OverloadResolve() never returns null
12257         without reporting an error, so removed the error -6 reporting here.
12258
12259 2004-03-23  Martin Baulig  <martin@ximian.com>
12260
12261         * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
12262         generic methods.
12263
12264         * cs-parser.jay (delegate_declaration): Support generic delegates.
12265
12266         * delegate.cs: Support generic delegates.
12267
12268 2004-03-22  Martin Baulig  <martin@ximian.com>
12269
12270         * expression.cs (Invocation.InferParamsTypeArguments): New static
12271         method; does type inference for params arguments.
12272
12273 2004-03-21  Martin Baulig  <martin@ximian.com>
12274
12275         * typemanager.cs (TypeManager.IsGenericMethod): New public static
12276         method; checks whether a method is a generic method.    
12277
12278         * expression.cs (Invocation.InferTypeArguments): New static method;
12279         infer type arguments for generic method invocation.
12280
12281         * ecore.cs (MethodGroupExpr.HasTypeArguments): New public
12282         property; we set this to true if we're resolving a generic method
12283         invocation and the user specified type arguments, ie. we're not
12284         doing type inference.
12285
12286 2004-03-20  Martin Baulig  <martin@ximian.com>
12287
12288         * class.cs (MethodData.DeclaringType): New public property.
12289         (MethodData.Define): Set DeclaringType here.
12290         (Operator.Define): Use OperatorMethod.MethodData.DeclaringType
12291         instead of OperatorMethodBuilder.DeclaringType.
12292
12293 2004-03-20  Martin Baulig  <martin@ximian.com>
12294
12295         * cs-tokenizer.cs (xtoken): Return a special
12296         Token.DEFAULT_OPEN_PARENS for "`default' followed by open parens".
12297
12298         * cs-parser.jay (default_value_expression): Switch to the new
12299         syntax (14.5.13).
12300
12301 2004-03-19  Martin Baulig  <martin@ximian.com>
12302
12303         * decl.cs (MemberName): New class.  We use this to "construct"
12304         namespace_or_type_name's.
12305
12306         * generics.cs (TypeArguments.GetDeclarations): New public method;
12307         returns the type arguments as a string[] and reports a CS0081 if
12308         one of them is not an identifier.
12309
12310         * class.cs (MemberBase): The .ctor now takes the name as a
12311         MemberName instead of a string.
12312         (MemberBase.ExplicitInterfaceName): Changed type from string to
12313         Expression.
12314         (MemberBase.DoDefine): If we're an explicit implementation, the
12315         InterfaceType may be a generic instance.
12316
12317         * cs-parser.jay (namespace_or_type_name): Return a MemberName.
12318         (namespace_name): Call MemberName.GetName () to transform the
12319         MemberName into a string and ensure we don't have any type
12320         arguments.
12321         (type_name): Call MemberName.GetTypeExpression() to transfrom the
12322         MemberName into an expression.
12323         (method_header): Use namespace_or_type_name instead of member_name.     
12324
12325 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
12326
12327         * rootcontext.cs: Add new types to the boot resolution.
12328
12329         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
12330         MulticastDelegate is not allowed.
12331
12332         * typemanager.cs: Add new types to lookup: System.TypedReference
12333         and ArgIterator.
12334
12335         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
12336         check for TypedReference or ArgIterator, they are not allowed. 
12337
12338         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
12339         makes us properly catch 1510 in some conditions (see bug 56016 for
12340         details). 
12341
12342 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
12343
12344         * CryptoConvert.cs: update from corlib version
12345         with endian fixes.
12346
12347 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
12348
12349         * class.cs (Indexer.Define): Check indexername declaration
12350
12351 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
12352
12353         * attribute.cs (IsClsCompliant): Fixed problem with handling
12354         all three states (compliant, not-compliant, undetected).
12355
12356 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
12357
12358         * attribute.cs (Attribute): Location is now public.
12359         (Resolve): Store resolved arguments (pos_values) in attribute class.
12360         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
12361         (GetClsCompliantAttributeValue): New method that gets
12362         CLSCompliantAttribute value.
12363         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
12364         if exists else null.
12365         (AttributeTester): New class for CLS-Compliant verification routines.
12366
12367         * class.cs (Emit): Add CLS-Compliant verification.
12368         (Method.GetSignatureForError): Implemented.
12369         (Constructor.GetSignatureForError): Implemented
12370         (Constructor.HasCompliantArgs): Returns if constructor has
12371         CLS-Compliant arguments.
12372         (Constructor.Emit): Override.
12373         (Construcor.IsIdentifierClsCompliant): New method; For constructors
12374         is needed to test only parameters.
12375         (FieldBase.GetSignatureForError): Implemented.
12376         (TypeContainer): New member for storing base interfaces.
12377         (TypeContainer.FindMembers): Search in base interfaces too.
12378
12379         * codegen.cs (GetClsComplianceAttribute): New method that gets
12380         assembly or module CLSCompliantAttribute value.
12381         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
12382         for assembly.
12383         (ModuleClass.Emit): Add error 3012 test.
12384
12385         * const.cs (Emit): Override and call base for CLS-Compliant tests.
12386
12387         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
12388         state for all decl types.
12389         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
12390         if CLS-Compliant tests are required.
12391         (IsClsCompliaceRequired): New method. Analyze whether code
12392         must be CLS-Compliant.
12393         (IsExposedFromAssembly): New method. Returns true when MemberCore
12394         is exposed from assembly.
12395         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
12396         value or gets cached value.
12397         (HasClsCompliantAttribute): New method. Returns true if MemberCore
12398         is explicitly marked with CLSCompliantAttribute.
12399         (IsIdentifierClsCompliant): New abstract method. This method is
12400         used to testing error 3005.
12401         (IsIdentifierAndParamClsCompliant): New method. Common helper method
12402         for identifier and parameters CLS-Compliant testing.
12403         (VerifyClsCompliance): New method. The main virtual method for
12404         CLS-Compliant verifications.
12405         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
12406         null. I don't know why is null (too many public members !).
12407         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
12408         and get value of first CLSCompliantAttribute that found.
12409
12410         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
12411         (VerifyClsCompliance): Override and add extra tests.
12412
12413         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
12414         clscheck- disable CLS-Compliant verification event if assembly is has
12415         CLSCompliantAttribute(true).
12416
12417         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
12418         ApllyAttribute is now called in emit section as in the other cases.
12419         Possible future Emit integration.
12420         (IsIdentifierClsCompliant): New override.
12421         (VerifyClsCompliance): New override.
12422         (GetEnumeratorName): Returns full enum name.
12423
12424         * parameter.cs (GetSignatureForError): Implemented.
12425
12426         * report.cs (WarningData): New struct for Warning message information.
12427         (LocationOfPreviousError): New method.
12428         (Warning): New method. Reports warning based on the warning table.
12429         (Error_T): New method. Reports error based on the error table.
12430
12431         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
12432         verifications are done here.
12433
12434         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
12435
12436         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
12437         CLSCompliantAttribute.
12438         (all_imported_types): New member holds all imported types from other
12439         assemblies.
12440         (LoadAllImportedTypes): New method fills static table with exported types
12441         from all referenced assemblies.
12442         (Modules): New property returns all assembly modules.
12443
12444 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
12445
12446         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
12447         throwing a parser error.
12448
12449         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
12450         which removes the hardcoded get_/set_ prefixes for properties, as
12451         IL allows for the properties to be named something else.  
12452
12453         Bug #56013
12454
12455         * expression.cs: Do not override operand before we know if it is
12456         non-null.  Fix 56207
12457
12458 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12459
12460         * typemanager.cs: support for pinned variables.
12461
12462 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12463
12464         * decl.cs, typemanager.cs: Avoid using an arraylist
12465         as a buffer if there is only one result set.
12466
12467 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12468
12469         * expression.cs: Make sure you cant call a static method
12470         with an instance expression, bug #56174.
12471
12472 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
12473
12474         * class.cs (IsDuplicateImplementation): Improve error reporting to
12475         flag 663 (method only differs in parameter modifier).
12476
12477         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
12478         in preprocessor directives.
12479
12480         * location.cs (LookupFile): Allow for the empty path.
12481
12482         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
12483         better approach for some of that patch, but its failing with the
12484         CharSet enumeration.  For now try/catch will do.
12485
12486         * typemanager.cs: Do not crash if a struct does not have fields.
12487         Fixes 56150.
12488
12489 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12490
12491         * expression.cs: cs0213, cant fix a fixed expression.
12492         fixes 50231.
12493
12494 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12495
12496         * cs-parser.jay: detect invalid embeded statements gracefully.
12497         bug #51113.
12498
12499 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12500
12501         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
12502         As a regex:
12503         s/
12504         the invocation type may not be a subclass of the tye of the item/
12505         The type of the item must be a subclass of the invocation item.
12506         /g
12507
12508         Fixes bug #50820.
12509
12510 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
12511
12512         * attribute.cs: Added methods to get a string and a bool from an
12513         attribute. Required to information from AssemblyKeyFileAttribute,
12514         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
12515         * codegen.cs: Modified AssemblyName creation to include support for
12516         strongnames. Catch additional exceptions to report them as CS1548.
12517         * compiler.csproj: Updated include CryptoConvert.cs.
12518         * compiler.csproj.user: Removed file - user specific configuration.
12519         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
12520         Mono.Security assembly. The original class is maintained and tested in
12521         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
12522         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
12523         like CSC 8.0 (C# v2) supports.
12524         * Makefile: Added CryptoConvert.cs to mcs sources.
12525         * rootcontext.cs: Added new options for strongnames.
12526
12527 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
12528
12529         * driver.cs: For --expect-error, report error code `2'
12530         if the program compiled with no errors, error code `1' if
12531         it compiled with an error other than the one expected.
12532
12533 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
12534
12535         * compiler.csproj: Updated for Visual Studio .NET 2003.
12536         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
12537         * compiler.sln: Updated for Visual Studio .NET 2003.
12538
12539 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
12540
12541         * expression.cs: Fix bug #47234. We basically need to apply the
12542         rule that we prefer the conversion of null to a reference type
12543         when faced with a conversion to 'object' (csc behaviour).
12544
12545 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12546
12547         * statement.cs: Shorter form for foreach, eliminates
12548         a local variable. r=Martin.
12549
12550 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12551
12552         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
12553         checks if we can use brtrue/brfalse to test for 0.
12554         * expression.cs: use the above in the test for using brtrue/brfalse.
12555         cleanup code a bit.
12556
12557 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12558
12559         * expression.cs: Rewrite string concat stuff. Benefits:
12560
12561         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
12562         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
12563         rather than a concat chain.
12564
12565         * typemanager.cs: Add lookups for more concat overloads.
12566
12567 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12568
12569         * expression.cs: Emit shorter il code for array init.
12570
12571         newarr
12572         dup
12573         // set 1
12574
12575         // set 2
12576
12577         newarr
12578         stloc.x
12579
12580         ldloc.x
12581         // set 1
12582
12583         ldloc.x
12584         // set 2
12585
12586 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
12587
12588         * statement.cs: Before, two switch blocks would be merged if the
12589         total size of the blocks (end_item - begin_item + 1) was less than
12590         two times the combined sizes of the blocks.
12591
12592         Now, it will only merge if after the merge at least half of the
12593         slots are filled.
12594
12595         fixes 55885.
12596
12597 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
12598
12599         * class.cs : csc build fix for GetMethods(). See bug #52503.
12600
12601 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
12602
12603         * expression.cs: Make sure fp comparisons work with NaN.
12604         This fixes bug #54303. Mig approved this patch a long
12605         time ago, but we were not able to test b/c the runtime
12606         had a related bug.
12607
12608 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
12609
12610         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
12611
12612 2004-03-19  Martin Baulig  <martin@ximian.com>
12613
12614         * class.cs (MemberCore.IsDuplicateImplementation): Check whether
12615         two overloads may unify for some type parameter substitutions and
12616         report a CS0408 if appropriate.
12617
12618 2004-03-19  Martin Baulig  <martin@ximian.com>
12619
12620         * class.cs (MemberCore.IsDuplicateImplementation): Report the
12621         error here and not in our caller.
12622
12623 2004-03-19  Martin Baulig  <martin@ximian.com>
12624
12625         * interface.cs: Completely killed this file.
12626         (Interface): We're now a TypeContainer and live in class.cs.
12627
12628         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
12629         argument; we're now also called for interfaces.
12630         (TypeContainer.DefineMembers): Allow this method being called
12631         multiple times.
12632         (TypeContainer.GetMethods): New public method; formerly known as
12633         Interface.GetMethod().  This is used by PendingImplementation.
12634         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
12635         it's now private and non-static.
12636         (Interface): Moved this here; it's now implemented similar to
12637         Class and Struct.
12638         (Method, Property, Event, Indexer): Added `bool is_interface'
12639         argument to their .ctor's.
12640         (MemberBase.IsInterface): New public field.
12641
12642         * cs-parser.jay: Create normal Method, Property, Event, Indexer
12643         instances instead of InterfaceMethod, InterfaceProperty, etc.
12644         (opt_interface_base): Removed; we now use `opt_class_base' instead.
12645         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
12646
12647 2004-03-19  Martin Baulig  <martin@ximian.com>
12648
12649         * class.cs (MethodCore.IsDuplicateImplementation): New private
12650         method which does the CS0111 checking.
12651         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
12652         Use IsDuplicateImplementation().
12653
12654 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
12655
12656         * decl.cs (FindMemberToOverride): New method to find the correct
12657         method or property to override in the base class.
12658         * class.cs
12659             - Make Method/Property use the above method to find the
12660               version in the base class.
12661             - Remove the InheritableMemberSignatureCompare as it is now
12662               dead code.
12663
12664         This patch makes large code bases much faster to compile, as it is
12665         O(n) rather than O(n^2) to do this validation.
12666
12667         Also, it fixes bug 52458 which is that nested classes are not
12668         taken into account when finding the base class member.
12669
12670         Reviewed/Approved by Martin.
12671
12672 2004-03-17  Martin Baulig  <martin@ximian.com>
12673
12674         * expression.cs (MemberAccess.DoResolve): Take the parent's number
12675         of type arguments into account; use the `real_num_type_args'
12676         approach like in DoResolveAsTypeStep().
12677
12678         * generic.cs (GenericMemberAccess.DoResolve): Make this work for
12679         nested types.
12680
12681 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
12682
12683         * interface.cs: In all interface classes removed redundant
12684         member initialization.
12685
12686 2004-03-16  Martin Baulig  <martin@ximian.com>
12687
12688         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12689
12690 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12691
12692         * decl.cs (DefineTypeAndParents): New helper method to define a
12693         type's containers before the type itself is defined;  This is a
12694         bug exposed by the recent changes to Windows.Forms when an
12695         implemented interface was defined inside a class that had not been
12696         built yet.   
12697
12698         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
12699
12700         (Check): Loop correctly to report errors modifiers
12701         (UNSAFE was not in the loop, since it was the same as TOP).
12702
12703         * interface.cs: Every interface member now takes a ModFlags,
12704         instead of a "is_new" bool, which we set on the base MemberCore. 
12705
12706         Every place where we called "UnsafeOk" in the interface, now we
12707         call the proper member (InterfaceMethod.UnsafeOK) instead to get
12708         the unsafe settings from the member declaration instead of the
12709         container interface. 
12710
12711         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
12712
12713         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12714         `set_indexer_name' to the pending bits (one per type).
12715
12716         We fixed a bug today that was picking the wrong method to
12717         override, since for properties the existing InterfaceMethod code
12718         basically ignored the method name.  Now we make sure that the
12719         method name is one of the valid indexer names.
12720
12721 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
12722  
12723         * support.cs (SeekableStreamReader): Keep track of stream byte
12724         positions and don't mix them with character offsets to the buffer.
12725
12726         Patch from Gustavo Giráldez
12727
12728 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
12729
12730         * interface.cs (InterfaceSetGetBase): Removed double member
12731         initialization, base class does it as well.
12732
12733 2004-03-13  Martin Baulig  <martin@ximian.com>
12734
12735         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
12736         when compiling corlib.
12737
12738 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
12739
12740         * convert.cs (ExplicitConversion): We were reporting an error on
12741         certain conversions (object_type source to a value type, when the
12742         expression was `null') before we had a chance to pass it through
12743         the user defined conversions.
12744
12745         * driver.cs: Replace / and \ in resource specifications to dots.
12746         Fixes 50752
12747
12748         * class.cs: Add check for duplicate operators.  Fixes 52477
12749
12750 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
12751
12752         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
12753         that are in the middle of the statements, not only at the end.
12754         Fixes #54987
12755
12756         * class.cs (TypeContainer.AddField): No longer set the
12757         `HaveStaticConstructor' flag, now we call it
12758         `UserDefineStaticConstructor' to diferentiate the slightly
12759         semantic difference.
12760
12761         The situation is that we were not adding BeforeFieldInit (from
12762         Modifiers.TypeAttr) to classes that could have it.
12763         BeforeFieldInit should be set to classes that have no static
12764         constructor. 
12765
12766         See:
12767
12768         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
12769
12770         And most importantly Zoltan's comment:
12771
12772         http://bugzilla.ximian.com/show_bug.cgi?id=44229
12773
12774         "I think beforefieldinit means 'it's ok to initialize the type sometime 
12775          before its static fields are used', i.e. initialization does not need
12776          to be triggered by the first access to the type. Setting this flag
12777          helps the JIT to compile better code, since it can run the static
12778          constructor at JIT time, and does not need to generate code to call it
12779          (possibly lots of times) at runtime. Unfortunately, mcs does not set
12780          this flag for lots of classes like String. 
12781          
12782          csc sets this flag if the type does not have an explicit static 
12783          constructor. The reasoning seems to be that if there are only static
12784          initalizers for a type, and no static constructor, then the programmer
12785          does not care when this initialization happens, so beforefieldinit
12786          can be used.
12787          
12788          This bug prevents the AOT compiler from being usable, since it 
12789          generates so many calls to mono_runtime_class_init that the AOT code
12790          is much slower than the JITted code. The JITted code is faster, 
12791          because it does not generate these calls if the vtable is type is
12792          already initialized, which is true in the majority of cases. But the
12793          AOT compiler can't do this."
12794
12795 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
12796
12797         * class.cs (MethodData.Emit): Refactor the code so symbolic
12798         information is generated for destructors;  For some reasons we
12799         were taking a code path that did not generate symbolic information
12800         before. 
12801
12802 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
12803
12804         * class.cs: Create a Constructor.CheckBase method that
12805         takes care of all validation type code. The method
12806         contains some code that was moved from Define.
12807
12808         It also includes new code that checks for duplicate ctors.
12809         This fixes bug #55148.
12810
12811 2004-03-09  Joshua Tauberer <tauberer@for.net>
12812
12813         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
12814         a { ... }-style array creation invokes EmitStaticInitializers
12815         which is not good for reference-type arrays.  String, decimal
12816         and now null constants (NullCast) are not counted toward
12817         static initializers.
12818
12819 2004-03-05  Martin Baulig  <martin@ximian.com>
12820
12821         * location.cs (SourceFile.HasLineDirective): New public field;
12822         specifies whether the file contains or is referenced by a "#line"
12823         directive.
12824         (Location.DefineSymbolDocuments): Ignore source files which
12825         either contain or are referenced by a "#line" directive.        
12826
12827 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
12828
12829         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
12830         direct access to our parent, so check the method inline there.
12831
12832 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
12833
12834         * expression.cs (Invocation.EmitCall): Miguel's last commit
12835         caused a regression. If you had:
12836
12837             T t = null;
12838             t.Foo ();
12839
12840         In Foo the implict this would be null.
12841
12842 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
12843
12844         * expression.cs (Invocation.EmitCall): If the method is not
12845         virtual, do not emit a CallVirt to it, use Call.
12846
12847         * typemanager.cs (GetFullNameSignature): Improve the method to
12848         cope with ".ctor" and replace it with the type name.
12849
12850         * class.cs (ConstructorInitializer.Resolve): Now the method takes
12851         as an argument the ConstructorBuilder where it is being defined,
12852         to catch the recursive constructor invocations.
12853
12854 2004-03-16  Martin Baulig  <martin@ximian.com>
12855
12856         * expression.cs (MemberAccess.DoResolve): If `expr' resolved to a
12857         ConstructedType, call ResolveType() on it to get the type rather
12858         than just using `expr.Type'.
12859
12860 2004-03-16  Martin Baulig  <martin@ximian.com>
12861
12862         * generics.cs (ConstructedType.GetMemberAccess): Take the
12863         EmitContext instead on the TypeExpr and use
12864         ec.TypeContainer.CurrentType/ec.ContainerType.
12865
12866 2004-03-16  Martin Baulig  <martin@ximian.com>
12867
12868         * ecore.cs (SimpleName.DoResolveAsTypeStep): Lookup type
12869         parameters before aliases.
12870
12871 2004-03-16  Martin Baulig  <martin@ximian.com>
12872
12873         * typemanager.cs (TypeManager.MayBecomeEqualGenericInstances):
12874         New oublic function; checks whether two generic instances may become
12875         equal under some instantiations (26.3.1).
12876
12877         * class.cs (TypeContainer.Define): Call
12878         TypeManager.MayBecomeEqualGenericInstances() and report CS0695 on
12879         error.
12880
12881 2004-03-16  Martin Baulig  <martin@ximian.com>
12882
12883         * class.cs (TypeContainer.GetClassBases): Moved
12884         Error_TypeParameterAsBase() here and also check whether the base
12885         class is not an attribute.
12886
12887 2004-03-16  Martin Baulig  <martin@ximian.com>
12888
12889         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12890
12891 2004-03-16  Martin Baulig  <martin@ximian.com>
12892
12893         * class.cs (Error_TypeParameterAsBase): Use correct error number
12894         here (CS0689).  
12895
12896 2004-03-16  Martin Baulig  <martin@ximian.com>
12897
12898         * decl.cs (DeclSpace.ResolveTypeExpr): Added more error checking
12899         for generics.
12900
12901         * generics.cs (ConstructedType.DoResolveAsTypeStep): Added better
12902         error reporting.
12903
12904 2004-03-15  Martin Baulig  <martin@ximian.com>
12905
12906         * typemanager.cs (TypeManager.GetFullName): New public method.
12907         (TypeManager.MemberLookup): Added `int_num_type_arguments'
12908         argument; only return members with the correct number of type
12909         arguments.
12910         (TypeManager.CheckGeneric): Allow -1 to bypass the check.
12911         (TypeManager.FilterWithClosure): Call CheckGeneric() to check
12912         whether the number of type arguments matches.
12913
12914         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Allow `expr'
12915         not being a ConstructedType; we can now do "typeof (Foo.Bar<U>)".
12916
12917         * expression.cs (MemberAccess): Added public `NumTypeArguments'
12918         field; it's set by the protected .ctor when we're actually a
12919         GenericMemberAccess.
12920         (MemberAccess.ResolveAsTypeStep): Compute the total number of type
12921         arguments and pass it to MemberLookupFinal ().
12922
12923         * ecore.cs (Expression.MemberLookup): Added `int
12924         num_type_arguments' argument; only return members with the correct
12925         number of type arguments.
12926         (Expression.MemberLookupFailed): Check whether the MemberLookup
12927         failed because we did not have the correct number of type
12928         arguments; report CS0305 in this case.
12929
12930         * decl.cs (DeclSpace.ResolveTypeExpr): Don't report an error if
12931         `e.ResolveAsTypeTerminal()' already did so.
12932
12933 2004-03-15  Martin Baulig  <martin@ximian.com>
12934
12935         * ecore.cs (Expression.ResolveLValue): Allow e.type being null if
12936         we're a ConstructedType; in this case, the caller must report an
12937         error (for instance CS0131).
12938
12939         * generic.cs (TypeArguments): Added Location argument to the .ctor.
12940         (TypeArguments.Resolve): Actually report errors here.
12941
12942 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12943
12944         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12945         `set_indexer_name' to the pending bits (one per type).
12946
12947         We fixed a bug today that was picking the wrong method to
12948         override, since for properties the existing InterfaceMethod code
12949         basically ignored the method name.  Now we make sure that the
12950         method name is one of the valid indexer names.
12951
12952 2004-03-15  Martin Baulig  <martin@ximian.com>
12953
12954         * typemanager.cs (TypeManager.IndexerPropertyName): Added support
12955         for generic instances.
12956
12957 2004-03-13  Martin Baulig  <martin@ximian.com>
12958
12959         * class.cs (TypeContainer.DefineType): Call
12960         TypeManager.AddUserType() immediately after creating the
12961         TypeBuilder; pass all type parameters when creating the
12962         CurrentType.
12963
12964         * decl.cs (DeclSpace.FindNestedType): New public method.
12965         (DeclSpace.FindType): Added `int num_type_args' argument; only
12966         return types with the correct number of type parameters.
12967         (DeclSpace.CountTypeParams): New public property.
12968
12969         * ecore.cs (SimpleName.ctor): Added overloaded version which takes
12970         the number of type parameters; defaults to zero.
12971
12972         * generic.cs (TypeArguments.Count): New public property.
12973         (ConstructedType.DoResolveAsTypeStep): First call
12974         ds.FindNestedType() to find out whether we're nested in the
12975         current generic type; in this case, we inherit all type parameters
12976         from the current class.
12977
12978         * rootcontext.cs (RootContext.NamespaceLookup): Added `int
12979         num_type_args' argument.
12980         (RootContext.LookupType): Added overloaded version which takes the
12981         number of type arguments; only return types with the correct
12982         number of type arguments.
12983
12984         * typemanager.cs (TypeManager.CheckGeneric): New public function;
12985         checks whether `Type t' has `int num_type_args'.
12986
12987 2004-03-13  Martin Baulig  <martin@ximian.com>
12988
12989         * generic.cs (GenericMethod.DefineType): New method; calls
12990         DefineType() on all the type parameters.
12991
12992         * class.cs (MethodData.ctor): Added `GenericMethod generic' argument.
12993         (MethodData.Define): If we're a generic method, call
12994         GenericMethod.DefineType() to define the type parameters.       
12995
12996 2004-03-10  Martin Baulig  <martin@ximian.com>
12997
12998         * pending.cs (Pending.InterfaceMethod): Use TypeManager.IsEqual()
12999         instead of IsAssignableFrom.    
13000
13001 2004-03-10  Martin Baulig  <martin@ximian.com>
13002
13003         * ecore.cs (FieldExpr.ctor): Use TypeManager.TypeToCoreType().
13004
13005         * support.cs (ParameterData.HasArrayParameter): New property.
13006         (ReflectionParameters.ctor): Take a MethodBase instead of a
13007         ParameterInfo[].  If we have any type parameters, get the generic
13008         method definition and ask it whether we have variable arguments.
13009
13010 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
13011
13012         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
13013         routines to check if a type is an enumerable/enumerator allow
13014         classes that implement the IEnumerable or IEnumerator interfaces.
13015
13016         * class.cs (Property, Operator): Implement IIteratorContainer, and
13017         implement SetYields.
13018
13019         (Property.Define): Do the block swapping for get_methods in the
13020         context of iterators.   We need to check if Properties also
13021         include indexers or not.
13022
13023         (Operator): Assign the Block before invoking the
13024         OperatorMethod.Define, so we can trigger the Iterator code
13025         replacement. 
13026
13027         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
13028         Property and Operator classes are not created when we parse the
13029         declarator but until we have the block completed, so we use a
13030         singleton SimpleIteratorContainer.Simple to flag whether the
13031         SetYields has been invoked.
13032
13033         We propagate this setting then to the Property or the Operator to
13034         allow the `yield' to function.
13035
13036 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
13037
13038         * codegen.cs: Implemented attribute support for modules.
13039         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
13040         Assembly/Module functionality.
13041
13042         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
13043         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
13044         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
13045
13046 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
13047
13048         * interface.cs (FindMembers): The operation is performed on all base
13049         interfaces and not only on the first. It is required for future CLS Compliance patch.
13050
13051 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
13052
13053         * statement.cs, codegen.cs:
13054         This patch deals with patterns such as:
13055
13056         public class List : IEnumerable {
13057
13058                 public MyEnumerator GetEnumerator () {
13059                         return new MyEnumerator(this);
13060                 }
13061
13062                 IEnumerator IEnumerable.GetEnumerator () {
13063                         ...
13064                 }
13065                 
13066                 public struct MyEnumerator : IEnumerator {
13067                         ...
13068                 }
13069         }
13070
13071         Before, there were a few things we did wrong:
13072         1) we would emit callvirt on a struct, which is illegal
13073         2) we emited ldarg when we needed to emit ldarga
13074         3) we would mistakenly call the interface methods on an enumerator
13075         type that derived from IEnumerator and was in another assembly. For example:
13076
13077         public class MyEnumerator : IEnumerator
13078
13079         Would have the interface methods called, even if there were public impls of the
13080         method. In a struct, this lead to invalid IL code.
13081
13082 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
13083
13084         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
13085           renamed to Emit.
13086
13087         * delegate.cs (Define): Fixed crash when delegate type is undefined.
13088
13089 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
13090
13091         * cs-parser.jay: Fix small regression: we were not testing V2
13092         compiler features correctly.
13093
13094         * interface.cs: If the emit context is null, then create one
13095
13096 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
13097
13098         * decl.cs (GetSignatureForError): New virtual method to get full name
13099           for error messages.
13100
13101         * attribute.cs (IAttributeSupport): New interface for attribute setting.
13102           Now it is possible to rewrite ApplyAttributes method to be less if/else.
13103
13104         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
13105           Duplicated members and code in these classes has been removed.
13106           Better encapsulation in these classes.
13107
13108 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
13109
13110         * assign.cs (Assign.DoResolve): When dealing with compound
13111         assignments, there is a new rule in ECMA C# 2.4 (might have been
13112         there before, but it is documented here) that states that in:
13113
13114         a op= b;
13115
13116         If b is of type int, and the `op' is a shift-operator, then the
13117         above is evaluated as:
13118
13119         a = (int) a op b 
13120
13121         * expression.cs (Binary.ResolveOperator): Instead of testing for
13122         int/uint/long/ulong, try to implicitly convert to any of those
13123         types and use that in pointer arithmetic.
13124
13125         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
13126         method to print information for from the type, not from the
13127         null-method we were given.
13128
13129 2004-02-01  Duncan Mak  <duncan@ximian.com>
13130
13131         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
13132         parsing for cmd, fixes bug #53694.
13133
13134 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
13135
13136         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
13137         in the member name duplication tests. Property and operator name duplication
13138         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
13139
13140 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
13141
13142         * interface.cs (PopulateMethod): Fixed crash when interface method
13143         returns not existing type (error test cs0246-3.cs).
13144
13145 2004-02-02  Ravi Pratap M <ravi@ximian.com>
13146
13147         * cs-parser.jay (interface_accessors): Re-write actions to also
13148         store attributes attached to get and set methods. Fix spelling
13149         while at it.
13150
13151         (inteface_property_declaration): Modify accordingly.
13152
13153         (InterfaceAccessorInfo): New helper class to store information to pass
13154         around between rules that use interface_accessors.
13155
13156         * interface.cs (Emit): Apply attributes on the get and set
13157         accessors of properties and indexers too.
13158
13159         * attribute.cs (ApplyAttributes): Modify accordingly to use the
13160         right MethodBuilder when applying attributes to the get and set accessors.
13161
13162 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
13163
13164         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
13165
13166 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
13167
13168         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
13169
13170 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
13171
13172         * cs-parser.jay: Remove YIELD token, instead use the new grammar
13173         changes that treat `yield' specially when present before `break'
13174         or `return' tokens.
13175
13176         * cs-tokenizer.cs: yield is no longer a keyword.
13177
13178 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
13179
13180         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
13181         setting for default constructors.
13182         For default constructors are almost every time set wrong Modifier. The
13183         generated IL code has been alright. But inside mcs this values was
13184         wrong and this was reason why several of my CLS Compliance tests
13185         failed.
13186
13187 2004-02-27  Martin Baulig  <martin@ximian.com>
13188
13189         * generics.cs (ConstructedType.ResolveType): Make the nested type
13190         stuff actually work.
13191
13192 2004-02-25  Martin Baulig  <martin@ximian.com>
13193
13194         * decl.cs (DeclSpace.CurrentTypeParameters): New protected
13195         property; returns the type parameters just from the current type,
13196         ie. with the ones from outer classes.
13197         (DeclSpace.LookupGeneric): First search in the current class, then
13198         in outer classes.
13199         (DeclSpace.initialize_type_params): When hiding a type parameter
13200         from an outer class, put it into the `type_param_list' anyways.
13201
13202         * expression.cs (MemberAccess.expr): Made this field protected.
13203
13204         * class.cs (TypeContainer.Define): The `CurrentType' just contains
13205         the type parameters from the current class.
13206
13207         * generic.cs (ConstructedType.ResolveType): Support nested generic
13208         types by taking the type parameters which we inherit from outer
13209         classes into account.
13210         (GenericMemberAccess.ResolveAsTypeStep): Override this and added
13211         support for nested generic types.
13212
13213 2004-02-23  Martin Baulig  <martin@ximian.com>
13214
13215         * decl.cs (DeclSpace.IsGeneric): Make this a property instead of a
13216         field and check whether we're nested inside a generic type.
13217         (DeclSpace.ResolveType): If we're resolving to a generic type
13218         definition, create a ConstructedType and return its resolved type.
13219         (DeclSpace.initialize_type_params): New private method;
13220         initializes the `type_param_list' field from the type parameters
13221         from this and all enclosing classes.
13222         (DeclSpace.TypeParameters): Call initialize_type_params() unless
13223         we're already initialized.
13224
13225 2004-02-23  Martin Baulig  <martin@ximian.com>
13226
13227         * class.cs (Method.Define): Create the generic method before
13228         calling DoDefine().
13229         (Memberbase.DoDefine): Added DeclSpace argument (in addition to
13230         the TypeContainer one); we use this for generic methods.
13231
13232         * decl.cs (CheckAccessLevel): If we're a GenericMethod, use our
13233         parent's TypeBuilder.
13234
13235 2004-02-18  Martin Baulig  <martin@ximian.com>
13236
13237         * ecore.cs (FieldExpr.DoResolveLValue): Use TypeManager.IsEqual()
13238         to check for equality.
13239
13240 2004-02-05  Martin Baulig  <martin@ximian.com>
13241
13242         * ecore.cs (FieldExpr.DoResolveLValue): If we have an
13243         `ec.TypeContainer.CurrentType', use it instead of
13244         `ec.ContainerType' to check whether we're in the type's ctor.
13245
13246 2004-01-29  Martin Baulig  <martin@ximian.com>
13247
13248         * expression.cs (Invocation.DoResolve): If we're a
13249         `ConstructedType', then we're actually a generic method, so
13250         rewrite the expr as a GenericMemberAccess.
13251
13252         * cs-parser.jay (member_name): Don't use `namespace_or_type_name'
13253         here; manually parse it into a string.
13254
13255 2004-01-28  Martin Baulig  <martin@ximian.com>
13256
13257         * typemanager.cs (TypeManager.IsEqual): New static method.
13258         (TypeManager.FilterWithClosure): Call TypeManager.IsEqual() to
13259         check for equality instead of using `=='.
13260
13261 2004-01-26  Martin Baulig  <martin@ximian.com>
13262
13263         * decl.cs (DeclSpace.CurrentType): New public field.
13264
13265         * expression.cs (This.ResolveBase): If we have an
13266         `ec.TypeContainer.CurrentType', use it instead of
13267         `ec.ContainerType'.
13268
13269         * class.cs (TypeContainer.DefineType): If we're a generic type,
13270         create the `CurrentType' (unresolved).
13271         (TypeContainer.GenericType): New private field.
13272         (TypeContainer.DefineMembers): If we have a `CurrentType', resolve
13273         it and store it in `GenericType' before creating the MemberCache.
13274         (TypeContainer.GetMembers): If we have a `GenericType', call
13275         TypeManager.FindMembers() on it.
13276
13277         * interface.cs (Interface.GenericType): New private field.
13278         (Interface.DefineType): If we're a generic type, create the
13279         `CurrentType' (unresolved).
13280         (Interface.DefineMembers): If we have a `CurrentType', resolve it
13281         and store it in `GenericType' before creating the MemberCache.
13282         (Interface.GetMembers): If we have a `GenericType', call
13283         TypeManager.FindMembers() on it.
13284
13285 2004-01-22  Martin Baulig  <martin@ximian.com>
13286
13287         * cs-parser.jay (namespace_or_type_name): Return an Expression,
13288         not a QualifiedIdentifier.  This is what `type_name_expression'
13289         was previously doing.
13290         (type_name_expression): Removed; the code is now in
13291         `namespace_or_type_name'.
13292         (qualified_identifier): Removed, use `namespace_or_type_name'
13293         instead.
13294         (QualifiedIdentifier): Removed this class.      
13295
13296 2004-01-22  Martin Baulig  <martin@ximian.com>
13297
13298         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
13299         not a string as alias name.
13300
13301 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
13302
13303         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
13304         #52730 bug, and instead compute correctly the need to use a
13305         temporary variable when requesting an address based on the
13306         static/instace modified of the field and the constructor.
13307  
13308 2004-01-21  Martin Baulig  <martin@ximian.com>
13309
13310         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
13311         class and namespace before looking up aliases.  Fixes #52517.
13312
13313 2004-01-21  Martin Baulig  <martin@ximian.com>
13314
13315         * flowanalysis.cs (UsageVector.Merge): Allow variables being
13316         assinged in a 'try'; fixes exception4.cs.
13317
13318 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13319         * class.cs : Implemented parameter-less constructor for TypeContainer
13320
13321         * decl.cs: Attributes are now stored here. New property OptAttributes
13322
13323         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
13324
13325         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
13326
13327 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13328
13329         * typemanager.cs (CSharpSignature): Now reports also inner class name.
13330           (CSharpSignature): New method for indexer and property signature.
13331
13332 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13333
13334         * pending.cs (IsVirtualFilter): Faster implementation.
13335
13336 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13337
13338         * typemanager.cs: Avoid inclusion of same assembly more than once.
13339
13340 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13341
13342         * cs-parser.jay: Fixed problem where the last assembly attribute
13343           has been applied also to following declaration (class, struct, etc.)
13344           
13345 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13346
13347         * class.cs: Added error CS0538, CS0539 reporting.
13348         Fixed crash on Microsoft runtime when field type is void.
13349
13350         * cs-parser.jay: Added error CS0537 reporting.
13351
13352         * pending.cs: Added error CS0535 reporting.
13353         Improved error report for errors CS0536, CS0534.
13354
13355 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
13356
13357         Merge a few bits from the Anonymous Method MCS tree.
13358
13359         * statement.cs (ToplevelBlock): New class for toplevel methods,
13360         will hold anonymous methods, lifted variables.
13361
13362         * cs-parser.jay: Create toplevel blocks for delegates and for
13363         regular blocks of code. 
13364
13365 2004-01-20  Martin Baulig  <martin@ximian.com>
13366
13367         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
13368         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
13369         and `NeedExplicitReturn'; added `IsLastStatement'.
13370         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
13371         have a `ReturnLabel' or we're not unreachable.
13372
13373         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
13374         child's reachability; don't just override ours with it.  Fixes
13375         #58058 (lluis's example).
13376         (FlowBranching): Added public InTryOrCatch(), InCatch(),
13377         InFinally(), InLoop(), InSwitch() and
13378         BreakCrossesTryCatchBoundary() methods.
13379
13380         * statement.cs (Return): Do all error checking in Resolve().
13381         Unless we are the last statement in a top-level block, always
13382         create a return label and jump to it.
13383         (Break, Continue): Do all error checking in Resolve(); also make
13384         sure we aren't leaving a `finally'.
13385         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
13386         statement in a top-level block.
13387         (Block.Flags): Added `IsDestructor'.
13388         (Block.IsDestructor): New public property.
13389
13390 2004-01-20  Martin Baulig  <martin@ximian.com>
13391
13392         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
13393
13394 2004-01-20  Martin Baulig  <martin@ximian.com>
13395
13396         * statement.cs (Statement.ResolveUnreachable): New public method.
13397         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
13398         (Block.Resolve): Resolve unreachable statements.
13399
13400 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
13401
13402         * expression.cs: We need to fix the case where we do
13403         not have a temp variable here.
13404
13405         * assign.cs: Only expression compound assignments need
13406         temporary variables.
13407
13408 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
13409
13410         * flowanalysis.cs: Reduce memory allocation in a few ways:
13411           - A block with no variables should not allocate a bit
13412             vector for itself.
13413           - A method with no out parameters does not need any tracking
13414             for assignment of the parameters, so we need not allocate
13415             any data for it.
13416           - The arrays:
13417                 public readonly Type[] VariableTypes;
13418                 public readonly string[] VariableNames;
13419             Are redundant. The data is already stored in the variable
13420             map, so we need not allocate another array for it.
13421           - We need to add alot of checks for if (params | locals) == null
13422             due to the first two changes.
13423
13424 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
13425
13426         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
13427         implement IMemoryLocation, we store a copy on a local variable and
13428         take the address of it.  Patch from Benjamin Jemlich
13429
13430         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
13431         to use a special "type_name_expression" rule which reduces the
13432         number of "QualifiedIdentifier" classes created, and instead
13433         directly creates MemberAccess expressions.
13434
13435 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
13436
13437         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
13438         that fixes #52853.  Null literal assignment to ValueType
13439
13440         * class.cs (MethodData.Emit): Instead of checking the name of the
13441         method to determine if its a destructor, create a new derived
13442         class from Method called Destructor, and test for that.  
13443
13444         * cs-parser.jay: Create a Destructor object instead of a Method.  
13445
13446         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
13447
13448         Fixes: 52933
13449
13450 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
13451
13452         * expression.cs (Binary.ResolveOperator): Perform an implicit
13453         conversion from MethodGroups to their delegate types on the
13454         Addition operation.
13455
13456         * delegate.cs: Introduce a new class DelegateCreation that is the
13457         base class for `NewDelegate' and `ImplicitDelegateCreation',
13458         factor some code in here.
13459
13460         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
13461         conversion from MethodGroups to compatible delegate types. 
13462
13463         * ecore.cs (Expression.Resolve): Do not flag error 654
13464         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
13465         we allow conversions from MethodGroups to delegate types now.
13466
13467         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
13468         assignments in v2 either.
13469
13470 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
13471
13472         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
13473         static read-only fields in ctors.
13474
13475         Applied patch from Benjamin Jemlich 
13476
13477         * expression.cs (UnaryMutator): Avoid leaking local variables. 
13478
13479 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
13480
13481         * cs-tokenizer.cs (IsCastToken): Allow the various native types
13482         here to return true, as they can be used like this:
13483
13484                 (XXX) int.MEMBER ()
13485
13486         Fixed 49836 and all the other dups
13487
13488 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
13489
13490         * driver.cs: Implement /win32res and /win32icon.
13491
13492 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
13493
13494         * cs-parser.jay: Add a rule to improve error handling for the
13495         common mistake of placing modifiers after the type.
13496
13497 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
13498
13499         * cs-parser.jay (interface_event_declaration): Catch
13500         initialization of events on interfaces, and report cs0068
13501
13502         * cs-parser.jay (interface_event_declaration): Catch
13503         initialization of events. 
13504
13505         * ecore.cs: Better report missing constructors.
13506
13507         * expression.cs (Binary.ResolveOperator): My previous bug fix had
13508         the error reporting done in the wrong place.  Fix.
13509
13510         * expression.cs (Binary.ResolveOperator): Catch the 
13511         operator + (E x, E y) error earlier, and later allow for implicit
13512         conversions in operator +/- (E e, U x) from U to the underlying
13513         type of E.
13514
13515         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
13516         52596, if the container class is abstract, the default constructor
13517         is protected otherwise its public (before, we were always public).
13518
13519         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
13520         fixed statement.
13521
13522         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
13523         Jemlich that fixes bug #52597, MCS was generating invalid code for
13524         idisposable structs.   Thanks to Ben for following up with this
13525         bug as well.
13526
13527 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
13528
13529         * driver.cs: Allow assemblies without code to be generated, fixes
13530         52230.
13531
13532 2004-01-07  Nick Drochak <ndrochak@gol.com>
13533
13534         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
13535
13536 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
13537
13538         * cs-parser.jay: Add rules to improve error reporting if fields or
13539         methods are declared at the namespace level (error 116)
13540
13541         * Add rules to catch event add/remove
13542
13543 2004-01-04  David Sheldon <dave-mono@earth.li>
13544
13545   * expression.cs: Added matching ")" to error message for 
13546   CS0077
13547
13548 2004-01-03 Todd Berman <tberman@gentoo.org>
13549
13550         * ecore.cs, attribute.cs:
13551         Applying fix from #52429.
13552
13553 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13554
13555         * ecore.cs, expression.cs, statement.cs:
13556         Total rewrite of how we handle branching. We
13557         now handle complex boolean expressions with fewer
13558         jumps. As well if (x == 0) no longer emits a ceq.
13559
13560         if (x is Foo) is much faster now, because we generate
13561         better code.
13562
13563         Overall, we get a pretty big improvement on our benchmark
13564         tests. The code we generate is smaller and more readable.
13565
13566         I did a full two-stage bootstrap. The patch was reviewed
13567         by Martin and Miguel.
13568
13569 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13570
13571         * cs-parser.jay: Make primary_expression not take a QI.
13572         we dont need this because the member_access rule covers
13573         us here. So we replace the rule with just IDENTIFIER.
13574
13575         This has two good effects. First, we remove a s/r conflict.
13576         Second, we allocate many fewer QualifiedIdentifier objects.
13577
13578 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13579
13580         * attribute.cs: Handle MarshalAs attributes as pseudo, and
13581         set the correct information via SRE. This prevents
13582         hanging on the MS runtime. Fixes #29374.
13583
13584 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13585
13586         * convert.cs: correctly handle conversions to value types
13587         from Enum and ValueType as unboxing conversions.
13588
13589         Fixes bug #52569. Patch by Benjamin Jemlich.
13590
13591 2004-01-02  Ravi Pratap  <ravi@ximian.com>
13592
13593         * expression.cs (BetterConversion): Prefer int -> uint
13594         over int -> ulong (csc's behaviour). This fixed bug #52046.
13595
13596 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13597
13598         * decl.cs (MemberCache.FindMembers): now returns a
13599         MemberInfo [].
13600
13601         * typemanager.cs: In general, go with with ^^.
13602         (CopyNewMethods): take an IList.
13603         (RealMemberLookup): Only allocate an arraylist
13604         if we copy from two sets of methods.
13605
13606         This change basically does two things:
13607         1) Fewer array lists allocated due to CopyNewMethods.
13608         2) the explicit cast in MemberList costed ALOT.
13609
13610 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
13611
13612         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
13613         a hashtable to avoid needless string allocations when an identifier is
13614         used more than once (the common case).
13615
13616 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13617
13618         * pending.cs: MS's TypeBuilder.GetInterfaces ()
13619         is broken, it will not return anything. So, we
13620         have to use the information we have in mcs to
13621         do the task.
13622
13623         * typemanager.cs: Add a cache for GetInterfaces,
13624         since this will now be used more often (due to ^^)
13625
13626         (GetExplicitInterfaces) New method that gets the
13627         declared, not effective, interfaces on a type
13628         builder (eg, if you have interface IFoo, interface
13629         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
13630         { IBar }.
13631
13632         This patch makes MCS able to bootstrap itself on
13633         Windows again.
13634
13635 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13636
13637         * expression.cs: Remove the Nop's that Miguel put
13638         in by mistake.
13639
13640 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13641
13642         * report.cs, codegen.cs: Give the real stack trace to
13643         the error when an exception is thrown.
13644
13645 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13646
13647         * decl.cs: only allocate hashtables for ifaces if 
13648         it is an iface!
13649
13650 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13651
13652         * expression.cs: fix the error from cs0121-2.cs
13653         (a parent interface has two child interfaces that
13654         have a function with the same name and 0 params
13655         and the function is called through the parent).
13656
13657 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13658
13659         * class.cs, rootcontext.cs, typmanager.cs: do not
13660         leak pointers.
13661
13662 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
13663
13664         * codegen.cs: remove stack for the ec flow branching.
13665         It is already a linked list, so no need.
13666
13667 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
13668
13669         * Makefile: Allow custom profiler here.
13670
13671 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13672
13673         * typemanager.cs (LookupType):
13674           - Use a static char [], because split takes
13675             a param array for args, so it was allocating
13676             every time.
13677           - Do not store true in a hashtable, it boxes.
13678
13679 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13680
13681         * flowanalysis.cs: bytify common enums.
13682
13683 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13684
13685         * modifiers.cs: Add a new set of flags for the
13686         flags allowed on explicit interface impls.
13687         * cs-parser.jay: catch the use of modifiers in
13688         interfaces correctly.
13689         * class.cs: catch private void IFoo.Blah ().
13690
13691         All related to bug #50572.
13692
13693 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13694
13695         * decl.cs: Rewrite the consistant accessability checking.
13696         Accessability is not linear, it must be implemented in
13697         a tableish way. Fixes #49704.
13698
13699 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13700
13701         * expression.cs: Handle negation in a checked context.
13702         We must use subtraction from zero. Fixes #38674.
13703
13704 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13705
13706         * class.cs: Ignore static void main in DLLs.
13707         * rootcontext.cs: Handle the target type here,
13708         since we are have to access it from class.cs
13709         * driver.cs: account for the above.
13710
13711 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13712
13713         * report.cs: Give line numbers and files if available.
13714
13715 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
13716
13717         * driver.cs: Implement /addmodule.
13718
13719         * typemanager.cs:  Change 'modules' field so it now contains Modules not
13720         ModuleBuilders.
13721
13722 2003-12-20  Martin Baulig  <martin@ximian.com>
13723
13724         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
13725         (FieldBase.IsAssigned): Removed this field.
13726         (FieldBase.SetAssigned): New public method.
13727         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
13728
13729 2003-12-20  Martin Baulig  <martin@ximian.com>
13730
13731         * expression.cs (LocalVariableReference.DoResolve): Don't set
13732         `vi.Used' if we're called from DoResolveLValue().
13733
13734         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
13735         returns the usage vector it just merged into the current one -
13736         pass this one to UsageWarning().
13737         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
13738         of the `EmitContext', don't call this recursively on our children.
13739
13740 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
13741
13742         * driver.cs: Implement /target:module.
13743
13744 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
13745
13746         * support.cs (CharArrayHashtable): New helper class.
13747
13748         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
13749         char arrays, not strings, so we can avoid creating a string in
13750         consume_identifier if the identifier is a keyword.
13751
13752 2003-12-16  Martin Baulig  <martin@ximian.com>
13753
13754         * statement.cs (LocalInfo.Assigned): Removed this property.
13755         (LocalInfo.Flags): Removed `Assigned'.
13756         (LocalInfo.IsAssigned): New public method; takes the EmitContext
13757         and uses flow analysis.
13758         (Block.UsageWarning): Made this method private.
13759         (Block.Resolve): Call UsageWarning() if appropriate.
13760
13761         * expression.cs (LocalVariableReference.DoResolve): Always set
13762         LocalInfo.Used here.
13763
13764 2003-12-13  Martin Baulig  <martin@ximian.com>
13765
13766         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
13767         any value here; we're now using flow analysis to figure out
13768         whether a statement/block returns a value.
13769
13770 2003-12-13  Martin Baulig  <martin@ximian.com>
13771
13772         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
13773         working again.
13774         (FlowBranching.MergeFinally): Don't call
13775         `branching.CheckOutParameters()' here, this is called in
13776         MergeTopBlock().
13777         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
13778         when adding the `finally' vector.       
13779
13780 2003-12-13  Martin Baulig  <martin@ximian.com>
13781
13782         * flowanalysis.cs
13783         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
13784         actually work and also fix #48962.
13785
13786 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
13787
13788         * decl.cs: Do not check System.Object for nested types,
13789         since we know it does not have any. Big bang for buck:
13790
13791         BEFORE:
13792            Run 1:   8.35 seconds
13793            Run 2:   8.32 seconds
13794            corlib:  17.99 seconds
13795         AFTER:
13796            Run 1:   8.17 seconds
13797            Run 2:   8.17 seconds
13798            corlib:  17.39 seconds
13799
13800 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
13801
13802         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
13803         time we are returning 0 members, so we save alot here.
13804
13805 2003-12-11  Martin Baulig  <martin@ximian.com>
13806
13807         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
13808         `MergeChild()', also just take the `FlowBranching' as argument;
13809         call Merge() on it and return the result.
13810         (FlowBranching.Merge): We don't need to do anything if we just
13811         have one sibling.
13812
13813 2003-12-11  Martin Baulig  <martin@ximian.com>
13814
13815         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
13816         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
13817         Maurer for this idea.
13818
13819 2003-12-11  Martin Baulig  <martin@ximian.com>
13820
13821         * flowanalysis.cs (MergeResult): This class is now gone; we now
13822         use the `UsageVector' for this.  The reason for this is that if a
13823         branching just has one sibling, we don't need to "merge" them at
13824         all - that's the next step to do.
13825         (FlowBranching.Merge): We now return a `UsageVector' instead of a
13826         `MergeResult'.
13827
13828 2003-12-11  Martin Baulig  <martin@ximian.com>
13829
13830         Reworked flow analyis and made it more precise and bug-free.  The
13831         most important change is that we're now using a special `Reachability'
13832         class instead of having "magic" meanings of `FlowReturns'.  I'll
13833         do some more cleanups and optimizations and also add some more
13834         documentation this week.
13835
13836         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
13837         largely reworked this class.
13838         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
13839         the new `Reachability' class instead of having "magic" values here.
13840         (FlowBranching): We're now using an instance of `Reachability'
13841         instead of having separate `Returns', `Breaks' etc. fields.
13842
13843         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
13844         based on flow analysis; ignore the return value of block.Emit ().
13845
13846 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
13847
13848         * driver.cs typemanager.cs: Find the mono extensions to corlib even
13849         if they are private.
13850
13851 2003-12-09  Martin Baulig  <martin@ximian.com>
13852
13853         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
13854         call them directly on the UsageVector.
13855
13856 2003-12-09  Martin Baulig  <martin@ximian.com>
13857
13858         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
13859         Changed return type from `FlowReturns' to `Reachability'.
13860
13861 2003-12-09  Martin Baulig  <martin@ximian.com>
13862
13863         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
13864         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
13865         `Reachable' fields with a single `Reachability' one.
13866
13867 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13868
13869         * class.cs (FindMembers): Remove foreach's.
13870
13871         Bootstrap times:
13872
13873         BEFORE
13874                 Run 1:   8.74 seconds
13875                 Run 2:   8.71 seconds
13876
13877         AFTER
13878                 Run 1:   8.64 seconds
13879                 Run 2:   8.58 seconds
13880
13881
13882 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13883
13884         * cs-parser.jay:
13885         * gen-treedump.cs:
13886         * statement.cs:
13887         This patch does a few things:
13888                 1. EmptyStatement is now a singleton, so it is never reallocated.
13889                 2. All blah is EmptyStatement constructs have been changed to
13890                    blah == EmptyStatement.Value, which is much faster and valid
13891                    now that EmptyStatement is a singleton.
13892                 3. When resolving a block, rather than allocating a new array for
13893                    the non-empty statements, empty statements are replaced with
13894                    EmptyStatement.Value
13895                 4. Some recursive functions have been made non-recursive.
13896         Mainly the performance impact is from (3), however (1) and (2) are needed for
13897         this to work. (4) does not make a big difference in normal situations, however
13898         it makes the profile look saner.
13899
13900         Bootstrap times:
13901
13902         BEFORE
13903         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13904         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13905         Total memory allocated: 56397 KB
13906
13907         AFTER
13908         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
13909         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
13910         Total memory allocated: 55666 KB
13911
13912 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13913
13914         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
13915         than the hashtable in a hashtable version
13916
13917         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
13918         we always end up concating a string. This results in a huge perf
13919         loss, because many strings have to be tracked by the GC. In this
13920         patch, we first use a hashtable that works with two keys, so that
13921         the strings do not need to be concat'ed.
13922
13923         Bootstrap times:
13924         BEFORE
13925                 Run 1:   8.74 seconds
13926                 Run 2:   8.71 seconds
13927
13928         AFTER
13929                 Run 1:   8.65 seconds
13930                 Run 2:   8.56 seconds
13931
13932 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13933
13934         * Makefile: Add a new target `do-time' that does a quick and simple
13935         profile, leaving easy to parse output.
13936
13937 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
13938
13939         * codegen.cs (Init): Create the dynamic assembly with 
13940         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
13941
13942 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13943
13944         * support.cs: Make the PtrHashtable use only one
13945         instance of its comparer.
13946
13947 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
13948
13949         * typemanager.cs: Fix lookup of GetNamespaces.
13950
13951 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
13952
13953         * expression.cs: Removed redundant line.
13954
13955         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
13956         ArrayLists, use for loops with bounds.  
13957
13958         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
13959         arraylist.
13960
13961         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
13962         arraylists, use for loop with bounds.
13963
13964         The above three changes give us a 0.071 second performance
13965         improvement out of 3.294 seconds down to 3.223.  On my machine
13966         the above changes reduced the memory usage by 1,387 KB during
13967         compiler bootstrap.
13968
13969         * cs-parser.jay (QualifiedIdentifier): New class used to represent
13970         QualifiedIdentifiers.  Before we created a new string through
13971         concatenation, and mostly later on, the result would be
13972         manipulated by DecomposeQI through string manipulation.
13973
13974         This reduced the compiler memory usage for bootstrapping from
13975         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
13976         compile times in 0.05 seconds.
13977
13978 2003-11-28  Dick Porter  <dick@ximian.com>
13979
13980         * support.cs: Do string compares with the Invariant culture.
13981
13982         * rootcontext.cs: 
13983         * gen-treedump.cs: 
13984         * expression.cs: 
13985         * driver.cs: 
13986         * decl.cs: 
13987         * codegen.cs: 
13988         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
13989         the comparison is done with the Invariant culture.
13990
13991 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
13992
13993         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
13994         GetEnumerator method.
13995
13996         (ProbeCollectionType): Iterate starting at the most specific type
13997         upwards looking for a GetEnumerator
13998
13999         * expression.cs: Shift count can be up to 31 for int/uint and 63
14000         for long/ulong.
14001
14002 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
14003
14004         * statement.cs (Block.LookupLabel): Also look for the label on the
14005         children blocks.  Use a hash table to keep track of visited
14006         nodes. 
14007
14008         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
14009         we actually did transform the other operand, otherwise fall back
14010         to the common codepath that casts to long.
14011
14012         * cs-tokenizer.cs: Use the same code pattern as the int case.
14013         Maybe I should do the parsing myself, and avoid depending on the
14014         Parse routines to get this done.
14015
14016 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
14017
14018         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
14019         which fixes bug 51347.  This time test it.
14020
14021         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
14022         attributes for example can not tell the difference between these.
14023         The difference was only a syntax feature of the language. 
14024
14025         * attribute.cs: Apply attributes to delegates.
14026
14027         * delegate.cs: Call the apply attributes method.
14028
14029 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
14030
14031         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
14032         comparing 0 vs Byte.MinValue, not the value
14033
14034         (ImplicitConversionRequired): When reporting a conversion error,
14035         use error 31 to print out the constant error instead of the
14036         simpler 29.
14037
14038         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
14039         which fixes bug 51347.
14040
14041 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
14042
14043         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
14044         which fixes the -warnaserror command line option.
14045
14046 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
14047
14048         * cfold.cs (DoNumericPromotions): During constant folding of
14049         additions on UIntConstant, special case intconstants with
14050         IntConstants like we do on the expression binary operator. 
14051
14052 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
14053
14054         * convert.cs (ImplicitReferenceConversion): We were missing a case
14055         (System.Enum are not value types or class types, so we need to
14056         classify them separatedly).
14057
14058         * driver.cs: We do not support error 2007.
14059
14060 2003-11-12 Jackson Harper <jackson@ximian.com>
14061
14062         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
14063         system directory. Also use the full file name so users can
14064         libraries names mscorlib-o-tron.dll in a non system dir.
14065         
14066 2004-01-04  David Sheldon <dave-mono@earth.li>
14067
14068         * expression.cs: Added matching ")" to error message for CS0077.
14069
14070 2003-12-19  Martin Baulig  <martin@ximian.com>
14071
14072         * typemanager.cs (TypeManager.IsEqualGenericType): New public
14073         static method; see documentation in the method.
14074         (TypeManager.IsSubclassOrNestedChild): Allow IsEqualGenericType().
14075
14076         * convert.cs (Convert.ImplicitReferenceConversion,
14077         Convert.ImplicitReferenceConversionExists): Add support for
14078         generic type declarations; see gen-36.cs.
14079
14080 2003-12-19  Martin Baulig  <martin@ximian.com>
14081
14082         * pending.cs (Pending.InterfaceMethod): Use
14083         `Type.IsAssignableFrom()' instead of `=='.
14084
14085 2003-12-18  Martin Baulig  <martin@ximian.com>
14086
14087         * decl.cs (DeclSpace.AsAccessible): Check for array, pointer and
14088         byref types first.
14089
14090         * convert.cs (Convert.ImplicitStandardConversionExists): Use
14091         `expr_type.Equals (target_type)' instead of `=='.
14092
14093 2003-12-08  Martin Baulig  <martin@ximian.com>
14094
14095         * generics.cs (Constraints.Types): Removed.
14096         (Constraints.Resolve): Just resolve everything to TypeExpr's, not
14097         to Type's.
14098         (Constraints.ResolveTypes): New public method; resolves the
14099         TypeExpr's to Type's.
14100         (TypeParameter.Define): TypeBuilder.DefineGenericParameter() no
14101         longer takes the constraints.
14102         (TypeParameter.DefineMethod): Likewise.
14103         (TypeParameter.DefineType): New public method.  Calls
14104         `TypeBuilder/MethodBuilder.SetGenericParameterConstraints()' to set
14105         the constraints.
14106
14107 2003-12-08  Martin Baulig  <martin@ximian.com>
14108
14109         * convert.cs (Convert.ImplicitConversionStandard): Use
14110         `expr_type.Equals (target_type)' instead of `=='.
14111
14112 2003-12-08  Martin Baulig  <martin@ximian.com>
14113
14114         * typemanager.cs (TypeManager.GetReferenceType): Call
14115         `Type.MakeByRefType ()'.
14116
14117 2003-12-08  Martin Baulig  <martin@ximian.com>
14118
14119         * cs-parser.jay, cs-tokenizer.cs: `where' is not a keyword, it
14120         just has some special meaning in some situations.  For instance,
14121         it is allowed to use `where' as the name of a variable etc.
14122
14123 2003-12-04  Martin Baulig  <martin@ximian.com>
14124
14125         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
14126         `Type.MakeArrayType()' for array types.
14127
14128 2003-11-18  Miguel de Icaza  <miguel@ximian.com>
14129
14130         * expression.cs (Invocation.VerifyArgumentsCompat): Remove
14131         debugging message.
14132
14133         (SizeOf.DoResolve): assign the `type_queried' field.  This gets
14134         corlib to compile.
14135
14136 2003-11-16  Martin Baulig  <martin@ximian.com>
14137
14138         * codegen.cs (EmitContext.IsGeneric): Removed.
14139
14140         * ecore.cs (SimpleName.ResolveAsTypeStep): Always call
14141         ResolveGeneric() on the DeclSpace.
14142
14143 2003-11-16  Martin Baulig  <martin@ximian.com>
14144
14145         * generic.cs (TypeArguments.Resolve):
14146         `Expression.ResolveAsTypeTerminal()' returns a TypeExpr; call
14147         `ResolveType()' on it to get the Type.
14148
14149 2003-11-15  Martin Baulig  <martin@ximian.com>
14150
14151         * generic.cs (ConstructedType.GetInterfaces): Override this.
14152
14153 2003-11-14  Martin Baulig  <martin@ximian.com>
14154
14155         * interface.cs (Interface.DefineType): Define all type parameters
14156         before adding the interfaces we inherit.
14157
14158 2003-11-11  Martin Baulig  <martin@ximian.com>
14159
14160         * generic.cs (ConstructedType.ResolveType): Always call
14161         `gt.BindGenericParameters (atypes)'; also if `args.HasTypeArguments'.
14162
14163 2003-11-10  Martin Baulig  <martin@ximian.com>
14164
14165         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
14166         (TypeManager.InitCoreTypes): Initialize them here, but instead of
14167         calling `ResolveType()' on them, directly assign their `Type'.
14168
14169 2003-11-08  Martin Baulig  <martin@ximian.com>
14170
14171         * generic.cs (ConstructedType): Override `IsClass' etc.
14172
14173 2003-11-08  Martin Baulig  <martin@ximian.com>
14174
14175         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
14176         return value and the `out parent' parameter.
14177         (TypeContainer.DefineType): Moved the CS0644 check into
14178         GetClassBases().  Don't pass the interface types to the
14179         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
14180         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
14181
14182         * ecore.cs (TypeExpr.IsAttribute): New property.
14183         (TypeExpr.GetInterfaces): New method.
14184
14185         * interface.cs (Interface.GetInterfaceTypeByName): Return a
14186         TypeExpr instead of a Type.
14187         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
14188         (Interface.DefineType): Don't pass the interface types to the
14189         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
14190         them later and then call `TypeBulider.AddInterfaceImplementation()'.
14191
14192         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
14193         instead of a `Type[]'.
14194         (TypeManager.RegisterBuilder): Likewise.
14195         (TypeManager.AddUserInterface): Likewise.
14196         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
14197         `Type[]' and also return a `TypeExpr[]'.
14198         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
14199
14200 2003-11-08  Martin Baulig  <martin@ximian.com>
14201
14202         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
14203         Expression.     
14204
14205 2003-11-08  Martin Baulig  <martin@ximian.com>
14206
14207         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
14208         TypeManager.ResolveExpressionTypes().
14209
14210         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
14211         instead of an Expression.
14212         (TypeExpr): This is now an abstract base class for `TypeExpression'.
14213         (TypeExpression): New public class; formerly known as `TypeExpr'.
14214
14215         * expression.cs (ComposedCast): Derive from TypeExpr.
14216
14217         * typemanager.cs (TypeManager.system_*_expr): These are now
14218         TypExpr's instead of Expression's.
14219         (TypeManager.ResolveExpressionTypes): New public static function;
14220         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
14221         of them.        
14222
14223 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
14224
14225         * expression.cs (New.DoResolve): Do not dereference value that
14226         might be a null return.
14227
14228         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
14229         sure that the constant value has the right type.  Fixes an
14230         unreported bug, similar to 50425.
14231
14232         * const.cs (Const.LookupConstantValue): Call
14233         ImplicitStandardConversionExists before doing a conversion to
14234         avoid havng the TypeManager.ChangeType do conversions.
14235
14236         Reduced the number of casts used
14237
14238         (Const.ChangeType): New routine to enable reuse of the constant
14239         type changing code from statement.
14240
14241         * typemanager.cs (ChangeType): Move common initialization to
14242         static global variables.
14243
14244         Fixes #50425.
14245
14246         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
14247         every value type to go through, even if it was void.  Fix that. 
14248
14249         * cs-tokenizer.cs: Use is_identifier_start_character on the start
14250         character of the define, and the is_identifier_part_character for
14251         the rest of the string.
14252
14253 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
14254
14255         * expression.cs (UnaryMutator.EmitCode): When I updated
14256         LocalVariableReference.DoResolve, I overdid it, and dropped an
14257         optimization done on local variable references.
14258
14259 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
14260
14261         * ecore.cs: Convert the return from Ldlen into an int.
14262
14263 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
14264
14265         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
14266         the accessibility, this is a special case for toplevel non-public
14267         classes (internal for instance).
14268
14269 2003-10-20  Nick Drochak <ndrochak@gol.com>
14270
14271         * ecore.cs: Fix typo and build.  Needed another right paren.
14272
14273 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
14274
14275         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
14276         `internal' case regular and protected, but not allowing protected
14277         to be evaluated later.  Bug 49840
14278
14279 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
14280
14281         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
14282         to kb.Nlast, and not the kb.nFirst to isolate the switch
14283         statement.
14284
14285         Extract the underlying type, so enumerations of long/ulong are
14286         treated like long/ulong.
14287
14288 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
14289
14290         * expression.cs (New): Overload the meaning of RequestedType to
14291         track the possible creation of the NewDelegate type, since
14292         DoResolve is invoked more than once for new constructors on field
14293         initialization.
14294
14295         See bugs: #48800 and #37014
14296
14297         * cs-parser.jay (declare_local_constants): Take an arraylist
14298         instead of a single constant.
14299
14300         (local_constant_declaration): It should take a
14301         constant_declarators, not a constant_declarator.  Fixes 49487
14302
14303         * convert.cs: Fix error report.
14304
14305 2003-10-13 Jackson Harper <jackson@ximian.com>
14306
14307         * typemanager.cs (TypeToCoreType): Add float and double this fixes
14308         bug #49611
14309         
14310 2003-11-03  Martin Baulig  <martin@ximian.com>
14311
14312         * expression.cs (ArrayAccess.GetStoreOpcode): Added
14313         `out bool has_type_arg'; if set, we need to pass the type to
14314         ig.Emit().
14315         (ArrayAccess.GetStoreOpcode, ArrayAccess.EmitLoadOpcode): Use
14316         Stelem_Any/Ldelem_Any for generic parameters.   
14317
14318 2003-11-02  Martin Baulig  <martin@ximian.com>
14319
14320         * expression.cs (Invocation.EmitCall): Use
14321         `TypeManager.IsValueType()' to check whether it's a value type.
14322         Don't set `struct_call' when calling a method on a type parameter.
14323
14324 2003-11-02  Martin Baulig  <martin@ximian.com>
14325
14326         * generics.cs (ConstructedType.Resolve): Renamed to ResolveType()
14327         and removed the TypeBuilder argument.
14328
14329         * typemanager.cs (TypeManager.IsValueType): Return
14330         `t.IsGenericParameter || t.IsValueType'.
14331
14332 2003-10-25  Martin Baulig  <martin@ximian.com>
14333
14334         * decl.cs (DeclSpace.ResolveType): If we're a ConstructedType,
14335         call ConstructedType.Resolve() on it.
14336
14337         * generic.cs (ConstructedType.Resolve): Set `type' on success.
14338
14339 2003-10-25  Martin Baulig  <martin@ximian.com>
14340
14341         * class.cs (TypeContainer.GetClassBases): Changed
14342         `out Type parent' into `out TypeExpr parent'.  Moved CS0644 and
14343         CS8214 reporting here.
14344         (TypeContainer.DefineType): GetClassBases() gives us a `TypeExpr'
14345         instead of a `Type' for our parent.  In case of a recursive
14346         declaration (see tests/gen-23.cs for an example), our parent is a
14347         ConstructedType and it doesn't have its type set.  So, first
14348         create our own TypeBuilder, then call constructed.Resolve() to get
14349         the parent's type and finally TypeBuilder.SetParent() it.
14350
14351         * ecore.cs (TypeExpr.Name): New public virtual property.
14352
14353         * generic.cs
14354         (ConstructedType): We're now a TypeExpr and not just an Expression.
14355         (ConstructedType.ResolveAsTypeStep): Don't resolve our type
14356         arguments here; this is done later.
14357         (ConstructedType.Resolve): New public method to resolve the type
14358         arguments and bind them.
14359
14360 2003-10-21  Martin Baulig  <martin@ximian.com>
14361
14362         * convert.cs: Use `TypeManager.IsValueType' instead of
14363         'type.IsValueType' everywhere.
14364
14365         * typemanager.cs (TypeManager.IsValueType): Return true for type
14366         parameters.  The reason for this is that we need to box a type
14367         parameter when converting it to a reference type.
14368
14369         * cs-parser.jay: Added support for default value expressions.
14370
14371         * generics.cs (DefaultValueExpression): New public class.       
14372
14373 2003-10-17  Martin Baulig  <martin@ximian.com>
14374
14375         * generic.cs (Constraints.Resolve): Take a DecpSpace instead of a
14376         TypeContainer so we can also use this for Interfaces.
14377         (TypeParameter.Resolve): Likewise.
14378
14379         * interface.cs (Interface.DefineType): Added support for generic
14380         interfaces.
14381
14382         * cs-parser.jay: Added support for generic structs and interfaces.
14383
14384 2003-10-17  Martin Baulig  <martin@ximian.com>
14385
14386         * generic.cs (GenericMemberAccess.DoResolve): We can now actually
14387         call generic methods :-)
14388
14389 2003-10-16  Martin Baulig  <martin@ximian.com>
14390
14391         * cs-parser.jay (namespace_or_type_name): Only create a
14392         GenericMemberAccess if we actually have type arguments.
14393
14394 2003-10-13  Martin Baulig  <martin@ximian.com>
14395
14396         * class.cs (Method.Define): If we're a generic method, call
14397         TypeBuilder.DefineGenericMethod () before resolving
14398         the parameters.
14399         (MethodData): Added .ctor which takes an additional MethodBuilder
14400         argument; this is used for generic methods.
14401         (MethodData.Define): Call `builder.SetGenericMethodSignature()' if
14402         we already have a MethodBuilder.
14403
14404 2003-10-10  Martin Baulig  <martin@ximian.com>
14405
14406         * class.cs (Method): Added .ctor which takes a `GenericMethod'
14407         instead of a `DeclSpace'.  This is used for generic methods.
14408
14409         * cs-parser.jay (method_header): Added support for generic
14410         methods; create a `GenericMethod' instance and pass it to the
14411         `Method's .ctor; it'll be used as the `DeclSpace' to lookup
14412         parameters and locals.
14413
14414         * decl.cs (DeclSpace.SetParameterInfo): Removed Location argument
14415         since we already have the location.  Check whether we're a generic
14416         type declaration or a generic method and create the correct type
14417         parameter.
14418
14419         * generic.cs (TypeParameter.DefineMethod): New public method.
14420         (GenericMethod): New public class; derives from DeclSpace and is
14421         used for generic methods.       
14422
14423 2003-10-09  Martin Baulig  <martin@ximian.com>
14424
14425         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
14426         to the .ctor.
14427         (MethodCore.DoDefineParameters): Removed the TypeContainer
14428         argument; use the DeclSpace which was passed to the .ctor instead.
14429         (MethodCore.CheckParameter): Take a DeclSpace instead of a
14430         TypeContainer; we only need a DeclSpace here.
14431
14432 2003-10-09  Martin Baulig  <martin@ximian.com>
14433
14434         * class.cs (MethodData): Added additional `DeclSpace ds' argument
14435         to the .ctor.
14436         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
14437         EmitContext's .ctor.    
14438
14439 2003-10-09  Martin Baulig  <martin@ximian.com>
14440
14441         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
14442         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
14443         AsAccessible(), moved them as well.
14444
14445         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
14446
14447 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
14448
14449         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
14450         generation for >=, as spotted by Paolo, bug 48679.  
14451         Patch from David Waite.
14452
14453         * cs-tokenizer.cs: Add handling for #pragma.
14454
14455         * cs-parser.jay: Allow for both yield and yield return in the
14456         syntax.  The anti-cobolization of C# fight will go on!
14457
14458         * class.cs (TypeBuilder.DefineType): Catch error condition here
14459         (Parent.DefineType erroring out and returning null).
14460
14461         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
14462         coping with enumerations variables, we were mistakenly processing
14463         them as a regular value type instead of built-in types.  Fixes the
14464         bug #48063
14465
14466         * typemanager.cs (IsBuiltinOrEnum): New method.
14467
14468 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
14469
14470         * cs-parser.jay: Upgrade: yield now needs the return clause.
14471
14472 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
14473
14474         * cs-parser.jay : Renamed yyName to yyNames related to jay.
14475
14476 2003-09-29  Martin Baulig  <martin@ximian.com>
14477
14478         * typemanager.cs (TypeManager.GetMethodFlags): Added support for
14479         inflated generic methods.
14480
14481         * generics.cs (ConstructedType): Distinguish between open and
14482         closed constructed types; correctly resolve the arguments.
14483
14484 2003-09-22  Martin Baulig  <martin@ximian.com>
14485
14486         * generic.cs (ConstructedType.ResolveAsTypeCheck): Check whether
14487         all type arguments meet their constraints.
14488
14489 2003-09-19  Martin Baulig  <martin@ximian.com>
14490
14491         * decl.cs (MemberCache.SetupCacheForInterface): Take a
14492         `MemberCache parent' argument.  Normally, an interface doesn't
14493         have a parent type except System.Object, but we use this in gmcs
14494         for generic type parameters.
14495
14496 2003-09-18  Martin Baulig  <martin@ximian.com>
14497
14498         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
14499         on `type.IsInterface'; don't check whether the type has a parent
14500         to determine whether it's an interface.
14501
14502 2003-09-17  Martin Baulig  <martin@ximian.com>
14503
14504         * generic.cs (ConstructedType.ToString): Always use `name' as the
14505         type name.
14506
14507 2003-09-15  Martin Baulig  <martin@ximian.com>
14508
14509         * cs-parser.jay: Fix grammar wrt. type_parameter_constraints.
14510
14511         * generic.cs (Constraints.Resolve): New public method; this is
14512         called to resolve the constraint types and to check whether all
14513         the constraints are correct.
14514         (Constraints.Types): New public property.
14515         (TypeParameter.Resolve): New public method; resolves all the
14516         type's constraints.
14517
14518         * class.cs (TypeContainer.DefineType): Call
14519         TypeParameter.Resolve() before actually defining the type.
14520
14521 2003-09-15  Martin Baulig  <martin@ximian.com>
14522
14523         * class.cs (TypeContainer.DefineType): Added an error flag to
14524         avoid reporting duplicate CS0146's ("class definition is
14525         circular.").
14526
14527         * driver.cs (Driver.MainDriver): Abort if
14528         RootContext.ResolveTree() reported any errors.
14529
14530 2003-09-07  Martin Baulig  <martin@ximian.com>
14531
14532         * report.cs (Error, Warning): Added overloaded versions which take
14533         a `params object[] args' and call String.Format().
14534
14535 2003-09-07  Martin Baulig  <martin@ximian.com>
14536
14537         * decl.cs (DeclSpace..ctor): Don't call
14538         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
14539         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
14540         (DeclSpace.RecordDecl): New method.
14541
14542         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
14543
14544 2003-09-02  Ravi Pratap  <ravi@ximian.com>
14545
14546         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
14547         value attributes to be applied to ParameterBuilders.
14548
14549         * class.cs (MethodCore.LabelParameters): Make static and more
14550         generic so that it can be used from other places - like interface
14551         methods, for instance.
14552
14553         * interface.cs (Interface.Emit): Call LabelParameters before
14554         emitting attributes on the InterfaceMethod.
14555
14556 2003-09-07  Martin Baulig  <martin@ximian.com>
14557
14558         * generic.cs (ConstructedType.ResolveAsTypeStep): Report a CS8217
14559         if the number of type parameters doesn't match.
14560
14561 2003-09-04  Martin Baulig  <martin@ximian.com>
14562
14563         * expression.cs (ComposedCast.ResolveAsTypeStep): Added support
14564         for arrays of generic type params (ie. `!0[]').
14565
14566 2003-09-04  Martin Baulig  <martin@ximian.com>
14567
14568         * class.cs (TypeContainer.AsAccessible): Ignore generic parameters
14569         for the moment.
14570
14571 2003-09-04  Martin Baulig  <martin@ximian.com>
14572
14573         * decl.cs (DeclSpace.LookupGeneric): New method.
14574         (DeclSpace.CheckAccessLevel): Ignore generic parameters for the
14575         moment.
14576
14577         * generic.cs (TypeParameterExpr): Take a TypeParameter as
14578         argument, not just a string.
14579         (TypeParameter.Define): New public method; this is called to
14580         actually define the generic parameter; after this, you can use the
14581         new `Type' property to get the type.
14582
14583 2003-09-04  Martin Baulig  <martin@ximian.com>
14584
14585         * decl.cs (DeclSpace.SetParameterInfo): The `constraints' argument
14586         is now an ArrayList; initialize the result of the `TypeParameters'
14587         property here.
14588         (DeclSpace.GetGenericData): Removed.
14589         (DeclSpace.LookupGeneric): Temporarily removed; we need to
14590         implement this in a different way.
14591         (DeclSpace.GetTypeParameters): Removed; there's now a
14592         `TypeParameters' property.
14593         (DeclSpace.TypeParameters): New public property.
14594
14595         * generic.cs (Constraints): Make this class public.
14596         (TypeParameter): New public class.
14597
14598 2003-09-04  Martin Baulig  <martin@ximian.com>
14599
14600         * decl.cs (DeclSpace.GetTypeParameters): New method to return the
14601         generic parameters.
14602
14603         * class.cs (TypeContainer.DefineType): Call
14604         TypeBuilder.DefineGenericParameter () on all generic parameters if
14605         this is a generic type.
14606
14607 2003-08-28  Martin Baulig  <martin@ximian.com>
14608
14609         * sample-stack.il: Compile this with ilasm: "ilasm /dll
14610         sample-stack.il".
14611
14612         * sample-hello.cs: Compile this with gmcs: "gmcs
14613         /r:sample-stack.dll sample-hello.cs".
14614
14615 2003-08-28  Martin Baulig  <martin@ximian.com>
14616
14617         * generic.cs (ConstructedType.ResolveAsTypeStep): Actually bind
14618         the parameters to the generic type.
14619
14620 2003-08-28  Martin Baulig  <martin@ximian.com>
14621
14622         * cs-tokenizer.cs (parse_less_than): Also allow all builtin types.
14623
14624 2003-08-28  Martin Baulig  <martin@ximian.com>
14625
14626         * cs-parser.jay (opt_type_argument_list): Use
14627         `OP_GENERICS_LT type_arguments OP_GENERICS_GT'.
14628         (primary_expression): Replace `qualified_identifier' with `type_name'.
14629         (type_parameter_list): Use `OP_GENERICS_LT type_parameters OP_GENERICS_GT'.
14630
14631         * cs-tokenizer.cs (is_punct): When reading a `<', invoke a custom
14632         parser to check whether it is syntactically a type parameter list;
14633         return OP_GENERICS_LT/OP_GENERICS_GT instead of OP_LT/OP_GT in
14634         this case.
14635
14636 2003-08-26  Martin Baulig  <martin@ximian.com>
14637
14638         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
14639         resolving aliases; fixes #47927.
14640
14641 2003-08-26  Martin Baulig  <martin@ximian.com>
14642
14643         * statement.cs (Using.DoResolve): This is internally emitting a
14644         try/finally clause, so we need to set ec.NeedExplicitReturn if we
14645         do not always return.  Fixes #47681.
14646
14647 2003-08-26  Martin Baulig  <martin@ximian.com>
14648
14649         * decl.cs (MemberCore): Moved WarningNotHiding(),
14650         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
14651         into MemberBase.
14652         (AdditionResult): Make this nested in DeclSpace.
14653         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
14654         argument; call NamespaceEntry.Define() unless we're nested in a
14655         class or struct.
14656
14657         * namespace.cs (Namespace.DefineName): New public function.  This
14658         is called from DeclSpace's .ctor to add 
14659         (Namespace.Lookup): Include DeclSpaces in the lookup.
14660
14661         * class.cs (Operator): Derive from MemberBase, not MemberCore.
14662
14663         * const.cs (Const): Derive from MemberBase, not MemberCore.     
14664
14665 2003-08-25  Martin Baulig  <martin@ximian.com>
14666
14667         * convert.cs (Convert.ExplicitReferenceConversion): When
14668         converting from an interface type to a class, unbox if the target
14669         type is a struct type.  Fixes #47822.
14670
14671 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14672
14673         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
14674         #47854.
14675
14676 2003-08-22  Martin Baulig  <martin@ximian.com>
14677
14678         * class.cs (TypeManager.DefineType): When defining a nested type,
14679         call DefineType() on our parent; fixes #47801.
14680
14681 2003-08-22  Martin Baulig  <martin@ximian.com>
14682
14683         * class.cs (MethodData.Define): While checking if a method is an
14684         interface implementation, improve the test a bit more to fix #47654.
14685
14686 2003-08-22  Martin Baulig  <martin@ximian.com>
14687
14688         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
14689         correctly; fixes #47722.
14690
14691 2003-08-22  Martin Baulig  <martin@ximian.com>
14692
14693         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
14694         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
14695
14696         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
14697
14698 2003-08-22  Martin Baulig  <martin@ximian.com>
14699
14700         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
14701         can only be assigned in static constructors.  Fixes #47161.
14702
14703 2003-08-22  Martin Baulig  <martin@ximian.com>
14704
14705         Rewrote and improved the flow analysis code.
14706
14707         * flowbranching.cs (FlowBranching): Make this class abstract.
14708         (FlowBranching.CreateBranching): New static function to create a
14709         new flow branching.
14710         (FlowBranchingBlock, FlowBranchingException): New classes.
14711         (FlowBranching.UsageVector.Type): New public readonly field.
14712         (FlowBranching.UsageVector.Breaks): Removed the setter.
14713         (FlowBranching.UsageVector.Returns): Removed the setter.
14714         (FlowBranching.UsageVector): Added Break(), Return(),
14715         NeverReachable() and Throw() methods to modify the reachability.
14716         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
14717         done by FlowBranching.Merge().
14718         (FlowBranching.UsageVector.MergeChild): New method; merges the
14719         merge result into the current vector.
14720         (FlowBranching.Merge): New abstract method to merge a branching.
14721
14722 2003-08-12  Martin Baulig  <martin@ximian.com>
14723
14724         * expression.cs (Indirection.CacheTemporaries): Create the
14725         LocalTemporary with the pointer type, not its element type.
14726
14727 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
14728
14729         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
14730         token was a keyword or not.
14731
14732         Add `error' options where an IDENTIFIER was expected;  Provide
14733         CheckToken and CheckIdentifierToken convenience error reporting
14734         functions. 
14735
14736         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
14737
14738         * decl.cs: Rename `NamespaceEntry Namespace' public field into
14739         NameSpaceEntry NameSpaceEntry.
14740
14741         (LookupInterfaceOrClass): Avoid creating a full qualified name
14742         from namespace and name: avoid doing lookups when we know the
14743         namespace is non-existant.   Use new Tree.LookupByNamespace which
14744         looks up DeclSpaces based on their namespace, name pair.
14745
14746         * driver.cs: Provide a new `parser verbose' to display the
14747         exception thrown during parsing.  This is turned off by default
14748         now, so the output of a failure from mcs is more graceful.
14749
14750         * namespace.cs: Track all the namespaces defined in a hashtable
14751         for quick lookup.
14752
14753         (IsNamespace): New method
14754
14755 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
14756
14757         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
14758         we know that we need to concatenate (full typename can never be
14759         null). 
14760
14761         * class.cs: ditto.
14762
14763         * statement.cs: Use a bitfield;  Do not initialize to null things
14764         which are done by the constructor by default.
14765
14766         * cs-parser.jay: bug fix, parameter was 4, not 3.
14767
14768         * expression.cs: Just use the property;
14769
14770         * statement.cs: No need for GetVariableInfo method.
14771
14772 2003-08-08  Martin Baulig  <martin@ximian.com>
14773
14774         * flowanalysis.cs (FlowReturns): This is now nested in the
14775         `FlowBranching' class.
14776         (MyBitVector): Moved this here from statement.cs.
14777         (FlowBranching.SiblingType): New enum type.
14778         (FlowBranching.CreateSibling): Added `SiblingType' argument.
14779
14780 2003-08-07  Martin Baulig  <martin@ximian.com>
14781
14782         * flowanalysis.cs (FlowBranchingType): This is now nested in the
14783         `FlowBranching' class and called `BranchingType'.
14784
14785 2003-08-07  Martin Baulig  <martin@ximian.com>
14786
14787         * flowanalysis.cs: Moved all the control flow analysis code into
14788         its own file.
14789
14790 2003-08-07  Martin Baulig  <martin@ximian.com>
14791
14792         * assign.cs (Assign.DoResolve): `target' must either be an
14793         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
14794         #37319.
14795
14796 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
14797
14798         * expression.cs (BinaryMethod): This kind of expression is created by the
14799         Binary class if it determines that the operator has to be handled
14800         by a method.
14801
14802         (BinaryDelegate): This kind of expression is created if we are
14803         dealing with a + or - operator on delegates.
14804
14805         (Binary): remove method, argumetns, and DelegateOperator: when
14806         dealing with methods, 
14807
14808         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
14809
14810         * statement.cs (Block): use bitfields for the three extra booleans
14811         we had in use.   Remove unused topblock parameter.
14812
14813         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
14814
14815         * assign.cs: Drop extra unneeded tests.
14816
14817 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
14818
14819         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
14820
14821         * statement.cs (Foreach): Use VariableStorage instead of
14822         LocalBuilders.   
14823
14824         * codegen.cs (VariableStorage): New class used by clients that
14825         require a variable stored: locals or fields for variables that
14826         need to live across yield.
14827
14828         Maybe provide a convenience api for EmitThis+EmitLoad?
14829
14830         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
14831         these bad boys.
14832
14833 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
14834
14835         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
14836         RemapParameterLValue): New methods that are used to turn a
14837         precomputed FieldInfo into an expression like this:
14838
14839                 instance.FieldInfo
14840
14841         The idea is to use this instead of making LocalVariableReference
14842         have more than one meaning.
14843
14844         * cs-parser.jay: Add error production to BASE.
14845
14846         * ecore.cs: Deal with TypeManager.GetField returning null, which
14847         is now a valid return value.
14848
14849         (FieldExprNoAddress): New expression for Fields whose address can
14850         not be taken.
14851
14852         * expression.cs (LocalVariableReference): During the resolve
14853         phases, create new expressions if we are in a remapping context.
14854         Remove code that dealt with remapping here.
14855
14856         (ParameterReference): same.
14857
14858         (ProxyInstance): New expression, like the `This' expression, but
14859         it is born fully resolved.  We know what we are doing, so remove
14860         the errors that are targeted to user-provided uses of `this'.
14861
14862         * statement.cs (Foreach): our variable is now stored as an
14863         Expression;  During resolution, follow the protocol, dont just
14864         assume it will return this.
14865
14866 2003-08-06  Martin Baulig  <martin@ximian.com>
14867
14868         * support.cs (SeekableStreamReader.cs): New public class.
14869
14870         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
14871         SeekableStreamReader instead of the normal StreamReader.
14872
14873 2003-08-04  Martin Baulig  <martin@ximian.com>
14874
14875         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
14876         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
14877         deambiguate casts and delegate invocations.
14878         (parenthesized_expression): Use the new tokens to ensure this is
14879         not a cast of method invocation.
14880
14881         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
14882         when reading a `)' and Deambiguate_CloseParens () was previously
14883         called.
14884
14885         * expression.cs (ParenthesizedExpression): New class.  This is
14886         just used for the CS0075 test.
14887         (Binary.DoResolve): Check for CS0075.   
14888
14889 2003-07-29  Ravi Pratap  <ravi@ximian.com>
14890
14891         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
14892         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
14893         reference comparison.
14894
14895         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
14896         examine the ReturnType for equality - this is necessary in the
14897         cases of implicit and explicit operators whose signature also
14898         includes the return type.
14899
14900 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
14901
14902         * namespace.cs: Cache the result of the namespace computation,
14903         instead of computing it every time.
14904
14905 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14906
14907         * decl.cs: Use a global arraylist that we reuse over invocations
14908         to avoid excesive memory consumption.  Reduces memory usage on an
14909         mcs compile by one meg (45 average).
14910
14911         * typemanager.cs (LookupTypeReflection): In .NET pointers are
14912         private, work around that.
14913
14914 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
14915
14916         * literal.cs (IntLiteral): Define Zero and One static literals. 
14917
14918         * cs-parser.jay (integer_literal): use static literals to reduce
14919         memory usage for the most used literals (0, 1 and -1).  211kb
14920         reduced in memory usage.
14921
14922         Replace all calls to `new ArrayList' with `new
14923         ArrayList(4)' which is a good average number for most allocations,
14924         and also requires only 16 bytes of memory for its buffer by
14925         default. 
14926
14927         This reduced MCS memory usage in seven megabytes for the RSS after
14928         bootstrapping.
14929
14930 2003-07-28  Ravi Pratap  <ravi@ximian.com>
14931
14932         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
14933         handle params methods the correct way by forming only one
14934         applicable set with params and normal methods in them. Earlier we
14935         were looking at params methods only if we found no normal methods
14936         which was not the correct thing to do.
14937
14938         (Invocation.BetterFunction): Take separate arguments indicating
14939         when candidate and the best method are params methods in their
14940         expanded form.
14941
14942         This fixes bugs #43367 and #46199.
14943
14944         * attribute.cs: Documentation updates.
14945
14946         (CheckAttribute): Rename to CheckAttributeTarget.
14947         (GetValidPlaces): Rename to GetValidTargets.
14948
14949         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
14950         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
14951
14952         Fixes bug #44468.
14953
14954 2003-07-28  Miguel de Icaza  <miguel@ximian.com>
14955
14956         * codegen.cs: Compute IsGeneric correctly.
14957
14958         * cs-parser.jay: Introduce OP_GENERIC_LT for the grammar ambiguity
14959         resolution. 
14960
14961         Bring back (temporarily) OP_LEFT_SHIFT, OP_RIGHT_SHIFT,
14962         OP_SHIFT_RIGHT_ASSIGN, OP_SHIFT_LEFT_ASSIGN.  There were too many
14963         regressions, and I was chasing more bugs than I required.
14964
14965         * interface.cs: Use expressions for base type names (like classes
14966         and structs have been doing for a while now), and resolve that.
14967         This patch should probably go into head as well.
14968
14969         This makes it one less user of FindType.
14970
14971 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14972
14973         This compiler can not self host currently.  Need to fix that.
14974         
14975         * Makefile: compile to `gmcs.exe'
14976
14977         * driver.cs: Turn on v2 by default on gmcs.
14978
14979         * generic.cs (ConstructedType): Does no longer take a container
14980         type argument;  That will be taken care of later.
14981
14982         (ConstructedType.DoResolve, ConstructedType.ResolveAsTypeStep):
14983         Use SimpleName to resolve for now, so we can continue the work on
14984         the parser, until we get Type.GetType that understands generics.
14985
14986         (ConstructedType.ToString): Implement
14987
14988         (TypeArguments.Resolve): Resolve the child expressions as types. 
14989         
14990         * cs-parser.jay: Rename interface_constraints to
14991         type_parameter_constraints
14992
14993         (namespace_or_type_name): Only use constructed types for the basic
14994         construction, we will deal with identifier<...> later.
14995
14996         (type/type_name): No longer call DecomposeQI, as
14997         namespace_or_type_name is always decoded now.
14998         
14999 2003-07-22  Ravi Pratap  <ravi@ximian.com>
15000
15001         * expression.cs (Invocation.OverloadResolve): Follow the spec more
15002         closely: we eliminate methods in base types when we have an
15003         applicable method in a top-level type.
15004
15005         Please see section 14.5.5.1 for an exact description of what goes
15006         on. 
15007
15008         This fixes bug #45127 and a host of other related to corlib compilation.
15009
15010         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
15011         array is the method corresponding to the top-level type (this is
15012         because of the changes made to icall.c) so we change this
15013         accordingly.
15014
15015         (MethodGroupExpr.Name): This too.
15016
15017         * typemanager.cs (GetElementType): New method which does the right
15018         thing when compiling corlib. 
15019
15020         * everywhere: Make use of the above in the relevant places.
15021
15022 2003-07-22  Martin Baulig  <martin@ximian.com>
15023
15024         * cs-parser.jay (invocation_expression): Moved
15025         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
15026         `cast_expression', but create a InvocationOrCast which later
15027         resolves to either an Invocation or a Cast.
15028
15029         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
15030         method; call this before EmitStatement() to make sure that this
15031         expression can be used as a statement.
15032
15033         * expression.cs (InvocationOrCast): New class; resolves to either
15034         an Invocation or a Cast.
15035
15036         * statement.cs (StatementExpression): Call ResolveStatement() on
15037         the ExpressionStatement before emitting it.
15038
15039 2003-07-21  Martin Baulig  <martin@ximian.com>
15040
15041         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
15042         `ref' and `out' attributes match; fixes #46220.
15043         (MemberAccess.ResolveMemberAccess): You can't reference a type
15044         through an expression; fixes #33180.
15045         (Indexers.GetIndexersForType): Don't return the indexers from
15046         interfaces the class implements; fixes #46502.
15047
15048 2003-07-21  Martin Baulig  <martin@ximian.com>
15049
15050         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
15051         CS0661 checks; fixes bug #30442.
15052
15053 2003-07-21  Martin Baulig  <martin@ximian.com>
15054
15055         * decl.cs (AdditionResult): Added `Error'.
15056
15057         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
15058
15059         * typemanager.cs (TypeManager.ChangeType): Catch exceptions; makes
15060         cs0031.cs actually work.
15061
15062  2003-07-20  Miguel de Icaza  <miguel@ximian.com>
15063  
15064         * cs-parser.jay (namespace_name): do not use
15065         namespace_or_type_name, use qualified_identifier, because
15066         namespace_or_type_name will soon return a composed expression
15067         instead of a string.
15068  
15069         (namespace_or_type_name): Instead of returning a string, now this
15070         production returns an expression.
15071  
15072         * codegen.cs (EmitContext): Setup IsGeneric property based on
15073         whether our DeclSpace is generic, our the method is generic.
15074  
15075         * modifier.cs (Modifiers.METHOD_GENERIC): New definition, use if
15076         the method is generic.
15077  
15078         * cs-parser.jay (type_arguments, opt_type_argument_list,
15079         type_parameters, type_parameter_list, opt_type_parameter_list,
15080         type_parameter,, opt_type_parameter_constraints_clauses,
15081         type_parameter_constraints_clauses,
15082         type_parameter_constraint_clause, type_parameter_constraint,
15083         interface_constraints): Add new production
15084  
15085         * decl.cs (DeclSpace): IsGeneric, flag to track whether this
15086         DeclSpace is generic or not.
15087  
15088         (DeclSpace.SetParameterInfo): New routine, used to set the
15089         parameter info for a type.
15090  
15091         (DeclSpace.LookupGeneric): Lookups a name, and if it is a generic,
15092         returns a GenericTypeExpr
15093  
15094         * ecore.cs (SimpleName.ResolveAsTypeStep): If our container is
15095         generic, lookup the generic argument.
15096  
15097         * attribute.cs: Do not allow TypeParameterExpressions in
15098         Attributes.
15099  
15100         * class.cs: Do not allow the Main method to be defined in a
15101         Generic container.
15102  
15103         * expression.cs (SizeOf): Do not allow generic types to be used as
15104         arguments to sizeof.
15105  
15106         * typemanager.cs (IsGeneric): Wrapper for Reflection when we have
15107         it: whether a type is generic or not.  Only works for types we are
15108         currently building for now.
15109         
15110 2003-07-20  Martin Baulig  <martin@ximian.com>
15111
15112         * namespace.cs: Fixed that bug which caused a crash when compiling
15113         the debugger's GUI.
15114
15115 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
15116
15117         * typemanager.cs (LookupTypeReflection): Never expose types which
15118         are NotPublic, NestedPrivate, NestedAssembly, or
15119         NestedFamANDAssem.  We used to return these, and later do a check
15120         that would report a meaningful error, but the problem is that we
15121         would not get the real match, if there was a name override.
15122
15123 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
15124
15125         * namespace.cs (Namespace, Name): Do not compute the namespace
15126         name dynamically, compute it in the constructor.  This reduced
15127         memory usage by 1697 KB.
15128
15129         * driver.cs: Use --pause to pause at the end.
15130
15131 2003-07-17  Peter Williams  <peter@newton.cx>
15132
15133         * Makefile: Change the name of the test target so that it doesn't
15134         conflict with the recursive test target.
15135
15136 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
15137
15138         * expression.cs (LocalVariableReference.Emit, EmitAssign,
15139         AddressOf): Do not use EmitThis, that was wrong, use the actual
15140         this pointer.
15141
15142 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
15143
15144         * class.cs (MethodData.Define): While checking if a method is an
15145         interface implementation, improve the test: If we are not public
15146         (use new test here: use the computed MethodAttributes directly,
15147         instead of the parsed modifier flags) check if the `implementing'
15148         method comes from an interface or not.
15149
15150         * pending.cs (VerifyPendingMethods): Slightly better error
15151         message.
15152
15153         * makefile: add test target that does the mcs bootstrap.
15154
15155 2003-07-16  Ravi Pratap  <ravi@ximian.com>
15156
15157         * interface.cs (Define): Do nothing here since there are no
15158         members to populate etc. Move the attribute emission out of here
15159         since this was just totally the wrong place to put it. Attribute
15160         application happens during the 'Emit' phase, not in the 'Define'
15161         phase.
15162
15163         (Emit): Add this method and move the attribute emission here
15164
15165         * rootcontext.cs (EmitCode): Call the Emit method on interface
15166         types too.
15167
15168 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
15169
15170         * expression.cs (OverloadResolve): Report error only if Location
15171         is not 'Null' which means that there was a probe going on.
15172
15173 2003-07-14  Martin Baulig  <martin@ximian.com>
15174
15175         * expression.cs (ConditionalLogicalOperator): New public class to
15176         implement user defined conditional logical operators.
15177         This is section 14.11.2 in the spec and bug #40505.
15178
15179 2003-07-14  Martin Baulig  <martin@ximian.com>
15180
15181         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
15182
15183 2003-07-14  Martin Baulig  <martin@ximian.com>
15184
15185         * codegen.cs (EmitContext.InFixedInitializer): New public field.
15186
15187         * ecore.cs (IVariable.VerifyFixed): New interface method.
15188
15189         * expression.cs (Unary.ResolveOperator): When resolving the `&'
15190         operator, check whether the variable is actually fixed.  Fixes bug
15191         #36055.  Set a variable definitely assigned when taking its
15192         address as required by the spec.
15193
15194         * statement.cs (LocalInfo.IsFixed): New field.
15195         (LocalInfo.MakePinned): Set `IsFixed' to true.
15196
15197 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
15198
15199         * attribute.cs (Attribute.Resolve): While doing a Member lookup
15200         for .ctors, ensure that we only ask for members declared in the
15201         attribute type (BindingFlags.DeclaredOnly).
15202
15203         Fixes bug #43632.
15204
15205         * expression.cs (Error_WrongNumArguments): Report error 1501
15206         correctly the way CSC does.
15207
15208 2003-07-13  Martin Baulig  <martin@ximian.com>
15209
15210         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
15211         lookup on the fully qualified name, to make things like "X.X" work
15212         where "X.X" is a fully qualified type name, but we also have a
15213         namespace "X" in the using list.  Fixes #41975.
15214
15215 2003-07-13  Martin Baulig  <martin@ximian.com>
15216
15217         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
15218         function. If we're a CompoundAssign, we need to create an embedded
15219         CompoundAssign, not an embedded Assign.
15220         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
15221         Fixes #45854.
15222
15223 2003-07-13  Martin Baulig  <martin@ximian.com>
15224
15225         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
15226         work to fix bug #46088.
15227
15228 2003-07-13  Ravi Pratap <ravi@ximian.com>
15229
15230         * class.cs (Operator.Emit): Do not emit attributes here - it is
15231         taken care of by the Method class that we delegate too. This takes
15232         care of bug #45876.
15233
15234 2003-07-10  Martin Baulig  <martin@ximian.com>
15235
15236         * expression.cs (TypeOfVoid): New class.
15237         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
15238
15239 2003-07-10  Martin Baulig  <martin@ximian.com>
15240
15241         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
15242         bug #35957.
15243
15244 2003-07-10  Martin Baulig  <martin@ximian.com>
15245
15246         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
15247         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
15248
15249         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
15250
15251         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
15252
15253 2003-07-10  Martin Baulig  <martin@ximian.com>
15254
15255         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
15256         of decimal.  Fixes #42850.
15257
15258         NOTE: I also fixed the created byte blob, but this doesn't work on
15259         the MS runtime and csc never produces any byte blobs for decimal
15260         arrays.
15261
15262 2003-07-10  Martin Baulig  <martin@ximian.com>
15263
15264         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
15265         structs; fixes #32068.
15266         (Block.AddChildVariableNames): Fixed #44302.
15267
15268 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15269
15270         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
15271
15272 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
15273
15274         * attribute.cs: And this test is onger needed.
15275
15276 2003-07-08  Martin Baulig  <martin@ximian.com>
15277
15278         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
15279         inaccessible types.  Fixes #36313.
15280
15281         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
15282
15283         * namespace.cs (NamespaceEntry): Create implicit entries for all
15284         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
15285         implicit entries for N1.N2 and N1.
15286
15287 2003-07-08  Martin Baulig  <martin@ximian.com>
15288
15289         Rewrote the handling of namespaces to fix a lot of the issues
15290         wrt. `using' aliases etc.
15291
15292         * namespace.cs (Namespace): Splitted this class into a
15293         per-assembly `Namespace' and a per-file `NamespaceEntry'.
15294
15295         * typemanager.cs (TypeManager.IsNamespace): Removed.
15296         (TypeManager.ComputeNamespaces): Only compute namespaces from
15297         loaded assemblies here, not the namespaces from the assembly we're
15298         currently compiling.
15299
15300 2003-07-08  Martin Baulig  <martin@ximian.com>
15301
15302         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
15303
15304 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
15305
15306         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
15307         already fixed it.  
15308
15309         I thought about the memory savings here, but LookupTypeReflection
15310         is used under already very constrained scenarios.  Compiling
15311         corlib or mcs only exposes one hit, so it would not really reduce
15312         any memory consumption.
15313
15314 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15315
15316         * typemanager.cs: fixes bug #45889 by only adding public types from
15317         other assemblies to the list of known types.
15318
15319 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
15320
15321         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
15322         on the type we resolved.
15323
15324 2003-07-05  Martin Baulig  <martin@ximian.com>
15325
15326         * pending.cs (PendingImplementation.ParentImplements): Don't
15327         create the proxy if the parent is abstract.
15328
15329         * class.cs (TypeContainer.DefineIndexers): Process explicit
15330         interface implementations first.  Fixes #37714.
15331
15332 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
15333
15334         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
15335         defined recursively;  but since we modify the input parameters
15336         (left is set to `this' temporarily), we reset this value if the
15337         left_is_explicit is false, which gives the original semantics to
15338         the code.  
15339
15340         * literal.cs (NullPointer): new class used to represent a null
15341         literal in a pointer context.
15342
15343         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
15344         type is a pointer, use a NullPointer object instead of a
15345         NullLiteral.   Closes 43687
15346
15347         (ExplicitConversion): Convert pointer values using
15348         the conv opcode to the proper type.
15349
15350         * ecore.cs (New): change ValueTypeVariable property into a method,
15351         that returns whether the valuetype is suitable for being used.
15352
15353         * expression.cs (Binary.DoNumericPromotions): Only return if we
15354         the int constant was a valid uint, and we can return both left and
15355         right as uints.  If not, we continue processing, to trigger the
15356         type conversion.  This fixes 39018.
15357
15358         * statement.cs (Block.EmitMeta): During constant resolution, set
15359         the CurrentBlock property on the emitcontext, so that we resolve
15360         constants propertly.
15361
15362 2003-07-02  Martin Baulig  <martin@ximian.com>
15363
15364         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
15365         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
15366
15367         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
15368         than emitting it here.
15369
15370         * statement.cs: Fixed some more flow analysis bugs.
15371
15372 2003-07-02  Martin Baulig  <martin@ximian.com>
15373
15374         * class.cs (MethodData.Define): When implementing interface
15375         methods, set Final unless we're Virtual.
15376
15377         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
15378         check work for interface methods.
15379
15380 2003-07-01  Martin Baulig  <martin@ximian.com>
15381
15382         * ecore.cs (EmitContext.This): Replaced this property with a
15383         GetThis() method which takes a Location argument.  This ensures
15384         that we get the correct error location for a CS0188.
15385
15386 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
15387
15388         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
15389         ImplicitStandardConversion.
15390
15391         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
15392
15393 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
15394
15395         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
15396         optimization.
15397
15398 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
15399
15400         * class.cs (Constructor.Define): Turn off initlocals for unsafe
15401         constructors.
15402
15403         (MethodData.Define): Turn off initlocals for unsafe methods.
15404
15405 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
15406
15407         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
15408         complete;  Fixes #37521.
15409
15410         * delegate.cs: Use Modifiers.TypeAttr to compute the
15411         TypeAttributes, instead of rolling our own.  This makes the flags
15412         correct for the delegates.
15413
15414 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
15415
15416         * class.cs (Constructor.Define): Set the private flag for static
15417         constructors as well.
15418
15419         * cs-parser.jay (statement_expression): Set the return value to
15420         null, to avoid a crash when we catch an error.
15421
15422 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
15423
15424         * cs-parser.jay: Applied patch from Jackson that adds support for
15425         extern and unsafe modifiers to destructor declarations.
15426
15427         * expression.cs: Report error 21 if the user is trying to index a
15428         System.Array.
15429
15430         * driver.cs: Add an error message, suggested by the bug report.
15431
15432         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
15433         if we do not have a ": this ()" constructor initializer.  Fixes 45149
15434
15435 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
15436
15437         * namespace.cs: Add some information to reduce FAQs.
15438
15439 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
15440
15441         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
15442         underlying enumeration types.  Fixes #43915.
15443
15444         * expression.cs: Treat ushort/short as legal values to be used in
15445         bitwise operations.
15446
15447 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
15448
15449         * delegate.cs: transfer custom attributes for paramenters from
15450         the delegate declaration to Invoke and BeginInvoke.
15451
15452 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
15453
15454         * attribute.cs: handle custom marshalers and emit marshal info
15455         for fields, too.
15456
15457 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
15458
15459         * makefile.gnu: Added anonymous.cs to the compiler sources.
15460
15461 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
15462
15463         * iterators.cs: Change the name of the proxy class to include two
15464         underscores.
15465
15466         * cs-parser.jay: Update grammar to include anonymous methods.
15467
15468         * anonymous.cs: new file.
15469
15470 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
15471
15472         * class.cs (Field.Define): Add missing test for pointers and
15473         safety. 
15474
15475 2003-05-27  Ravi Pratap  <ravi@ximian.com>
15476
15477         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
15478         we use the stobj opcode.
15479
15480         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
15481         since it wasn't the correct fix. 
15482
15483         It still is puzzling that we are required to use stobj for IntPtr
15484         which seems to be a ValueType.
15485
15486 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
15487
15488         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
15489         during regular simple name resolution.   Now, the trick is that
15490         instead of returning for processing the simplename, we do a
15491         TypeManager.LookupType (ie, a rooted lookup as opposed to a
15492         contextual lookup type).   If a match is found, return that, if
15493         not, return for further composition.
15494
15495         This fixes long-standing 30485.
15496
15497         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
15498         using the address to initialize an object, do an Stobj instead of
15499         using the regular Stelem.
15500
15501         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
15502         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
15503         Because if we are a BaseIndexerAccess that value will be true.
15504         Fixes 43643.
15505
15506         * statement.cs (GotoCase.Resolve): Return after reporting an
15507         error, do not attempt to continue. 
15508
15509         * expression.cs (PointerArithmetic.Emit): If our operand is a
15510         long, convert our constants to match the operand before
15511         multiplying.  Convert to I type before adding.   Fixes 43670.
15512
15513 2003-05-14  Ravi Pratap  <ravi@ximian.com>
15514
15515         * enum.cs (ImplicitConversionExists) : Rename to
15516         ImplicitEnumConversionExists to remove ambiguity. 
15517
15518         * ecore.cs (NullCast): New type of cast expression class which
15519         basically is very similar to EmptyCast with the difference being
15520         it still is a constant since it is used only to cast a null to
15521         something else
15522         (eg. (string) null)
15523
15524         * convert.cs (ImplicitReferenceConversion): When casting a null
15525         literal, we return a NullCast.
15526
15527         * literal.cs (NullLiteralTyped): Remove - I don't see why this
15528         should be around anymore.
15529
15530         The renaming (reported was slightly wrong). Corrections:
15531
15532         ConvertImplicitStandard -> ImplicitConversionStandard
15533         ConvertExplicitStandard -> ExplicitConversionStandard
15534
15535         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
15536         before passing them in !
15537
15538         * convert.cs (ImplicitConversionStandard): When comparing for
15539         equal expr and target types, ensure that expr is not a
15540         NullLiteral.
15541
15542         In general, we must not be checking (expr_type ==
15543         target_type) in the top level conversion methods
15544         (ImplicitConversion, ExplicitConversion etc). This checking is
15545         done in the methods that they delegate to.
15546
15547 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
15548
15549         * convert.cs: Move Error_CannotConvertType,
15550         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
15551         ImplicitNumericConversion, ImplicitConversionExists,
15552         ImplicitUserConversionExists, StandardConversionExists,
15553         FindMostEncompassedType, FindMostSpecificSource,
15554         FindMostSpecificTarget, ImplicitUserConversion,
15555         ExplicitUserConversion, GetConversionOperators,
15556         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
15557         TryImplicitIntConversion, Error_CannotConvertImplicit,
15558         ConvertImplicitRequired, ConvertNumericExplicit,
15559         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
15560         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
15561         its own file.
15562
15563         Perform the following renames:
15564
15565         StandardConversionExists -> ImplicitStandardConversionExists
15566         ConvertImplicit -> ImplicitConversion
15567         ConvertImplicitStandard -> ImplicitStandardConversion
15568         TryImplicitIntConversion -> ImplicitIntConversion
15569         ConvertImplicitRequired -> ImplicitConversionRequired
15570         ConvertNumericExplicit -> ExplicitNumericConversion
15571         ConvertReferenceExplicit -> ExplicitReferenceConversion
15572         ConvertExplicit -> ExplicitConversion
15573         ConvertExplicitStandard -> ExplicitStandardConversion
15574
15575 2003-05-19  Martin Baulig  <martin@ximian.com>
15576
15577         * statement.cs (TypeInfo.StructInfo): Made this type protected.
15578         (TypeInfo): Added support for structs having structs as fields.
15579
15580         * ecore.cs (FieldExpr): Implement IVariable.
15581         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
15582         VariableInfo for the field.
15583
15584 2003-05-18  Martin Baulig  <martin@ximian.com>
15585
15586         * expression.cs (This.DoResolve): Report a CS0027 if we're
15587         emitting a field initializer.
15588
15589 2003-05-18  Martin Baulig  <martin@ximian.com>
15590
15591         * expression.cs (This.ResolveBase): New public function.
15592         (This.DoResolve): Check for CS0188.
15593
15594         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
15595         This.Resolve().
15596
15597         * ecore.cs (MethodGroupExpr.DoResolve): Set the
15598         `instance_expression' to null if we don't have any non-static
15599         methods.
15600
15601 2003-05-18  Martin Baulig  <martin@ximian.com>
15602
15603         Reworked the way how local variables and parameters are handled by
15604         the flow analysis code.
15605
15606         * statement.cs (TypeInfo, VariableMap): New public classes.
15607         (VariableInfo): New public class.  This is now responsible for
15608         checking whether a variable has been assigned.  It is used for
15609         parameters and local variables.
15610         (Block.EmitMeta): Take the InternalParameters as argument; compute
15611         the layout of the flow vectors here.
15612         (Block.LocalMap, Block.ParameterMap): New public properties.
15613         (FlowBranching): The .ctor doesn't get the InternalParameters
15614         anymore since Block.EmitMeta() now computes the layout of the flow
15615         vector.
15616         (MyStructInfo): This class is now known as `StructInfo' and nested
15617         in `TypeInfo'; we don't access this directly anymore.
15618
15619         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
15620         property and removed IsAssigned(), IsFieldAssigned(),
15621         SetAssigned() and SetFieldAssigned(); we now call them on the
15622         VariableInfo so we don't need to duplicate this code everywhere.
15623
15624         * expression.cs (ParameterReference): Added `Block block' argument
15625         to the .ctor.
15626         (LocalVariableReference, ParameterReference, This): The new
15627         VariableInfo class is now responsible for all the definite
15628         assignment stuff.
15629
15630         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
15631         IsParameterAssigned, SetParameterAssigned): Removed.
15632
15633 2003-05-18  Martin Baulig  <martin@ximian.com>
15634
15635         * typemanager.cs (InitCoreTypes): Try calling
15636         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
15637         the 3-args-version.  Corlib now also needs our `void_type'.
15638         (GetMethod): Added overloaded version which takes an optional
15639         `bool report_errors' to allow lookups of optional methods.
15640
15641 2003-05-12  Martin Baulig  <martin@ximian.com>
15642
15643         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
15644         only used for locals and not for parameters.
15645
15646 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
15647
15648         * support.cs (InternalParameters.ParameterType): Return the
15649         ExternalType of the parameter.
15650
15651         * parameter.cs (Parameter.ExternalType): drop the two arguments,
15652         they were unused.
15653
15654 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
15655
15656         * class.cs (MethodData.Define): Do not set the `newslot' on
15657         interface members, if they are also flagged as "override".
15658
15659         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
15660         better code for ++i and i++.  This only works for static fields
15661         and local variables.
15662
15663         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
15664         want to pull the DeclSpace out of the builder_to_declspace instead
15665         of the TypeBuilder (like in TypeContainer.FindMembers).
15666
15667         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
15668         instead of LookupTypeContainer.  Fixes the crash on .NET for
15669         looking up interface members.
15670
15671         * const.cs: Create our own emit context during the Definition
15672         stage, so that constants are evaluated in the proper context, when
15673         a recursive definition happens.
15674
15675 2003-05-11  Martin Baulig  <martin@ximian.com>
15676
15677         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
15678         new block for a switch section.
15679         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
15680         the adding/lookup in the switch block.  Fixes #39828.
15681
15682 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
15683
15684         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
15685         functionality: I needed to convert the data after I had performed
15686         the add/sub operation into the operands type size.
15687
15688         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
15689         pass the type for the box operation, otherwise the resulting
15690         object would have been of type object.
15691
15692         (BoxedCast): Add constructor to specify the type to box as.
15693
15694 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
15695
15696         * iterators.cs: I was reusing the `count' variable inadvertently,
15697         take steps to not allow this to happen.
15698
15699 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
15700
15701         * attribute.cs (Attribute.Resolve): Params attributes are encoded
15702         by creating an array at the point where the params starts and
15703         putting all those arguments there, then adjusting the size of the
15704         array.
15705
15706 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
15707
15708         * expression.cs (New.AddressOf): Implement interface
15709         IMemoryLocation.  This is used when the `new' operator is used in
15710         the context of an invocation to a method on a value type.
15711
15712         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
15713         example. 
15714
15715         * namespace.cs: Also check the using aliases here.
15716
15717         * driver.cs: Move the test for using validity after the types have
15718         been entered, so we do a single pass that also includes the using
15719         aliases. 
15720
15721         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
15722         in the regular case.   CreateSiblingForFinally is doing extra
15723         error checking.
15724
15725         * attribute.cs (GetAttributeArgumentExpression): Store the result
15726         on an out value, and use the return value to indicate failure
15727         instead of using null (which is a valid return for Constant.GetValue).
15728
15729         * statement.cs: Perform the analysis flow for the increment
15730         portion after the statement, because this will be the real flow of
15731         execution.  Fixes #42385
15732
15733         * codegen.cs (EmitContext.EmitArgument,
15734         EmitContext.EmitStoreArgument): New helper functions when the
15735         RemapToProxy flag is set.
15736
15737         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
15738         function.
15739
15740         Add support for remapping parameters. 
15741
15742         * iterators.cs: Propagate parameter values;  Store parameter
15743         values in the proxy classes.
15744
15745 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
15746
15747         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
15748         need a proxy reference;  I do not know what I was thinking
15749
15750         * cs-parser.jay (constructor_initializer): catch another error,
15751         and display nice message.
15752
15753         (field_declaration): catch void field declaration
15754         to flag a better error. 
15755
15756         * class.cs (MemberBase.CheckBase): Report an error instead of a
15757         warning if a new protected member is declared in a struct. 
15758         (Field.Define): catch the error of readonly/volatile.
15759
15760         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
15761
15762         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
15763         volatile variable is taken
15764
15765 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
15766
15767         * statement.cs (Fixed.Resolve): Report an error if we are not in
15768         an unsafe context.
15769
15770 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
15771
15772         * typemanager.cs: reuse the code that handles type clashes for
15773         delegates and enumerations.
15774
15775         * class.cs (Report28): Always report.
15776
15777         * expression.cs (EncodeAsAttribute): Allow nulls here.
15778
15779 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
15780
15781         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
15782         the functionality for testing whether an expression is valid for
15783         an attribute here.  Also handle the case of arrays of elements
15784         being stored. 
15785
15786         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
15787         encoding a linear array into an array of objects that are suitable
15788         to be passed to an CustomAttributeBuilder.
15789
15790         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
15791
15792         * ecore.cs: (FieldExpr): Handle field remapping here.
15793
15794         * iteratators.cs: Pass the instance variable (if the method is an
15795         instance method) to the constructors, so we can access the field
15796         variables on the class.
15797
15798         TODO: Test this with structs.  I think the THIS variable on
15799         structs might have to be a pointer, and not a refenrece
15800
15801 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
15802
15803         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
15804         local variables to fields in a proxy class.
15805
15806         * iterators.cs (PopulateProxy): Rename our internal fields to
15807         <XXX>.  
15808         Create a <THIS> field if we are an instance method, so we can
15809         reference our parent container variables.
15810         (MapVariable): Called back from the EmitContext code to enter a
15811         new variable to field mapping into the proxy class (we just create
15812         a FieldBuilder).
15813
15814         * expression.cs
15815         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
15816         for using the remapped locals to fields.
15817
15818         I placed the code here, because that gives the same semantics to
15819         local variables, and only changes the Emit code.
15820
15821         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
15822         statements inside iterators.
15823         (VariableInfo): Add a FieldBuilder for the cases when we are
15824         remapping local variables to fields in a proxy class
15825
15826         * ecore.cs (SimpleNameResolve): Avoid testing two times for
15827         current_block != null.
15828
15829         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
15830         not cope with strings, as it has been moved to the
15831         TableSwitchEmit.  Fixed bug in switch generation.
15832
15833         * expression.cs (New.DoResolve): Provide more context for the user
15834         when reporting an error.
15835
15836         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
15837         pointers. 
15838
15839         * expression.cs (MemberAccess.DoResolve): When we get a type back,
15840         check the permissions for it.  Note than in a type-resolution
15841         context the check was already present in DeclSpace.ResolveType,
15842         but was missing from the MemberAccess.
15843
15844         (ArrayCreation.CheckIndices): warn if the user has
15845         more nested levels of expressions, but there are no more
15846         dimensions specified.  Avoids crash on bug 41906.
15847
15848 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
15849
15850         * statement.cs (Block): replace Implicit bool, for a generic
15851         flags.   
15852         New flag: `Unchecked'.  This is used during the EmitMeta phase
15853         (which is out-of-line with the regular Resolve/Emit process for a
15854         statement, as this is done ahead of time, but still gets a chance
15855         to call constant resolve).
15856
15857         (Block.Flags): new enum for adding a new flag.
15858
15859         (Block.EmitMeta): track the state of unchecked.
15860
15861         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
15862         to enable constant resolution to work there as well.
15863
15864 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
15865
15866         * typemanager.cs (ienumerable_type): Also look up
15867         System.Collections.IEnumerable. 
15868
15869 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
15870
15871         TODO: Test more than one conditional per method.
15872
15873         * class.cs (Indexer.Define): Report the location where the user is
15874         referencing the unsupported feature.
15875
15876         (MethodData): Overload the use of `conditionals' to
15877         minimize the creation of needless ArrayLists.   This saves roughly
15878         212kb on my machine.
15879
15880         (Method): Implement the new IIteratorContainer interface.
15881         (Method.SetYields): Implement the method by setting the ModFlags
15882         to contain METHOD_YIELDS.
15883
15884         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
15885         which just got set to null.
15886
15887         * iterators.cs: New file.
15888
15889         (Yield, YieldBreak): New statements.
15890
15891         * statement.cs (Return.Resolve): Flag an error if we are used in
15892         an iterator method.
15893
15894         * codegen.cs (InIterator): New flag set if the code is being
15895         compiled in an iterator method.
15896
15897         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
15898         internal modifier, and we just use it to avoid adding extra
15899         fields, as this is seldom used.  
15900
15901         * cs-parser.jay: Add yield_statement (yield and yield break).
15902
15903         * driver.cs: New flag -v2 to turn on version 2 features. 
15904
15905         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
15906         hashtable when v2 is enabled.
15907
15908 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
15909
15910         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
15911         there is already a namespace defined with this name.
15912
15913         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
15914         people upgraded their corlibs.
15915
15916         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
15917         always use fully qualified types, no need to use the compiler
15918         front end.
15919
15920         (TypeManager.IsNamespace): Use binarysearch.
15921
15922         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
15923         AddDelegate): I did not quite use the new IsValid API properly: I
15924         have to pass the short-name and the fullname.  I was passing only
15925         the basename instead of the fullname sometimes. 
15926
15927         (TypeContainer.DefineType): call NamespaceClash.
15928
15929         * interface.cs (Interface.DefineType): use NamespaceClash before
15930         defining the type.
15931
15932         * delegate.cs (Delegate.DefineType): use NamespaceClash before
15933         defining the type.
15934
15935         * enum.cs: (Enum.DefineType): use NamespaceClash before
15936         defining the type.
15937
15938         * typemanager.cs (: 3-line patch that gives us some tasty 11%
15939         speed increase.  First, use the negative_hits cache when we get a
15940         negative.  Second, add the type with its full original name
15941         instead of the new . and + encoded name (reflection uses + to
15942         separate type from a nested type).  Use LookupTypeReflection
15943         directly which bypasses the type->name hashtable (that we already
15944         know does not contain the type.
15945
15946         * decl.cs (DeclSpace.ResolveTypeExpr): track the
15947         location/container type. 
15948
15949         * driver.cs: When passing utf8, use directly the UTF8Encoding.
15950
15951 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
15952
15953         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
15954
15955         * delegate.cs (NewDelegate.Resolve): Test whether an instance
15956         method is being referenced in the method group from a static
15957         context, and report error 120 if so.
15958
15959         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
15960         Error118. 
15961
15962         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
15963         is created, we create the A namespace).
15964
15965         * cs-parser.jay: A namespace also introduces a DeclarationFound.
15966         Fixes #41591
15967
15968 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
15969
15970         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
15971         invocation to ModuleBuilder.GetType with the same values will
15972         return a new type instance, so we need to cache its return
15973         values. 
15974
15975         * expression.cs (Binary.ResolveOperator): Only allow the compare
15976         operators on enums if they are of the same type.
15977
15978         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
15979         types of ValueType on their own case.  Before we were giving them
15980         the same treatment as objects.
15981
15982         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
15983         fullname.  Short name is used to compare against container name.
15984         Fullname is used to check against defined namespace names.
15985
15986         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
15987         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
15988
15989         (Method.CheckBase): Call parent.
15990         (MemberBase.CheckBase): Check for protected members on sealed
15991         classes.
15992         (PropertyBase.CheckBase): Call parent.
15993         (Field.Define): Call parent.
15994
15995         * report.cs: Negative error codes are now mapped to 8000 - code,
15996         so that the display is render more nicely.
15997
15998         * typemanager.cs: Do not use try/catch, instead report a regular
15999         error. 
16000
16001         (GetPointerType, GetReferenceType): These methods provide
16002         mechanisms to obtain the T* and T& from a T.  We had the code
16003         previously scattered around the code base, and it also used
16004         TypeManager.LookupType that would go through plenty of caches.
16005         This one goes directly to the type source.
16006
16007         In some places we did the Type.GetType followed by
16008         ModuleBuilder.GetType, but not in others, so this unifies the
16009         processing as well.
16010
16011         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
16012         statements now that we have namespace information.
16013
16014         * typemanager.cs (IsNamespace): New method, returns whether the
16015         string presented is a namespace or not.
16016
16017         (ComputeNamespaces): New public entry point, computes the list of
16018         available namespaces, using the GetNamespaces API call in Mono, or
16019         the slower version in MS.NET.   
16020
16021         Now before we start the semantic analysis phase, we have a
16022         complete list of namespaces including everything that the user has
16023         provided.
16024
16025         Deleted old code to cache namespaces in .nsc files.
16026
16027 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
16028
16029         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
16030         class/struct location definition Location for the implicit
16031         constructor location.
16032
16033         (Operator.Define): Use the location of the operator for the
16034         implicit Method definition.
16035
16036         (Constructor.Emit): use the constructor location for the implicit
16037         base initializer constructor.
16038
16039         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
16040         and the Expression class now contains two new methods:
16041
16042         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
16043         isolate type lookup from the rest of the resolution process.
16044
16045         Since we use Expressions to hold type definitions due to the way
16046         we parse the input we have historically overloaded Resolve to
16047         perform the Type lookups if a special flag is passed.  Now this is
16048         eliminated and two methods take their place. 
16049
16050         The differences in the two methods between xStep and xTerminal is
16051         that xStep is involved in our current lookup system that uses
16052         SimpleNames to compose a name, while xTerminal is used just to
16053         catch the case where the simplename lookup failed.
16054
16055 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
16056
16057         * expression.cs (ResolveMemberAccess): Remove redundant code.
16058         TypeExpr expressions are always born fully resolved.
16059
16060         * interface.cs (PopulateMethod): Do not lookup the types twice.
16061         We were doing it once during SemanticAnalysis and once during
16062         PopulateMethod.
16063
16064         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
16065         in local variable type definitions, were being returned as a
16066         SimpleName (we decomposed everything into a string), that is
16067         because primary_expression was being used instead of a type in the
16068         grammar (reduce/reduce conflicts).
16069
16070         The part that was wrong is that we converted the expression into a
16071         string (an oversimplification in one hand, compounded with primary
16072         expressions doing string concatenation).
16073
16074         So things like:
16075
16076         A.B.C [] x;
16077
16078         Would return "A.B.C[]" as a SimpleName.  This stopped things like
16079         using clauses from working on this particular context.  And a type
16080         was being matched directly against "A.B.C[]".
16081
16082         We now use the correct approach, and allow for ComposedCast to be
16083         part of the unary expression.  So the "A.B.C []" become a composed
16084         cast of "A.B.C" (as a nested group of MemberAccess with a
16085         SimpleName at the end) plus the rank composition "[]". 
16086
16087         Also fixes 35567
16088
16089 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
16090
16091         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
16092         for the access level checking.
16093
16094         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
16095         `TypeContainer container', because I kept getting confused when I
16096         was debugging this code.
16097
16098         * expression.cs (Indexers): Instead of tracking getters/setters,
16099         we now track them in parallel.  We create one arraylist less, but
16100         most importantly it is possible now for the LValue code to find a
16101         matching get for a set.
16102
16103         (IndexerAccess.DoResolveLValue): Update the code.
16104         GetIndexersForType has been modified already to extract all the
16105         indexers from a type.  The code assumed it did not.
16106
16107         Also make the code set the correct return type for the indexer.
16108         This was fixed a long time ago for properties, but was missing for
16109         indexers.  It used to be void_type.
16110
16111         (Binary.Emit): Test first for doubles instead of
16112         floats, as they are more common.
16113
16114         (Binary.EmitBranchable): Use the .un version of the branch opcodes
16115         when dealing with floats and the <=, >= operators.  This fixes bug
16116         #39314 
16117
16118         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
16119         to load the array value by emitting a load on the foreach variable
16120         type.  This was incorrect.  
16121
16122         We now emit the code to load an element using the the array
16123         variable type, and then we emit the conversion operator.
16124
16125         Fixed #40176
16126
16127 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
16128
16129         * attribute.cs: Avoid allocation of ArrayLists in the common case.
16130
16131 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
16132
16133         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
16134         test for protection before we test for signatures. 
16135
16136         (MethodSignature.ToString): implement.
16137
16138         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
16139         to the case where we reduced into a LongConstant.
16140
16141         * decl.cs (CheckAccessLevel): If the type is an array, we can not
16142         depend on whether the information is acurrate, because the
16143         Microsoft runtime will always claim that the array type is public,
16144         regardless of the real state.
16145
16146         If the type is a pointer, another problem happens: the type is
16147         reported as non-public in Microsoft.  
16148
16149         In both cases we have to call CheckAccessLevel recursively with
16150         the underlying type as the argument to be tested.
16151
16152 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
16153
16154         * assign.cs (Assign.Emit): If we are dealing with a compound
16155         assignment expression, we should use the code path that stores the
16156         intermediate result in a temporary value.  This fixes #40903.
16157
16158         *expression.cs (Indirection.ToString): Provide ToString method for
16159         debugging. 
16160
16161 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
16162
16163         * class.cs: Null out fields holding references to Block objects so
16164         they can be garbage collected.
16165
16166         * expression.cs (OverloadResolve): Remove unused local.
16167
16168 2003-04-07  Martin Baulig  <martin@ximian.com>
16169
16170         * codegen.cs (EmitContext.CurrentFile): New public field.
16171         (EmitContext.Mark): Use the CurrentFile to check whether the
16172         location is in the correct file.
16173         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
16174
16175 2003-04-07  Martin Baulig  <martin@ximian.com>
16176
16177         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
16178
16179         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
16180         location.  [FIXME: The location argument which gets passed to this
16181         method is sometimes wrong!]
16182
16183 2003-04-07  Nick Drochak <ndrochak@gol.com>
16184
16185         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
16186
16187 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
16188
16189         * expression.cs (Indirection.EmitAssign): We were using the
16190         temporary, but returning immediately instead of continuing the
16191         EmitAssing flow.
16192
16193 2003-04-06  Martin Baulig  <martin@ximian.com>
16194
16195         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
16196         if it's a nested child, but also deriving from the outer class.
16197         See test 190.cs.
16198
16199         * typemanager.cs (IsNestedChildOf): Make this work if it's a
16200         nested child, but also deriving from the outer class.  See
16201         test-190.cs.
16202         (FilterWithClosure): We may access private members of the outer
16203         class if we're a nested child and deriving from the outer class.
16204         (RealMemberLookup): Only set `closure_private_ok' if the
16205         `original_bf' contained BindingFlags.NonPublic.
16206
16207 2003-04-05  Martin Baulig  <martin@ximian.com>
16208
16209         * expression.cs (SizeOf.DoResolve): Use ResolveTypeExpr, so we can
16210         probe if its a type parameter, and if so, flag an error.
16211
16212         * decl.cs: Move here the SetParameterInfo code from class.cs.
16213         Handle IsGeneric here.
16214
16215         Handle a variety of errors in the parameter info definition.
16216
16217         * ecore.cs (SimpleName.DoResolveType): Handle look ups for generic
16218         type parameters here.
16219
16220         * cs-parser.jay (class_declaration): report errors for parameters
16221         here as well.
16222
16223 2003-01-21  Miguel de Icaza  <miguel@ximian.com>
16224
16225         * generic.cs: New file, contains support code for generics.
16226
16227         * cs-parser.jay: Remove OP_SHIFT_LEFT, OP_SHIFT_RIGHT,
16228         OP_SHIFT_LEFT_ASSIGN, OP_SHIFT_RIGHT_ASSIGN.
16229
16230         Update parser for the above removals.
16231
16232         * cs-tokenizer.cs: Do not handle <<= or >>= specially.  This is
16233         now taken care of in the parser.
16234
16235 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
16236
16237         * class.cs (Event.Define): Do not allow abstract events to have
16238         initializers. 
16239
16240 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
16241
16242         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
16243         block in event declarations.
16244
16245         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
16246         value type, get its address.
16247
16248         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
16249         leaving a class on the stack instead of a boolean value (int
16250         0/1).  Change the code so we compare against null, and then the
16251         result against zero.
16252
16253         * class.cs (TypeContainer.GetClassBases): We were checking for the
16254         parent class being sealed too late.
16255
16256         * expression.cs (Binary.Emit): For <= and >= when dealing with
16257         floating point values, use cgt.un and clt.un instead of cgt and
16258         clt alone.
16259
16260 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
16261
16262         * statement.cs: Apply the same optimization as MS: skip the 
16263         GetEnumerator returning an IEnumerator, and use the one returning a 
16264         CharEnumerator instead. This allows us to avoid the try-finally block 
16265         and the boxing.
16266
16267 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
16268
16269         * cs-parser.jay: Attributes cannot be applied to
16270                          namespaces. Fixes #40473
16271
16272 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16273
16274         * class.cs:
16275         (Add*): check if the name is valid using the full name for constants,
16276         fields, properties and events.
16277
16278 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
16279
16280         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
16281         char constants to be part of the enumeration.
16282
16283         * expression.cs (Conditional.DoResolve): Add support for operator
16284         true. Implements the missing functionality from 14.12
16285
16286         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
16287         operator true/false as required by the spec.
16288
16289         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
16290         implicit conversion to boolean.
16291
16292         * statement.cs (Statement.ResolveBoolean): A boolean expression is
16293         also one where the type implements `operator true'. 
16294
16295         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
16296         get an expression that will invoke operator true based on an
16297         expression.  
16298
16299         (GetConversionOperators): Removed the hack that called op_True
16300         here.  
16301
16302         (Expression.ResolveBoolean): Move this from Statement.
16303
16304 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
16305
16306         * ecore.cs (FieldExpr): do not allow initialization of initonly
16307         fields on derived classes
16308
16309 2003-03-13  Martin Baulig  <martin@ximian.com>
16310
16311         * statement.cs (Block.Emit): Call ig.BeginScope() and
16312         ig.EndScope() when compiling with debugging info; call
16313         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
16314
16315 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
16316
16317         * expression.cs (Indexers): Do not construct immediately, allow
16318         for new members to be appended as we go.  Fixes 38143
16319
16320 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16321
16322         * expression.cs: save/restore context when resolving an unchecked
16323         expression.
16324
16325 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
16326
16327         * cfold.cs: Catch division by zero in modulus operator during
16328         constant folding.
16329
16330 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
16331
16332         * interface.cs (Interface.DefineMembers): Avoid defining members
16333         twice. 
16334
16335 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
16336
16337         * driver.cs: handle the +/- options for -noconfig
16338
16339         * statement.cs (Unckeched.Resolve): Also track the state of
16340         unchecked in the Resolve phase.
16341
16342 2003-02-27  Martin Baulig  <martin@ximian.com>
16343
16344         * ecore.cs (Expression.MemberLookup): Don't create a
16345         MethodGroupExpr for something which is not a method.  Fixes #38291.
16346
16347 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
16348
16349         * class.cs (MemberBase.CheckParameters): Also check that the type
16350         is unmanaged if it is a pointer.
16351
16352         * expression.cs (SizeOf.Resolve): Add location information.
16353
16354         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
16355         a managed type is declared.
16356
16357         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
16358         parameter modifiers as well.  Fixes bug 38606
16359
16360         * class.cs: Very sad.  Am backing out the speed up changes
16361         introduced by the ArrayList -> Array in the TypeContainer, as they
16362         were not actually that much faster, and introduced a bug (no error
16363         reports on duplicated methods).
16364
16365         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
16366         source first, this will guarantee that we have a valid expression
16367         before calling in lower levels functions that will require a
16368         resolved object.  Then use this original_source in the
16369         target.ResolveLValue instead of the original source that was
16370         passed to us.
16371
16372         Another change.  Use target.Resolve instead of LValueResolve.
16373         Although we are resolving for LValues, we will let the Assign code
16374         take care of that (it will be called again from Resolve).  This
16375         basically allows code like this:
16376
16377         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
16378         class Y { void A (X x) { x [0] += o; }
16379
16380         The problem was that the indexer was trying to resolve for
16381         set_Item (idx, object o) and never finding one.  The real set_Item
16382         was set_Item (idx, X).  By delaying the process we get the right
16383         semantics. 
16384
16385         Fixes bug 36505
16386
16387 2003-02-23  Martin Baulig  <martin@ximian.com>
16388
16389         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
16390         while calling DoEmit ().
16391
16392         * codegen.cs (EmitContext.Mark): Don't mark locations in other
16393         source files; if you use the #line directive inside a method, the
16394         compiler stops emitting line numbers for the debugger until it
16395         reaches the end of the method or another #line directive which
16396         restores the original file.
16397
16398 2003-02-23  Martin Baulig  <martin@ximian.com>
16399
16400         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
16401
16402 2003-02-23  Martin Baulig  <martin@ximian.com>
16403
16404         * statement.cs (Block.AddChildVariableNames): We need to call this
16405         recursively, not just for our immediate children.
16406
16407 2003-02-23  Martin Baulig  <martin@ximian.com>
16408
16409         * class.cs (Event.Define): Always make the field private, like csc does.
16410
16411         * typemanager.cs (TypeManager.RealMemberLookup): Make events
16412         actually work, fixes bug #37521.
16413
16414 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
16415
16416         * delegate.cs: When creating the various temporary "Parameters"
16417         classes, make sure that we call the ComputeAndDefineParameterTypes
16418         on those new parameters (just like we do with the formal ones), to
16419         allow them to be resolved in the context of the DeclSpace.
16420
16421         This fixes the bug that Dick observed in Bugzilla #38530.
16422
16423 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
16424
16425         * expression.cs (ResolveMemberAccess): When resolving a constant,
16426         do not attempt to pull a constant if the value was not able to
16427         generate a valid constant.
16428
16429         * const.cs (LookupConstantValue): Do not report more errors than required.
16430
16431 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16432
16433         * expression.cs: fixes bug #38328.
16434
16435 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
16436
16437         * class.cs: Changed all the various members that can be part of a
16438         class from being an ArrayList to be an Array of the right type.
16439         During the DefineType type_list, interface_list, delegate_list and
16440         enum_list are turned into types, interfaces, delegates and enums
16441         arrays.  
16442
16443         And during the member population, indexer_list, event_list,
16444         constant_list, field_list, instance_constructor_list, method_list,
16445         operator_list and property_list are turned into their real arrays.
16446
16447         Although we could probably perform this operation earlier, for
16448         good error reporting we need to keep the lists and remove the
16449         lists for longer than required.
16450
16451         This optimization was triggered by Paolo profiling the compiler
16452         speed on the output of `gen-sample-program.pl' perl script. 
16453
16454         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
16455         not crash in methods like MemberLookupFailed that use this field.  
16456
16457         This problem arises when the compiler fails to resolve a type
16458         during interface type definition for example.
16459
16460 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
16461
16462         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
16463         inherit from System.Object, so we have to stop at null, not only
16464         when reaching System.Object.
16465
16466 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
16467
16468         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
16469         DeclaredOnly because the parent indexer might have had a different
16470         name, but did not loop until the top of the hierarchy was reached.
16471
16472         The problem this one fixes is 35492: when a class implemented an
16473         indexer from an interface, we were getting the interface method
16474         (which was abstract) and we were flagging an error (can not invoke
16475         abstract method).
16476
16477         This also keeps bug 33089 functioning, and test-148 functioning.
16478
16479         * typemanager.cs (IsSpecialMethod): The correct way of figuring
16480         out if a method is special is to see if it is declared in a
16481         property or event, or whether it is one of the predefined operator
16482         names.   This should fix correctly #36804.
16483
16484 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
16485
16486         The goal here is to remove the dependency on EmptyCast.Peel ().
16487         Killing it completely.
16488
16489         The problem is that currently in a number of places where
16490         constants are expected, we have to "probe" for an EmptyCast, and
16491         Peel, which is not the correct thing to do, as this will be
16492         repetitive and will likely lead to errors. 
16493
16494         The idea is to remove any EmptyCasts that are used in casts that
16495         can be reduced to constants, so we only have to cope with
16496         constants. 
16497
16498         This bug hunt was triggered by Bug 37363 and the desire to remove
16499         the duplicate pattern where we were "peeling" emptycasts to check
16500         whether they were constants.  Now constants will always be
16501         constants.
16502
16503         * ecore.cs: Use an enumconstant here instead of wrapping with
16504         EmptyCast.  
16505
16506         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
16507         throwing me off.  By handling this we can get rid of a few hacks.
16508
16509         * statement.cs (Switch): Removed Peel() code.
16510
16511 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
16512
16513         * class.cs: Location information for error 508
16514
16515         * expression.cs (New.DoResolve): Add a guard against double
16516         resolution of an expression.  
16517
16518         The New DoResolve might be called twice when initializing field
16519         expressions (see EmitFieldInitializers, the call to
16520         GetInitializerExpression will perform a resolve on the expression,
16521         and later the assign will trigger another resolution
16522
16523         This leads to bugs (#37014)
16524
16525         * delegate.cs: The signature for EndInvoke should contain any ref
16526         or out parameters as well.  We were not doing this in the past. 
16527
16528         * class.cs (Field.Define): Do not overwrite the type definition
16529         inside the `volatile' group.  Turns out that volatile enumerations
16530         were changing the type here to perform a validity test, which
16531         broke conversions. 
16532
16533 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
16534
16535         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
16536         and structs, we do not want to load the instance variable
16537
16538         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
16539         enum_type has to be handled like an object reference (implicit
16540         conversions exists from this to object), but the regular IsClass
16541         and IsValueType tests will never return true for this one.
16542
16543         Also we use TypeManager.IsValueType instead of type.IsValueType,
16544         just for consistency with the rest of the code (this is only
16545         needed if we ever use the construct exposed by test-180.cs inside
16546         corlib, which we dont today).
16547
16548 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
16549
16550         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
16551         just InternalCall.
16552
16553 2003-02-09  Martin Baulig  <martin@ximian.com>
16554
16555         * namespace.cs (Namespace..ctor): Added SourceFile argument.
16556         (Namespace.DefineNamespaces): New static public method; this is
16557         called when we're compiling with debugging to add all namespaces
16558         to the symbol file.
16559
16560         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
16561         pass it to the Namespace's .ctor.
16562
16563         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
16564         and MethodBase arguments; pass the namespace ID to the symwriter;
16565         pass the MethodBase instead of the token to the symwriter.
16566         (SymbolWriter.DefineNamespace): New method to add a namespace to
16567         the symbol file.
16568
16569 2003-02-09  Martin Baulig  <martin@ximian.com>
16570
16571         * symbolwriter.cs: New file.  This is a wrapper around
16572         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
16573         methods here in near future.
16574
16575 2003-02-09  Martin Baulig  <martin@ximian.com>
16576
16577         * codegen.cs (EmitContext.Mark): Just pass the arguments to
16578         ILGenerator.MarkSequencePoint() which are actually used by the
16579         symbol writer.
16580
16581 2003-02-09  Martin Baulig  <martin@ximian.com>
16582
16583         * location.cs (SourceFile): New public sealed class.  This
16584         contains the name and an index which is used in the location's token.
16585         (Location): Reserve an appropriate number of bits in the token for
16586         the source file instead of walking over that list, this gives us a
16587         really huge performance improvement when compiling with debugging.
16588
16589         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
16590         `SourceFile' argument instead of a string.
16591         (Driver.ProcessFile): Add all the files via Location.AddFile(),
16592         but don't parse/tokenize here, we need to generate the list of all
16593         source files before we do that.
16594         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
16595         the files.
16596
16597         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
16598         instead of a string.
16599
16600         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
16601         of a string.
16602
16603 2003-02-09  Martin Baulig  <martin@ximian.com>
16604
16605         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
16606         filename on `#line default'.
16607
16608 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
16609
16610         * statement.cs: don't clear the pinned var when the fixed statement
16611         returns from the method (fixes bug#37752).
16612
16613 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
16614
16615         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
16616         to IsValueType.
16617
16618 2003-02-07  Martin Baulig  <martin@ximian.com>
16619
16620         * driver.cs: Removed the `--debug-args' command line argument.
16621
16622         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
16623         automatically by the AsssemblyBuilder.
16624         (CodeGen.InitializeSymbolWriter): We don't need to call any
16625         initialization function on the symbol writer anymore.  This method
16626         doesn't take any arguments.
16627
16628 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
16629
16630         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
16631         from referenced assemblies as well.
16632
16633 2003-02-02  Martin Baulig  <martin@ximian.com>
16634
16635         * class.cs (MethodData.Emit): Generate debugging info for external methods.
16636
16637 2003-02-02  Martin Baulig  <martin@ximian.com>
16638
16639         * class.cs (Constructor.Emit): Open the symbol writer before
16640         emitting the constructor initializer.
16641         (ConstructorInitializer.Emit): Call ec.Mark() to allow
16642         single-stepping through constructor initializers.
16643
16644 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
16645
16646         * class.cs: Handle error 549: do not allow virtual methods in
16647         sealed classes. 
16648
16649 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
16650
16651         * decl.cs: Check access levels when resolving types
16652
16653 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
16654
16655         * statement.cs: Add parameters and locals set in catch blocks that might 
16656         return to set vector
16657
16658 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
16659
16660         * class.cs (Operator): Set the SpecialName flags for operators.
16661
16662         * expression.cs (Invocation.DoResolve): Only block calls to
16663         accessors and operators on SpecialName methods.
16664
16665         (Cast.TryReduce): Handle conversions from char constants.
16666
16667
16668 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
16669
16670         * statement.cs: small memory and time optimization in FlowBranching.
16671
16672 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
16673
16674         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
16675         problem that the last fix but in the other sid (Set).
16676
16677         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
16678         access when there is no indexer in the hierarchy.
16679
16680 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
16681
16682         * class.cs: Combine some if statements.
16683
16684 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16685
16686         * driver.cs: fixed bug #37187.
16687
16688 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
16689
16690         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
16691         any indexer, it's needed to build a list with all the indexers in the
16692         hierarchy (AllGetters), else we have problems. Fixes #35653.
16693
16694 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
16695
16696         * class.cs (MethodData.Define): It is wrong for an interface
16697         implementation to be static in both cases: explicit and implicit.
16698         We were only handling this in one case.
16699
16700         Improve the if situation there to not have negations.
16701
16702         * class.cs (Field.Define): Turns out that we do not need to check
16703         the unsafe bit on field definition, only on usage.  Remove the test.
16704
16705 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16706
16707         * driver.cs: use assembly.Location instead of Codebase (the latest
16708         patch made mcs fail when using MS assemblies).
16709
16710 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
16711
16712         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
16713         get the path to *corlib.dll.
16714
16715 2003-01-21  Nick Drochak <ndrochak@gol.com>
16716
16717         * cs-tokenizer.cs:
16718         * pending.cs:
16719         * typemanager.cs: Remove compiler warnings
16720
16721 2003-01-20  Duncan Mak  <duncan@ximian.com>
16722
16723         * AssemblyInfo.cs: Bump the version number to 0.19.
16724
16725 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16726
16727         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
16728
16729 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
16730
16731         * class.cs (Constructor::Emit): Emit debugging info for constructors.
16732
16733 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
16734
16735         * cs-parser.jay: Small fix: we were not comparing the constructor
16736         name correctly.   Thanks to Zoltan for the initial pointer.
16737
16738 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
16739
16740         * cs-tokenizer.cs: Set file name when specified with #line
16741
16742 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
16743
16744         * cs-parser.jay: Only perform the constructor checks here if we
16745         are named like the class;  This will help provider a better
16746         error.  The constructor path is taken when a type definition is
16747         not found, but most likely the user forgot to add the type, so
16748         report that rather than the constructor error.
16749
16750 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
16751
16752         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
16753         allocations.
16754
16755 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16756
16757         * cs-parser.jay: Add cleanup call.
16758
16759 2003-01-13  Duncan Mak  <duncan@ximian.com>
16760
16761         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
16762         consistent with other methods.
16763
16764 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16765
16766         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
16767
16768 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
16769
16770         * attribute.cs: only set GuidAttr to true when we have a
16771         GuidAttribute.
16772
16773 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16774
16775         * ecore.cs:
16776         * expression.cs:
16777         * typemanager.cs: fixes to allow mcs compile corlib with the new
16778         Type.IsSubclassOf fix.
16779
16780 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
16781
16782         * expression.cs (LocalVariableReference.DoResolve): Classify a
16783         constant as a value, not as a variable.   Also, set the type for
16784         the variable.
16785
16786         * cs-parser.jay (fixed_statement): take a type instead of a
16787         pointer_type, so we can produce a better error message later.
16788
16789         * statement.cs (Fixed.Resolve): Flag types that are not pointers
16790         as an error.  
16791
16792         (For.DoEmit): Make inifinite loops have a
16793         non-conditional branch back.
16794
16795         (Fixed.DoEmit): First populate the pinned variables, then emit the
16796         statement, then clear the variables.  Before I was emitting the
16797         code once for each fixed piece.
16798
16799
16800 2003-01-08  Martin Baulig  <martin@ximian.com>
16801
16802         * statement.cs (FlowBranching.MergeChild): A break in a
16803         SWITCH_SECTION does not leave a loop.  Fixes #36155.
16804
16805 2003-01-08  Martin Baulig  <martin@ximian.com>
16806
16807         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
16808         lives in the same number space than `param_map'.  Fixes #36154.
16809
16810 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
16811
16812         * cs-parser.jay (constructor_declaration): Set the
16813         Constructor.ModFlags before probing for it.  This makes the
16814         compiler report 514, 515 and 132 (the code was there, but got
16815         broken). 
16816
16817         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
16818         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
16819         (GotoCase.Resolve): Set `Returns' to ALWAYS.
16820
16821 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
16822
16823         * enum.cs: create the enum static fields using the enum type.
16824
16825 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
16826
16827         * class.cs: don't try to create the ParamBuilder for the return
16828         type if it's not needed (and handle it breaking for the ms runtime
16829         anyway).
16830
16831 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
16832
16833         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
16834
16835 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
16836
16837         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
16838         the command.   This showed up while compiling the JANET source
16839         code, which used \r as its only newline separator.
16840
16841 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
16842
16843         * class.cs (Method.Define): If we are an operator (because it
16844         reuses our code), then set the SpecialName and HideBySig.  #36128
16845
16846 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
16847
16848         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
16849         exception, report error 120 `object reference required'.
16850
16851         * driver.cs: Add --pause option, used during to measure the size
16852         of the process as it goes with --timestamp.
16853
16854         * expression.cs (Invocation.DoResolve): Do not allow methods with
16855         SpecialName to be invoked.
16856
16857 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
16858
16859         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
16860         number before adding it.
16861
16862 2002-12-21  Ravi Pratap  <ravi@ximian.com>
16863
16864         * ecore.cs (StandardImplicitConversion): When in an unsafe
16865         context, we allow conversion between void * to any other pointer
16866         type. This fixes bug #35973.
16867
16868 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
16869
16870         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
16871         is not thrown when extensionless outputs are used 
16872
16873 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16874
16875         * rootcontext.cs: fixed compilation of corlib.
16876
16877 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
16878
16879         * attribute.cs (Attributes.Contains): Add new method.
16880
16881         * class.cs (MethodCore.LabelParameters): if the parameter is an
16882         `out' parameter, check that no attribute `[In]' has been passed.
16883
16884         * enum.cs: Handle the `value__' name in an enumeration.
16885
16886 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
16887
16888         * decl.cs: Added special case to allow overrides on "protected
16889         internal" methods
16890
16891 2002-12-18  Ravi Pratap  <ravi@ximian.com>
16892
16893         * attribute.cs (Attributes.AddAttributeSection): Rename to this
16894         since it makes much more sense.
16895
16896         (Attributes.ctor): Don't require a Location parameter.
16897
16898         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
16899
16900         * attribute.cs (ApplyAttributes): Remove extra Location parameters
16901         since we already have that information per attribute.
16902
16903         * everywhere : make appropriate changes.
16904
16905         * class.cs (LabelParameters): Write the code which actually
16906         applies attributes to the return type. We can't do this on the MS
16907         .NET runtime so we flag a warning in the case an exception is
16908         thrown.
16909
16910 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
16911
16912         * const.cs: Handle implicit null conversions here too.
16913
16914 2002-12-17  Ravi Pratap  <ravi@ximian.com>
16915
16916         * class.cs (MethodCore.LabelParameters): Remove the extra
16917         Type [] parameter since it is completely unnecessary. Instead
16918         pass in the method's attributes so that we can extract
16919         the "return" attribute.
16920
16921 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
16922
16923         * cs-parser.jay (parse): Use Report.Error to flag errors instead
16924         of ignoring it and letting the compile continue.
16925
16926         * typemanager.cs (ChangeType): use an extra argument to return an
16927         error condition instead of throwing an exception.
16928
16929 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
16930
16931         * expression.cs (Unary.TryReduce): mimic the code for the regular
16932         code path.  Perform an implicit cast in the cases where we can
16933         implicitly convert to one of the integral types, and then reduce
16934         based on that constant.   This fixes bug #35483.
16935
16936 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16937
16938         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
16939
16940 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16941
16942         * namespace.cs: fixed bug #35489.
16943
16944 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
16945
16946         * class.cs: Remove some dead code.
16947
16948         * cs-parser.jay: Estimate the number of methods needed
16949         (RootContext.MethodCount);
16950
16951         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
16952         numbers instead of StringBuilders.
16953
16954         * support.cs (PtrHashtable): Add constructor with initial size;
16955         We can now reduce reallocations of the method table.
16956
16957 2002-12-10  Ravi Pratap  <ravi@ximian.com>
16958
16959         * attribute.cs (ApplyAttributes): Keep track of the emitted
16960         attributes on a per-target basis. This fixes bug #35413.
16961
16962 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
16963
16964         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
16965         default to the Windows 1252 encoding.
16966
16967         (UnixParseOption): Support version, thanks to Alp for the missing
16968         pointer. 
16969
16970         * AssemblyInfo.cs: Add nice assembly information.
16971
16972         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
16973         (bug 35169).
16974
16975         * cs-parser.jay: Allow a trailing comma before the close bracked
16976         in the attribute_section production.
16977
16978         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
16979         address of the instance was being taken, I will take this out,
16980         because we take the address of the object immediately here.
16981
16982 2002-12-09  Ravi Pratap  <ravi@ximian.com>
16983
16984         * typemanager.cs (AreMultipleAllowed): Take care of the most
16985         obvious case where attribute type is not in the current assembly -
16986         stupid me ;-)
16987
16988 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
16989
16990         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
16991         definitions, instead of doing that afterwards.  
16992
16993         Also we use a nice little hack, depending on the constructor, we
16994         know if we are a "composed" name or a simple name.  Hence, we
16995         avoid the IndexOf test, and we avoid 
16996
16997         * codegen.cs: Add code to assist in a bug reporter to track down
16998         the source of a compiler crash. 
16999
17000 2002-12-07  Ravi Pratap  <ravi@ximian.com>
17001
17002         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
17003         types have been emitted for a given element and flag an error
17004         if something which does not have AllowMultiple set is used more
17005         than once.
17006
17007         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
17008         attribute types and their corresponding AllowMultiple properties
17009
17010         (AreMultipleAllowed): Check the property for a given type.
17011
17012         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
17013         property in the case we have a TypeContainer.
17014
17015         (Attributes.AddAttribute): Detect duplicates and just skip on
17016         adding them. This trivial fix catches a pretty gross error in our
17017         attribute emission - global attributes were being emitted twice!
17018
17019         Bugzilla bug #33187 is now fixed.
17020
17021 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
17022
17023         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
17024         instead of pp_and).
17025
17026         * expression.cs (Binary.ResolveOperator): I can only use the
17027         Concat (string, string, string) and Concat (string, string,
17028         string, string) if the child is actually a concatenation of
17029         strings. 
17030
17031 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
17032
17033         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
17034         context where we need a 2-character lookahead.
17035
17036         * pending.cs (PendingImplementation): Rework so we can keep track
17037         of interface types all the time, and flag those which were
17038         implemented by parents as optional.
17039
17040 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
17041
17042         * expression.cs (Binary.ResolveOperator): Use
17043         String.Concat(string,string,string) or
17044         String.Concat(string,string,string,string) when possible. 
17045
17046         * typemanager: More helper methods.
17047
17048
17049 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
17050
17051         * pending.cs: remove the bogus return from GetMissingInterfaces()
17052         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
17053
17054 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17055
17056         * namespace.cs: avoid duplicated 'using xxx' being added to
17057         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
17058         when we get more than one 'using' statement for the same namespace.
17059         Report a CS0105 warning for it.
17060
17061 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
17062
17063         * cs-tokenizer.cs (consume_identifier): use read directly, instead
17064         of calling getChar/putback, uses internal knowledge of it.    
17065
17066         (xtoken): Reorder tokenizer so most common patterns are checked
17067         first.  This reduces the compilation time in another 5% (from 8.11s
17068         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
17069
17070         The parsing time is 22% of the compilation in mcs, and from that
17071         64% is spent on the tokenization process.  
17072
17073         I tried using a binary search for keywords, but this is slower
17074         than the hashtable.  Another option would be to do a couple of
17075         things:
17076
17077                 * Not use a StringBuilder, instead use an array of chars,
17078                   with a set value.  Notice that this way we could catch
17079                   the 645 error without having to do it *afterwards*.
17080
17081                 * We could write a hand-parser to avoid the hashtable
17082                   compares altogether.
17083
17084         The identifier consumption process takes 37% of the tokenization
17085         time.  Another 15% is spent on is_number.  56% of the time spent
17086         on is_number is spent on Int64.Parse:
17087
17088                 * We could probably choose based on the string length to
17089                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
17090                   computations. 
17091
17092         Another 3% is spend on wrapping `xtoken' in the `token' function.
17093
17094         Handle 0xa0 as whitespace (#34752)
17095
17096 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
17097
17098         * typemanager.cs (IsCLRType): New routine to tell whether a type
17099         is one of the builtin types.  
17100
17101         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
17102         typecode in more places instead of doing pointer comparissions.
17103         We could leverage some knowledge about the way the typecodes are
17104         laid out.
17105
17106         New code to cache namespaces in assemblies, it is currently not
17107         invoked, to be used soon.
17108
17109         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
17110
17111         * expression.cs (Binary.ResolveOperator): specially handle
17112         strings, and do not perform user-defined operator overloading for
17113         built-in types.
17114
17115 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
17116
17117         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
17118         internalcall as it is a pretty simple operation;  Avoid whenever
17119         possible to call Char.IsLetter.
17120
17121         (consume_identifier): Cut by half the number of
17122         hashtable calls by merging the is_keyword and GetKeyword behavior.
17123
17124         Do not short-circuit, because if we do, we
17125         report errors (ie, #if false && true would produce an invalid
17126         directive error);
17127
17128
17129 2002-11-24  Martin Baulig  <martin@ximian.com>
17130
17131         * expression.cs (Cast.TryReduce): If we're in checked syntax,
17132         check constant ranges and report a CS0221.  Fixes #33186.
17133
17134 2002-11-24  Martin Baulig  <martin@ximian.com>
17135
17136         * cs-parser.jay: Make this work for uninitialized variable
17137         declarations in the `for' initializer.  Fixes #32416.
17138
17139 2002-11-24  Martin Baulig  <martin@ximian.com>
17140
17141         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
17142         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
17143
17144 2002-11-24  Martin Baulig  <martin@ximian.com>
17145
17146         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
17147         argument; if true, we also check for user-defined conversions.
17148         This is only needed if both arguments are of a user-defined type.
17149         Fixes #30443, added test-175.cs.
17150         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
17151
17152         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
17153
17154 2002-11-24  Martin Baulig  <martin@ximian.com>
17155
17156         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
17157         function to get the store opcode.
17158         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
17159         only emit the Ldelema if the store opcode is Stobj.  You must run
17160         both test-34 and test-167 to test this.  Fixes #34529.
17161
17162 2002-11-23  Martin Baulig  <martin@ximian.com>
17163
17164         * ecore.cs (Expression.MemberLookup): Added additional
17165         `qualifier_type' argument which is used when we're being called
17166         from MemberAccess.DoResolve() and null if we're called from a
17167         SimpleName lookup.
17168         (Expression.MemberLookupFailed): New method to report errors; this
17169         does the CS1540 check and reports the correct error message.
17170
17171         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
17172         argument for the CS1540 check and redone the way how we're dealing
17173         with private members.  See the comment in the source code for details.
17174         (FilterWithClosure): Reverted this back to revision 1.197; renamed
17175         `closure_start_type' to `closure_qualifier_type' and check whether
17176         it's not null.  It was not this filter being broken, it was just
17177         being called with the wrong arguments.
17178
17179         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
17180         and pass it the correct `qualifier_type'; this also does the error
17181         handling for us.
17182
17183 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
17184
17185         * expression.cs (Invocation.EmitParams): If the we are dealing
17186         with a non-built-in value type, load its address as well.
17187
17188         (ArrayCreation): Use a a pretty constant instead
17189         of the hardcoded value 2.   Use 6 instead of 2 for the number of
17190         static initializers.  
17191
17192         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
17193         because they are not really value types, just glorified integers. 
17194
17195         * driver.cs: Do not append .exe, the CSC compiler does not do it.
17196
17197         * ecore.cs: Remove redundant code for enumerations, make them use
17198         the same code path as everything else, fixes the casting issue
17199         with enumerations in Windows.Forms.
17200
17201         * attribute.cs: Do only cast to string if it is a string, the
17202         validation happens later.
17203
17204         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
17205         people upgrade their corlibs.
17206
17207         * ecore.cs: Oops, enumerations were not following the entire code path
17208
17209 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
17210
17211         * typemanager.cs (FilterWithClosure): Commented out the test for
17212         1540 in typemanager.cs, as it has problems when accessing
17213         protected methods from a parent class (see test-174.cs). 
17214
17215         * attribute.cs (Attribute.ValidateGuid): new method.
17216         (Attribute.Resolve): Use above.
17217
17218 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
17219
17220         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
17221
17222         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
17223         handling for enumerations, as we only needed the TypeContainer
17224         functionality to begin with (this is required for the fix below to
17225         work for enums that reference constants in a container class for
17226         example). 
17227
17228         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
17229
17230         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
17231         a valid TypeBuilder to perform lookups on.o
17232
17233         * class.cs (InheritableMemberSignatureCompare): Use true in the
17234         call to GetGetMethod and GetSetMethod, because we are comparing
17235         the signature, and we need to get the methods *even* if they are
17236         private. 
17237
17238         (PropertyBase.CheckBase): ditto.
17239
17240         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
17241         GotoCase.Resolve): Use Peel on EmpytCasts.
17242
17243         * ecore.cs (EmptyCast): drop child, add Peel method.
17244
17245 2002-11-17  Martin Baulig  <martin@ximian.com>
17246
17247         * ecore.cs (EmptyCast.Child): New public property.
17248
17249         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
17250         label resolved to an EmptyCast.  Fixes #34162.
17251         (GotoCase.Resolve): Likewise.
17252         (Block.EmitMeta): Likewise.
17253
17254 2002-11-17  Martin Baulig  <martin@ximian.com>
17255
17256         * expression.cs (Invocation.BetterConversion): Prefer int over
17257         uint; short over ushort; long over ulong for integer literals.
17258         Use ImplicitConversionExists instead of StandardConversionExists
17259         since we also need to check for user-defined implicit conversions.
17260         Fixes #34165.  Added test-173.cs.
17261
17262 2002-11-16  Martin Baulig  <martin@ximian.com>
17263
17264         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
17265         with the `true' and `false' literals.  Fixes #33151.
17266
17267 2002-11-16  Martin Baulig  <martin@ximian.com>
17268
17269         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
17270         October 22nd; don't do the cs1540 check for static members.
17271
17272         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
17273         now using our own filter here and doing the cs1540 check again.
17274
17275 2002-11-16  Martin Baulig  <martin@ximian.com>
17276
17277         * support.cs (InternalParameters): Don't crash if we don't have
17278         any fixed parameters.  Fixes #33532.
17279
17280 2002-11-16  Martin Baulig  <martin@ximian.com>
17281
17282         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
17283         when looking up static methods to make this work on Windows.
17284         Fixes #33773.
17285
17286 2002-11-16  Martin Baulig  <martin@ximian.com>
17287
17288         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
17289         a setter rather than using PropertyInfo.CanWrite.
17290
17291 2002-11-15  Nick Drochak  <ndrochak@gol.com>
17292
17293         * class.cs: Allow acces to block member by subclasses. Fixes build
17294         breaker.
17295
17296 2002-11-14  Martin Baulig  <martin@ximian.com>
17297
17298         * class.cs (Constructor.Emit): Added the extern/block check.
17299         Fixes bug #33678.
17300
17301 2002-11-14  Martin Baulig  <martin@ximian.com>
17302
17303         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
17304         iteration while looking for indexers, this is needed because the
17305         indexer may have a different name in our base classes.  Fixed the
17306         error reporting (no indexers at all, not get accessor, no
17307         overloaded match).  Fixes bug #33089.
17308         (IndexerAccess.DoResolveLValue): Likewise.
17309
17310 2002-11-14  Martin Baulig  <martin@ximian.com>
17311
17312         * class.cs (PropertyBase.CheckBase): Make this work for multiple
17313         indexers.  Fixes the first part of bug #33089.
17314         (MethodSignature.InheritableMemberSignatureCompare): Added support
17315         for properties.
17316
17317 2002-11-13  Ravi Pratap  <ravi@ximian.com>
17318
17319         * attribute.cs (Attribute.Resolve): Catch the
17320         NullReferenceException and report it since it isn't supposed to
17321         happen. 
17322
17323 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
17324
17325         * expression.cs (Binary.EmitBranchable): Also handle the cases for
17326         LogicalOr and LogicalAnd that can benefit from recursively
17327         handling EmitBranchable.  The code now should be nice for Paolo.
17328
17329 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
17330
17331         * typemanager.cs (LookupType): Added a negative-hit hashtable for
17332         the Type lookups, as we perform quite a number of lookups on
17333         non-Types.  This can be removed once we can deterministically tell
17334         whether we have a type or a namespace in advance.
17335
17336         But this might require special hacks from our corlib.
17337
17338         * TODO: updated.
17339
17340         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
17341         and double which avoids a conversion from an integer to a double.
17342
17343         * expression.cs: tiny optimization, avoid calling IsConstant,
17344         because it effectively performs the lookup twice.
17345
17346 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
17347
17348         But a bogus return here to keep the semantics of the old code
17349         until the Mono runtime is fixed.
17350
17351         * pending.cs (GetMissingInterfaces): New method used to remove all
17352         the interfaces that are already implemented by our parent
17353         classes from the list of pending methods. 
17354
17355         * interface.cs: Add checks for calls after ResolveTypeExpr.
17356
17357 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
17358
17359         * class.cs (Class.Emit): Report warning 67: event not used if the
17360         warning level is beyond 3.
17361
17362         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
17363         being a NullLiteral.
17364
17365         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
17366         specifiers. 
17367
17368         * class.cs (TypeContainer.GetClassBases): Cover a missing code
17369         path that might fail if a type can not be resolved.
17370
17371         * expression.cs (Binary.Emit): Emit unsigned versions of the
17372         operators. 
17373
17374         * driver.cs: use error 5.
17375
17376 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
17377
17378         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
17379
17380 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
17381
17382         * cs-parser.jay (switch_section): A beautiful patch from Martin
17383         Baulig that fixed 33094.
17384
17385 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
17386
17387         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
17388         Check whether the base is abstract and report an error if so.
17389
17390         * expression.cs (IndexerAccess.DoResolveLValue,
17391         IndexerAccess.DoResolve): ditto. 
17392
17393         (Invocation.DoResolve): ditto.
17394
17395         (Invocation.FullMethodDesc): Improve the report string.
17396
17397         * statement.cs (Block): Eliminate IsVariableDefined as it is
17398         basically just a wrapper for GetVariableInfo.
17399
17400         * ecore.cs (SimpleName): Use new 
17401
17402         * support.cs (ReflectionParamter.ParameterType): We unwrap the
17403         type, as we return the actual parameter ref/unref state on a
17404         different call.
17405
17406 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
17407
17408         * support.cs: Return proper flags REF/OUT fixing the previous
17409         commit.  
17410
17411         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
17412         not used to mean `ref' but `ref or out' in ParameterReference
17413
17414         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
17415         full type signature instead of calling TypeManger.CSharpName
17416         ourselves. 
17417
17418         * support.cs (InternalParameters.ParameterDesc): Do not compare
17419         directly to the modflags, because REF/OUT will actually be bitsets
17420         if set. 
17421
17422         * delegate.cs (VerifyMethod): Check also the modifiers.
17423
17424         * cs-tokenizer.cs: Fix bug where floating point values with an
17425         exponent where a sign was missing was ignored.
17426
17427         * driver.cs: Allow multiple assemblies to be specified in a single
17428         /r: argument
17429
17430 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
17431
17432         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
17433         because identifiers after a parenthesis would end up in this kind
17434         of production, and we needed to desamiguate it for having casts
17435         like:
17436
17437                 (UserDefinedType *) xxx
17438
17439 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
17440
17441         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
17442         we should set on the Bindingflags.NonPublic, but not turn on
17443         private_ok.  private_ok controls whether a Private member is
17444         returned (this is chekced on the filter routine), while the
17445         BindingFlags.NonPublic just controls whether private/protected
17446         will be allowed.   This fixes the problem part of the problem of
17447         private properties being allowed to be used in derived classes.
17448
17449         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
17450         so we can call the children DoResolveLValue method (this will
17451         properly signal errors on lvalue assignments to base properties)
17452
17453         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
17454         getter are null, and we have a property info, we know that this
17455         happened because the lookup failed, so we report an error 122 for
17456         protection level violation.
17457
17458         We also silently return if setter and getter are null in the
17459         resolve functions, this condition only happens if we have flagged
17460         the error before.  This is the other half of the problem. 
17461
17462         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
17463         not have accessibility information, that is why we were returning
17464         true in the filter function in typemanager.cs.
17465
17466         To properly report 122 (property is inaccessible because of its
17467         protection level) correctly, we report this error in ResolveAccess
17468         by failing if both the setter and the getter are lacking (ie, the
17469         lookup failed). 
17470
17471         DoResolve and DoLResolve have been modified to check for both
17472         setter/getter being null and returning silently, the reason being
17473         that I did not want to put the knowledge about this error in upper
17474         layers, like:
17475
17476         int old = Report.Errors;
17477         x = new PropertyExpr (...);
17478         if (old != Report.Errors)
17479                 return null;
17480         else
17481                 return x;
17482
17483         So the property expr is returned, but it is invalid, so the error
17484         will be flagged during the resolve process. 
17485
17486         * class.cs: Remove InheritablePropertySignatureCompare from the
17487         class, as we no longer depend on the property signature to compute
17488         whether it is possible to implement a method or not.
17489
17490         The reason is that calling PropertyInfo.GetGetMethod will return
17491         null (in .NET, in Mono it works, and we should change this), in
17492         cases where the Get Method does not exist in that particular
17493         class.
17494
17495         So this code:
17496
17497         class X { public virtual int A { get { return 1; } } }
17498         class Y : X { }
17499         class Z : Y { public override int A { get { return 2; } } }
17500
17501         Would fail in Z because the parent (Y) would not have the property
17502         defined.  So we avoid this completely now (because the alternative
17503         fix was ugly and slow), and we now depend exclusively on the
17504         method names.
17505
17506         (PropertyBase.CheckBase): Use a method-base mechanism to find our
17507         reference method, instead of using the property.
17508
17509         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
17510         routines are gone now.
17511
17512         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
17513         names, they were incorrectly named.
17514
17515         * cs-tokenizer.cs: Return are more gentle token on failure. 
17516
17517         * pending.cs (PendingImplementation.InterfaceMethod): This routine
17518         had an out-of-sync index variable, which caused it to remove from
17519         the list of pending methods the wrong method sometimes.
17520
17521 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
17522
17523         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
17524         CanWrite, because those refer to this particular instance of the
17525         property, and do not take into account the fact that we can
17526         override single members of a property.
17527
17528         Constructor requires an EmitContext.  The resolution process does
17529         not happen here, but we need to compute the accessors before,
17530         because the resolution does not always happen for properties.
17531
17532         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
17533         subclass, before we did not update this flag, but we did update
17534         bindingflags. 
17535
17536         (GetAccessors): Drop this routine, as it did not work in the
17537         presence of partially overwritten set/get methods. 
17538
17539         Notice that this broke the cs1540 detection, but that will require
17540         more thinking. 
17541
17542 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17543
17544         * class.cs:
17545         * codegen.cs:
17546         * driver.cs: issue a warning instead of an error if we don't support
17547         debugging for the platform. Also ignore a couple of errors that may
17548         arise when trying to write the symbols. Undo my previous patch.
17549
17550 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17551
17552         * driver.cs: ignore /debug switch except for Unix platforms.
17553
17554 2002-10-23  Nick Drochak  <ndrochak@gol.com>
17555
17556         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
17557
17558 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
17559
17560         * driver.cs: Do not make mcs-debug conditional, so we do not break
17561         builds that use it.
17562
17563         * statement.cs (UsageVector.MergeChildren): I would like Martin to
17564         review this patch.  But basically after all the children variables
17565         have been merged, the value of "Breaks" was not being set to
17566         new_breaks for Switch blocks.  I think that it should be set after
17567         it has executed.  Currently I set this to the value of new_breaks,
17568         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
17569         conservative, but I do not understand this code very well.
17570
17571         I did not break anything in the build, so that is good ;-)
17572
17573         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
17574
17575 2002-10-20  Mark Crichton  <crichton@gimp.org>
17576
17577         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
17578
17579 2002-10-20  Nick Drochak  <ndrochak@gol.com>
17580
17581         * cfold.cs: Fixed compile blocker.
17582
17583 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
17584
17585         * driver.cs: I was chekcing the key, not the file.
17586
17587 2002-10-19  Ravi Pratap  <ravi@ximian.com>
17588
17589         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
17590         message that we were generating - we just need to silently return
17591         a null.
17592
17593 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
17594
17595         * class.cs (Event.Define): Change my previous commit, as this
17596         breaks the debugger.  This is a temporary hack, as it seems like
17597         the compiler is generating events incorrectly to begin with.
17598
17599         * expression.cs (Binary.ResolveOperator): Added support for 
17600         "U operator - (E x, E y)"
17601
17602         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
17603         y)".
17604
17605         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
17606         init-only variables, but this path did not take into account that
17607         there might be also instance readonly variables.  Correct this
17608         problem. 
17609
17610         This fixes bug 32253
17611
17612         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
17613         delegates as well.
17614
17615         * driver.cs: Change the extension for modules to `netmodule'
17616
17617         * cs-parser.jay: Improved slightly the location tracking for
17618         the debugger symbols.
17619
17620         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
17621         modifiers that were specified instead of the hardcoded value
17622         (FamAndAssem).  This was basically ignoring the static modifier,
17623         and others.  Fixes 32429.
17624
17625         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
17626         fixed a bug in the process (32476)
17627
17628         * expression.cs (ArrayAccess.EmitAssign): Patch from
17629         hwang_rob@yahoo.ca that fixes bug 31834.3
17630
17631 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
17632
17633         * driver.cs: Make the module extension .netmodule.
17634
17635 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
17636
17637         * driver.cs: Report an error if the resource file is not found
17638         instead of crashing.
17639
17640         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
17641         false, like Emit does.
17642
17643 2002-10-16  Nick Drochak  <ndrochak@gol.com>
17644
17645         * typemanager.cs: Remove unused private member.  Also reported mcs
17646         bug to report this as a warning like csc.
17647
17648 2002-10-15  Martin Baulig  <martin@gnome.org>
17649
17650         * statement.cs (Statement.Emit): Made this a virtual method; emits
17651         the line number info and calls DoEmit().
17652         (Statement.DoEmit): New protected abstract method, formerly knows
17653         as Statement.Emit().
17654
17655         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
17656
17657 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
17658
17659         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
17660         have fixed a remaining problem: not every AddXXXX was adding a
17661         fully qualified name.  
17662
17663         Now everyone registers a fully qualified name in the DeclSpace as
17664         being defined instead of the partial name.  
17665
17666         Downsides: we are slower than we need to be due to the excess
17667         copies and the names being registered this way.  
17668
17669         The reason for this is that we currently depend (on the corlib
17670         bootstrap for instance) that types are fully qualified, because
17671         we dump all the types in the namespace, and we should really have
17672         types inserted into the proper namespace, so we can only store the
17673         basenames in the defined_names array.
17674
17675 2002-10-10  Martin Baulig  <martin@gnome.org>
17676
17677         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
17678         from bug #31834, see the bug report for a testcase which is
17679         miscompiled.
17680
17681 2002-10-10  Martin Baulig  <martin@gnome.org>
17682
17683         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
17684         flow analysis code for this.
17685
17686         * statement.cs (Do, While, For): Tell the flow analysis code about
17687         infinite loops.
17688         (FlowBranching.UsageVector): Added support for infinite loops.
17689         (Block.Resolve): Moved the dead code elimination here and use flow
17690         analysis to do it.
17691
17692 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
17693
17694         * class.cs (Field.Define): Catch cycles on struct type
17695         definitions. 
17696
17697         * typemanager.cs (IsUnmanagedtype): Do not recursively check
17698         fields if the fields are static.  We only need to check instance
17699         fields. 
17700
17701         * expression.cs (As.DoResolve): Test for reference type.
17702
17703         * statement.cs (Using.ResolveExpression): Use
17704         ConvertImplicitRequired, not ConvertImplicit which reports an
17705         error on failture
17706         (Using.ResolveLocalVariableDecls): ditto.
17707
17708         * expression.cs (Binary.ResolveOperator): Report errors in a few
17709         places where we had to.
17710
17711         * typemanager.cs (IsUnmanagedtype): Finish implementation.
17712
17713 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
17714
17715         * expression.cs: Use StoreFromPtr instead of extracting the type
17716         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
17717
17718         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
17719         an enumeration value to a System.Enum, but System.Enum is not a
17720         value type, but an class type, so we need to box.
17721
17722         (Expression.ConvertExplicit): One codepath could return
17723         errors but not flag them.  Fix this.  Fixes #31853
17724
17725         * parameter.cs (Resolve): Do not allow void as a parameter type.
17726
17727 2002-10-06  Martin Baulig  <martin@gnome.org>
17728
17729         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
17730         if it's a class type and not a struct.  Fixes #31815.
17731
17732 2002-10-06  Martin Baulig  <martin@gnome.org>
17733
17734         * statement.cs: Reworked the flow analysis code a bit to make it
17735         usable for dead code elimination.
17736
17737 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17738
17739         * cs-parser.jay: allow empty source files. Fixes bug #31781.
17740
17741 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17742
17743         * expression.cs (ComposedCast.DoResolveType): A quick workaround
17744         to fix the test 165, will investigate deeper.
17745
17746 2002-10-04  Martin Baulig  <martin@gnome.org>
17747
17748         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
17749         finally blocks actually work.
17750         (Try.Resolve): We don't need to create a sibling for `finally' if
17751         there is no finally block.
17752
17753 2002-10-04  Martin Baulig  <martin@gnome.org>
17754
17755         * class.cs (Constructor.Define): The default accessibility for a
17756         non-default constructor is private, not public.
17757
17758 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17759
17760         * class.cs (Constructor): Make AllowedModifiers public, add
17761         EXTERN.
17762
17763         * cs-parser.jay: Perform the modifiers test here, as the
17764         constructor for the Constructor class usually receives a zero
17765         because of the way we create it (first we create, later we
17766         customize, and we were never checking the modifiers).
17767
17768         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
17769         is a version of LookupTypeReflection that includes the type-name
17770         cache.  This can be used as a fast path for functions that know
17771         the fully qualified name and are only calling into *.GetType() to
17772         obtain a composed type.
17773
17774         This is also used by TypeManager.LookupType during its type
17775         composition.
17776
17777         (LookupType): We now also track the real type name, as sometimes
17778         we can get a quey for the real type name from things like
17779         ComposedCast.  This fixes bug 31422.
17780
17781         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
17782         complete type fullname, it does not have to go through the type
17783         resolution system to obtain the composed version of the type (for
17784         obtaining arrays or pointers).
17785
17786         (Conditional.Emit): Use the EmitBoolExpression to
17787         generate nicer code, as requested by Paolo.
17788
17789         (ArrayCreation.CheckIndices): Use the patch from
17790         hwang_rob@yahoo.ca to validate the array initializers. 
17791
17792 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
17793
17794         * class.cs (ConstructorInitializer.Emit): simplify code by using
17795         Invocation.EmitCall, and at the same time, fix the bugs in calling
17796         parent constructors that took variable arguments. 
17797
17798         * ecore.cs (Expression.ConvertNumericExplicit,
17799         Expression.ImplicitNumericConversion): Remove the code that
17800         manually wrapped decimal (InternalTypeConstructor call is now gone
17801         as well).
17802
17803         * expression.cs (Cast.TryReduce): Also handle decimal types when
17804         trying to perform a constant fold on the type.
17805
17806         * typemanager.cs (IsUnmanagedtype): Partially implemented.
17807
17808         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
17809         that only turned off an error report, and did nothing else. 
17810
17811 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
17812
17813         * driver.cs: Handle and ignore /fullpaths
17814
17815 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
17816
17817         * expression.cs (Binary.ResolveOperator): Catch the case where
17818         DoNumericPromotions returns true, 
17819
17820         (Binary.DoNumericPromotions): Simplify the code, and the tests.
17821
17822 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
17823
17824         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
17825         report error 70.
17826
17827 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
17828
17829         * ecore.cs (ConvertNumericExplicit): It is not enough that the
17830         conversion exists, but it is also required that the conversion be
17831         performed.  This manifested in "(Type64Enum) 2".  
17832
17833         * class.cs (TypeManager.AddMethod): The fix is not to change
17834         AddEnum, because that one was using a fully qualified name (every
17835         DeclSpace derivative does), but to change the AddMethod routine
17836         that was using an un-namespaced name.  This now correctly reports
17837         the duplicated name.
17838
17839         Revert patch until I can properly fix it.  The issue
17840         is that we have a shared Type space across all namespaces
17841         currently, which is wrong.
17842
17843         Options include making the Namespace a DeclSpace, and merge
17844         current_namespace/current_container in the parser.
17845
17846 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
17847
17848         * cs-parser.jay: Improve error reporting when we get a different
17849         kind of expression in local_variable_type and
17850         local_variable_pointer_type. 
17851
17852         Propagate this to avoid missleading errors being reported.
17853
17854         * ecore.cs (ImplicitReferenceConversion): treat
17855         TypeManager.value_type as a target just like object_type.   As
17856         code like this:
17857
17858         ValueType v = 1;
17859
17860         Is valid, and needs to result in the int 1 being boxed before it
17861         is assigned to the value type v.
17862
17863         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
17864         to validate the enumeration name.
17865
17866         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
17867         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
17868         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
17869
17870         * ecore.cs (TryImplicitIntConversion): When doing an
17871         implicit-enumeration-conversion, check if the type is 64-bits and
17872         perform a conversion before passing to EnumConstant.
17873
17874 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
17875
17876         * decl.cs (Error_AmbiguousTypeReference); New routine used to
17877         report ambiguous type references.  Unlike the MS version, we
17878         report what the ambiguity is.   Innovation at work ;-)
17879
17880         (DeclSpace.FindType): Require a location argument to
17881         display when we display an ambiguous error.
17882
17883         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
17884
17885         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
17886
17887         * expression.cs (EmitDynamicInitializers): Apply patch from
17888         hwang_rob@yahoo.ca that fixes the order in which we emit our
17889         initializers. 
17890
17891 2002-09-21  Martin Baulig  <martin@gnome.org>
17892
17893         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
17894         delegate takes no arguments.
17895
17896 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
17897
17898         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
17899         from integers.
17900
17901         * expression.cs: Extract the underlying type.
17902
17903         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
17904
17905         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
17906
17907 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
17908
17909         * class.cs (TypeContainer.DefineType): We can not use the nice
17910         PackingSize with the size set to 1 DefineType method, because it
17911         will not allow us to define the interfaces that the struct
17912         implements.
17913
17914         This completes the fixing of bug 27287
17915
17916         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
17917         means also structs.  This fixes part of the problem. 
17918         (Expresion.ImplicitReferenceConversionExists): ditto.
17919
17920         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
17921         error if there were no errors reported during the type lookup
17922         process, to avoid duplicates or redundant errors.  Without this
17923         you would get an ambiguous errors plus a type not found.  We have
17924         beaten the user enough with the first error.  
17925
17926         (DeclSparce.FindType): Emit a warning if we have an ambiguous
17927         reference. 
17928
17929         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
17930         during the resolution process, stop the lookup, this avoids
17931         repeated error reports (same error twice).
17932
17933         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
17934
17935         * typemanager.cs (LookupType): Redo the type lookup code to match
17936         the needs of System.Reflection.  
17937
17938         The issue is that System.Reflection requires references to nested
17939         types to begin with a "+" sign instead of a dot.  So toplevel
17940         types look like: "NameSpace.TopLevelClass", and nested ones look
17941         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
17942         levels. 
17943
17944 2002-09-19  Martin Baulig  <martin@gnome.org>
17945
17946         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
17947         says that a method always returns or always throws an exception,
17948         don't report the CS0161.
17949
17950         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
17951         set `Returns = new_returns'.
17952
17953 2002-09-19  Martin Baulig  <martin@gnome.org>
17954
17955         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
17956         to an enum constant, check for a CS0176.
17957
17958 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
17959
17960         * class.cs (TypeContainer.CheckPairedOperators): Now we check
17961         for operators that must be in pairs and report errors.
17962
17963         * ecore.cs (SimpleName.DoResolveType): During the initial type
17964         resolution process, when we define types recursively, we must
17965         check first for types in our current scope before we perform
17966         lookups in the enclosing scopes.
17967
17968         * expression.cs (MakeByteBlob): Handle Decimal blobs.
17969
17970         (Invocation.VerifyArgumentsCompat): Call
17971         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
17972         I thought we were supposed to always call this, but there are a
17973         few places in the code where we dont do it.
17974
17975 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
17976
17977         * driver.cs: Add support in -linkres and -resource to specify the
17978         name of the identifier.
17979
17980 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17981
17982         * ecore.cs (StandardConversionExists): Sync with the conversion
17983         code: allow anything-* to void* conversions.
17984
17985         (FindMostSpecificSource): Use an Expression argument
17986         instead of a Type, because we might be handed over a Literal which
17987         gets a few more implicit conversions that plain types do not.  So
17988         this information was being lost.
17989
17990         Also, we drop the temporary type-holder expression when not
17991         required.
17992
17993 2002-09-17  Martin Baulig  <martin@gnome.org>
17994
17995         * class.cs (PropertyBase.CheckBase): Don't check the base class if
17996         this is an explicit interface implementation.
17997
17998 2002-09-17  Martin Baulig  <martin@gnome.org>
17999
18000         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
18001         different `IndexerName' attributes.
18002
18003         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
18004         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
18005         virtual CommonResolve().
18006
18007 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
18008
18009         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
18010         and convert that to the UnderlyingType.
18011
18012         * statement.cs (Foreach.Resolve): Indexers are just like variables
18013         or PropertyAccesses.
18014
18015         * cs-tokenizer.cs (consume_string): Track line numbers and columns
18016         inside quoted strings, we were not doing this before.
18017
18018 2002-09-16  Martin Baulig  <martin@gnome.org>
18019
18020         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
18021         resolve it.  This is needed for the definite assignment check of the
18022         instance expression, fixes bug #29846.
18023         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
18024
18025 2002-09-16  Nick Drochak  <ndrochak@gol.com>
18026
18027         * parameter.cs: Fix compile error.  Cannot reference static member
18028         from an instance object.  Is this an mcs bug?
18029
18030 2002-09-14  Martin Baulig  <martin@gnome.org>
18031
18032         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
18033         multiple times.  Fixes bug #30295, added test-166.cs.
18034
18035 2002-09-14  Martin Baulig  <martin@gnome.org>
18036
18037         * statement.cs (Block.Emit): Don't emit unreachable code.
18038         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
18039         `break' statements.
18040         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
18041
18042 2002-09-14  Martin Baulig  <martin@gnome.org>
18043
18044         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
18045         is set.
18046
18047 2002-09-14  Martin Baulig  <martin@gnome.org>
18048
18049         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
18050         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
18051         be false on the ms runtime.
18052
18053 2002-09-13  Martin Baulig  <martin@gnome.org>
18054
18055         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
18056         the CS0038 error message.
18057
18058 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
18059
18060         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
18061         constant inside, return it.
18062
18063 2002-09-12  Martin Baulig  <martin@gnome.org>
18064
18065         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
18066         implicit conversion can be done between enum types.
18067
18068         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
18069         check whether an implicit conversion to the current enum's UnderlyingType
18070         exists and report an error if not.
18071
18072         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
18073         without debugging support.
18074
18075         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
18076         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
18077
18078 2002-09-12  Martin Baulig  <martin@gnome.org>
18079
18080         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
18081
18082         * ecore.cs (IMemberExpr.DeclaringType): New property.
18083         (SimpleName.SimpleNameResolve): Check whether we're accessing a
18084         nonstatic member of an outer type (CS0038).
18085
18086 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
18087
18088         * driver.cs: Activate the using-error detector at warning level
18089         4 (at least for MS-compatible APIs).
18090
18091         * namespace.cs (VerifyUsing): Small buglett fix.
18092
18093         * pending.cs (PendingImplementation): pass the container pointer. 
18094
18095         * interface.cs (GetMethods): Allow for recursive definition.  Long
18096         term, I would like to move every type to support recursive
18097         definitions, not the current ordering mechanism that we have right
18098         now.
18099
18100         The situation is this: Attributes are handled before interfaces,
18101         so we can apply attributes to interfaces.  But some attributes
18102         implement interfaces, we will now handle the simple cases
18103         (recursive definitions will just get an error).  
18104
18105         * parameter.cs: Only invalidate types at the end if we fail to
18106         lookup all types.  
18107
18108 2002-09-09  Martin Baulig  <martin@gnome.org>
18109
18110         * ecore.cs (PropertyExpr.Emit): Also check for
18111         TypeManager.system_int_array_get_length so this'll also work when
18112         compiling corlib.  Fixes #30003.
18113
18114 2002-09-09  Martin Baulig  <martin@gnome.org>
18115
18116         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
18117         and throw an exception if we can't get the type's size.  Fixed #30040,
18118         added test-165.cs.
18119
18120 2002-09-09  Martin Baulig  <martin@gnome.org>
18121
18122         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
18123
18124         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
18125         context.  Fixes bug #30027.
18126
18127         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
18128         virtual functions.  Fixes bug #30043, added test-164.cs.
18129
18130 2002-09-08  Ravi Pratap  <ravi@ximian.com>
18131
18132         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
18133
18134 2002-09-08  Nick Drochak  <ndrochak@gol.com>
18135
18136         * driver.cs: Use an object to get the windows codepage since it's not a
18137         static property.
18138
18139 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
18140
18141         * statement.cs (For.Emit): for infinite loops (test == null)
18142         return whether there is a break inside, not always "true".
18143
18144         * namespace.cs (UsingEntry): New struct to hold the name of the
18145         using definition, the location where it is defined, and whether it
18146         has been used in a successful type lookup.
18147
18148         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
18149         strings.
18150
18151         * decl.cs: ditto.
18152
18153 2002-09-06  Ravi Pratap  <ravi@ximian.com>
18154
18155         * attribute.cs : Fix incorrect code which relied on catching
18156         a NullReferenceException to detect a null being passed in
18157         where an object was expected.
18158
18159 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
18160
18161         * statement.cs (Try): flag the catch variable as assigned
18162
18163         * expression.cs (Cast): Simplified by using ResolveType instead of
18164         manually resolving.
18165
18166         * statement.cs (Catch): Fix bug by using ResolveType.
18167
18168 2002-09-06  Ravi Pratap  <ravi@ximian.com>
18169
18170         * expression.cs (BetterConversion): Special case for when we have
18171         a NullLiteral as the argument and we have to choose between string
18172         and object types - we choose string the way csc does.
18173
18174         * attribute.cs (Attribute.Resolve): Catch the
18175         NullReferenceException and report error #182 since the Mono
18176         runtime no more has the bug and having this exception raised means
18177         we tried to select a constructor which takes an object and is
18178         passed a null.
18179
18180 2002-09-05  Ravi Pratap  <ravi@ximian.com>
18181
18182         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
18183         message (1502, 1503) when we can't locate a method after overload
18184         resolution. This is much more informative and closes the bug
18185         Miguel reported.
18186
18187         * interface.cs (PopulateMethod): Return if there are no argument
18188         types. Fixes a NullReferenceException bug.
18189
18190         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
18191         expressions too. Previously we were checking only in one place for
18192         positional arguments leaving out named arguments.
18193
18194         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
18195         type to the enum type is not allowed. Remove code corresponding to
18196         that.
18197
18198         (ConvertNumericExplicit): Allow explicit conversions from
18199         the underlying type to enum type. This precisely follows the spec
18200         and closes a bug filed by Gonzalo.
18201
18202 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18203
18204         * compiler.csproj:
18205         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
18206
18207 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
18208
18209         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
18210         it was important that we stored the right value after the
18211         reduction in `converted'.
18212
18213 2002-09-04  Martin Baulig  <martin@gnome.org>
18214
18215         * location.cs (Location.SymbolDocument): Use full pathnames for the
18216         source files.
18217
18218 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
18219
18220         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
18221         of the expression resolve mechanism, because that will catch the
18222         SimpleName error failures.
18223
18224         (Conditional): If we can not resolve the
18225         expression, return, do not crash.
18226
18227 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18228
18229         * cs-tokenizer.cs:
18230         (location): display token name instead of its number.
18231
18232 2002-08-28  Martin Baulig  <martin@gnome.org>
18233
18234         * expression.cs (Binary.ResolveOperator): Don't silently return
18235         but return an error if an operator cannot be applied between two
18236         enum types.
18237
18238 2002-08-28  Martin Baulig  <martin@gnome.org>
18239
18240         * class.cs (Constructor.Define): Set the permission attributes
18241         correctly instead of making all constructors public.
18242
18243 2002-08-28  Martin Baulig  <martin@gnome.org>
18244
18245         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
18246         for private members before reporting a CS0103; if we find anything,
18247         it's a CS0122.
18248
18249 2002-08-28  Martin Baulig  <martin@gnome.org>
18250
18251         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
18252         to check whether `closure_start_type == closure_invocation_type',
18253         we also need to check whether `m.DeclaringType == closure_invocation_type'
18254         before bypassing the permission checks.  We might be accessing
18255         protected/private members from the base class.
18256         (TypeManager.RealMemberLookup): Only set private_ok if private
18257         members were requested via BindingFlags.NonPublic.
18258
18259         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
18260
18261         * expression.cs (MemberAccess.ResolveMemberAccess): Set
18262         MethodGroupExpr.IsExplicitImpl if appropriate.
18263         (Invocation.DoResolve): Don't report the CS0120 for explicit
18264         interface implementations.
18265
18266 2002-08-27  Martin Baulig  <martin@gnome.org>
18267
18268         * expression.cs (Invocation.DoResolve): If this is a static
18269         method and we don't have an InstanceExpression, we must report
18270         a CS0120.
18271
18272 2002-08-25  Martin Baulig  <martin@gnome.org>
18273
18274         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
18275         `==' between a valuetype and an object.
18276
18277 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
18278
18279         * ecore.cs (TypeExpr): Provide a ToString method.
18280
18281 2002-08-24  Martin Baulig  <martin@gnome.org>
18282
18283         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
18284         now called proggie.dbg and it's a binary file.
18285
18286 2002-08-23  Martin Baulig  <martin@gnome.org>
18287
18288         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
18289
18290 2002-08-23  Martin Baulig  <martin@gnome.org>
18291
18292         * struct.cs (MyStructInfo.ctor): Make this work with empty
18293         structs; it's not allowed to use foreach() on null.
18294
18295 2002-08-23  Martin Baulig  <martin@gnome.org>
18296
18297         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
18298         writer the full pathname of the generated assembly.
18299
18300 2002-08-23  Martin Baulig  <martin@gnome.org>
18301
18302         * statements.cs (FlowBranching.UsageVector.MergeChildren):
18303         A `finally' block never returns or breaks; improved handling of
18304         unreachable code.
18305
18306 2002-08-23  Martin Baulig  <martin@gnome.org>
18307
18308         * statement.cs (Throw.Resolve): Allow `throw null'.
18309
18310 2002-08-23  Martin Baulig  <martin@gnome.org>
18311
18312         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
18313         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
18314         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
18315         MemberLookup would return a wrong event if this is an explicit
18316         interface implementation and the class has an event with the same
18317         name.
18318
18319 2002-08-23  Martin Baulig  <martin@gnome.org>
18320
18321         * statement.cs (Block.AddChildVariableNames): New public method.
18322         (Block.AddChildVariableName): Likewise.
18323         (Block.IsVariableNameUsedInChildBlock): Likewise.
18324         (Block.AddVariable): Check whether a variable name has already
18325         been used in a child block.
18326
18327         * cs-parser.jay (declare_local_variables): Mark all variable names
18328         from the current block as being used in a child block in the
18329         implicit block.
18330
18331 2002-08-23  Martin Baulig  <martin@gnome.org>
18332
18333         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
18334         find the symbol writer.
18335
18336         * driver.cs: csc also allows the arguments to /define being
18337         separated by commas, not only by semicolons.
18338
18339 2002-08-23  Martin Baulig  <martin@gnome.org>
18340
18341         * interface.cs (Interface.GetMembers): Added static check for events.
18342
18343 2002-08-15  Martin Baulig  <martin@gnome.org>
18344
18345         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
18346         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
18347
18348         * ecore.cs (Expression.MemberLookup): Added documentation and explained
18349         why the MethodData.EmitDestructor() change was necessary.
18350
18351 2002-08-20  Martin Baulig  <martin@gnome.org>
18352
18353         * class.cs (TypeContainer.FindMembers): Added static check for events.
18354
18355         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
18356
18357         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
18358         use Type.GetEvents(), not Type.FindMembers().
18359
18360 2002-08-20  Martin Baulig  <martin@gnome.org>
18361
18362         * decl.cs (MemberCache): Added a special method cache which will
18363         be used for method-only searched.  This ensures that a method
18364         search will return a MethodInfo with the correct ReflectedType for
18365         inherited methods.      
18366
18367 2002-08-20  Martin Baulig  <martin@gnome.org>
18368
18369         * decl.cs (DeclSpace.FindMembers): Made this public.
18370
18371 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18372
18373         * delegate.cs: fixed build on windows.
18374         [FIXME:  Filed as bug #29150: MCS must report these errors.]
18375
18376 2002-08-19  Ravi Pratap  <ravi@ximian.com>
18377
18378         * ecore.cs (StandardConversionExists): Return a false
18379         if we are trying to convert the void type to anything else
18380         since that is not allowed.
18381
18382         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
18383         we flag error 70 in the event an event is trying to be accessed
18384         directly from outside the declaring type.
18385
18386 2002-08-20  Martin Baulig  <martin@gnome.org>
18387
18388         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
18389         MemberCache from typemanager.cs to decl.cs.
18390
18391 2002-08-19  Martin Baulig  <martin@gnome.org>
18392
18393         * class.cs (TypeContainer): Implement IMemberContainer.
18394         (TypeContainer.DefineMembers): Create the MemberCache.
18395         (TypeContainer.FindMembers): Do better BindingFlags checking; only
18396         return public members if BindingFlags.Public was given, check
18397         whether members are static.
18398
18399 2002-08-16  Martin Baulig  <martin@gnome.org>
18400
18401         * decl.cs (DeclSpace.Define): Splitted this in Define and
18402         DefineMembers.  DefineMembers is called first and initializes the
18403         MemberCache.
18404
18405         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
18406         DefineMembers() on all our DeclSpaces.
18407
18408         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
18409         but call DefineMembers() on all nested interfaces.  We call their
18410         Define() in our new Define() function.
18411
18412         * interface.cs (Interface): Implement IMemberContainer.
18413         (Interface.Define): Moved all code except the attribute stuf to
18414         DefineMembers().
18415         (Interface.DefineMembers): Initialize the member cache.
18416
18417         * typemanager.cs (IMemberFinder): Removed this interface, we don't
18418         need this anymore since we can use MemberCache.FindMembers directly.
18419
18420 2002-08-19  Martin Baulig  <martin@gnome.org>
18421
18422         * typemanager.cs (MemberCache): When creating the cache for an
18423         interface type, add all inherited members.
18424         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
18425         to `out bool used_cache' and documented it.
18426         (TypeManager.MemberLookup): If we already used the cache in the first
18427         iteration, we don't need to do the interfaces check.
18428
18429 2002-08-19  Martin Baulig  <martin@gnome.org>
18430
18431         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
18432         here from IMemberFinder and don't implement this interface anymore.
18433         (DeclSpace.MemberCache): Moved here from IMemberFinder.
18434
18435         * typemanager.cs (IMemberFinder): This interface is now only used by
18436         classes which actually support the member cache.
18437         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
18438         since we only put DeclSpaces into this Hashtable.
18439         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
18440         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
18441
18442 2002-08-16  Martin Baulig  <martin@gnome.org>
18443
18444         * typemanager.cs (ICachingMemberFinder): Removed.
18445         (IMemberFinder.MemberCache): New property.
18446         (TypeManager.FindMembers): Merged this with RealFindMembers().
18447         This function will never be called from TypeManager.MemberLookup()
18448         so we can't use the cache here, just the IMemberFinder.
18449         (TypeManager.MemberLookup_FindMembers): Check whether the
18450         IMemberFinder has a MemberCache and call the cache's FindMembers
18451         function.
18452         (MemberCache): Rewrote larger parts of this yet another time and
18453         cleaned it up a bit.
18454
18455 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
18456
18457         * driver.cs (LoadArgs): Support quoting.
18458
18459         (Usage): Show the CSC-like command line arguments.
18460
18461         Improved a few error messages.
18462
18463 2002-08-15  Martin Baulig  <martin@gnome.org>
18464
18465         * typemanager.cs (IMemberContainer.Type): New property.
18466         (IMemberContainer.IsInterface): New property.
18467
18468         The following changes are conditional to BROKEN_RUNTIME, which is
18469         defined at the top of the file.
18470
18471         * typemanager.cs (MemberCache.MemberCache): Don't add the base
18472         class'es members, but add all members from TypeHandle.ObjectType
18473         if we're an interface.
18474         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
18475         is the current type.
18476         (MemberCache.CacheEntry.Container): Removed this field.
18477         (TypeHandle.GetMembers): Include inherited members.
18478
18479 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18480
18481         * typemanager.cs: fixed compilation and added a comment on a field that
18482         is never used.
18483
18484 2002-08-15  Martin Baulig  <martin@gnome.org>
18485
18486         * class.cs (ConstructorInitializer.Resolve): In the
18487         Expression.MemberLookup call, use the queried_type as
18488         invocation_type.
18489
18490         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
18491         declared' attribute, it's always true.
18492         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
18493         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
18494         temporary wrapper for FindMembers which tells MemberLookup whether
18495         members from the base classes are included in the return value.
18496         This will go away soon.
18497         (TypeManager.MemberLookup): Use this temporary hack here; once the
18498         new MemberCache is completed, we don't need to do the DeclaredOnly
18499         looping here anymore since the MemberCache will take care of this.
18500         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
18501         (MemberCache): When creating the MemberCache for a class, get
18502         members from the current class and all its base classes.
18503         (MemberCache.CacheEntry.Container): New field.  This is a
18504         temporary hack until the Mono runtime is fixed to distinguish
18505         between ReflectedType and DeclaringType.  It allows us to use MCS
18506         with both the MS runtime and the unfixed Mono runtime without
18507         problems and without accecting performance.
18508         (MemberCache.SearchMembers): The DeclaredOnly looping from
18509         TypeManager.MemberLookup is now done here.      
18510
18511 2002-08-14  Martin Baulig  <martin@gnome.org>
18512
18513         * statement.cs (MyStructInfo.MyStructInfo): Don't call
18514         Type.GetFields on dynamic types but get the fields from the
18515         corresponding TypeContainer.
18516         (MyStructInfo.GetStructInfo): Added check for enum types.
18517
18518         * typemanager.cs (MemberList.IsSynchronized): Implemented.
18519         (MemberList.SyncRoot): Implemented.
18520         (TypeManager.FilterWithClosure): No need to check permissions if
18521         closure_start_type == closure_invocation_type, don't crash if
18522         closure_invocation_type is null.
18523
18524 2002-08-13  Martin Baulig  <martin@gnome.org>
18525
18526         Rewrote TypeContainer.FindMembers to use a member cache.  This
18527         gives us a speed increase of about 35% for the self-hosting MCS
18528         build and of about 15-20% for the class libs (both on GNU/Linux).
18529
18530         * report.cs (Timer): New class to get enhanced profiling.  This
18531         whole class is "TIMER" conditional since it remarkably slows down
18532         compilation speed.
18533
18534         * class.cs (MemberList): New class.  This is an IList wrapper
18535         which we're now using instead of passing MemberInfo[]'s around to
18536         avoid copying this array unnecessarily.
18537         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
18538         (ICachingMemberFinder, IMemberContainer): New interface.
18539         (TypeManager.FilterWithClosure): If `criteria' is null, the name
18540         has already been checked, otherwise use it for the name comparision.
18541         (TypeManager.FindMembers): Renamed to RealMemberFinder and
18542         provided wrapper which tries to use ICachingMemberFinder.FindMembers
18543         if possible.  Returns a MemberList, not a MemberInfo [].
18544         (TypeHandle): New class, implements IMemberContainer.  We create
18545         one instance of this class per type, it contains a MemberCache
18546         which is used to do the member lookups.
18547         (MemberCache): New class.  Each instance of this class contains
18548         all members of a type and a name-based hash table.
18549         (MemberCache.FindMembers): This is our new member lookup
18550         function.  First, it looks up all members of the requested name in
18551         the hash table.  Then, it walks this list and sorts out all
18552         applicable members and returns them.
18553
18554 2002-08-13  Martin Baulig  <martin@gnome.org>
18555
18556         In addition to a nice code cleanup, this gives us a performance
18557         increase of about 1.4% on GNU/Linux - not much, but it's already
18558         half a second for the self-hosting MCS compilation.
18559
18560         * typemanager.cs (IMemberFinder): New interface.  It is used by
18561         TypeManager.FindMembers to call FindMembers on a TypeContainer,
18562         Enum, Delegate or Interface.
18563         (TypeManager.finder_to_member_finder): New PtrHashtable.
18564         (TypeManager.finder_to_container): Removed.
18565         (TypeManager.finder_to_delegate): Removed.
18566         (TypeManager.finder_to_interface): Removed.
18567         (TypeManager.finder_to_enum): Removed.
18568
18569         * interface.cs (Interface): Implement IMemberFinder.
18570
18571         * delegate.cs (Delegate): Implement IMemberFinder.
18572
18573         * enum.cs (Enum): Implement IMemberFinder.
18574
18575         * class.cs (TypeContainer): Implement IMemberFinder.
18576
18577 2002-08-12  Martin Baulig  <martin@gnome.org>
18578
18579         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
18580
18581 2002-08-12  Martin Baulig  <martin@gnome.org>
18582
18583         * ecore.cs (ITypeExpression): New interface for expressions which
18584         resolve to a type.
18585         (TypeExpression): Renamed to TypeLookupExpression.
18586         (Expression.DoResolve): If we're doing a types-only lookup, the
18587         expression must implement the ITypeExpression interface and we
18588         call DoResolveType() on it.
18589         (SimpleName): Implement the new ITypeExpression interface.
18590         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
18591         hack, the situation that we're only looking up types can't happen
18592         anymore when this method is called.  Moved the type lookup code to
18593         DoResolveType() and call it.
18594         (SimpleName.DoResolveType): This ITypeExpression interface method
18595         is now doing the types-only lookup.
18596         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
18597         (ResolveFlags): Added MaskExprClass.
18598
18599         * expression.cs (MemberAccess): Implement the ITypeExpression
18600         interface.
18601         (MemberAccess.DoResolve): Added support for a types-only lookup
18602         when we're called via ITypeExpression.DoResolveType().
18603         (ComposedCast): Implement the ITypeExpression interface.
18604
18605         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
18606         Expression.Resolve() with ResolveFlags.Type instead.
18607
18608 2002-08-12  Martin Baulig  <martin@gnome.org>
18609
18610         * interface.cs (Interface.Define): Apply attributes.
18611
18612         * attribute.cs (Attribute.ApplyAttributes): Added support for
18613         interface attributes.
18614
18615 2002-08-11  Martin Baulig  <martin@gnome.org>
18616
18617         * statement.cs (Block.Emit): Only check the "this" variable if we
18618         do not always throw an exception.
18619
18620         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
18621         whether the property has a set accessor.
18622
18623 2002-08-11  Martin Baulig  <martin@gnome.org>
18624
18625         Added control flow analysis support for structs.
18626
18627         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
18628         with control flow analysis turned off.
18629         (IVariable): New interface.
18630         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
18631         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
18632         (FieldExpr.DoResolve): Resolve the instance expression with flow
18633         analysis turned off and do the definite assignment check after the
18634         resolving when we know what the expression will resolve to.
18635
18636         * expression.cs (LocalVariableReference, ParameterReference):
18637         Implement the new IVariable interface, only call the flow analysis
18638         code if ec.DoFlowAnalysis is true.
18639         (This): Added constructor which takes a Block argument.  Implement
18640         the new IVariable interface.
18641         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
18642         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
18643         This does the definite assignment checks for struct members.
18644
18645         * class.cs (Constructor.Emit): If this is a non-static `struct'
18646         constructor which doesn't have any initializer, call
18647         Block.AddThisVariable() to tell the flow analysis code that all
18648         struct elements must be initialized before control returns from
18649         the constructor.
18650
18651         * statement.cs (MyStructInfo): New public class.
18652         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
18653         argument to this indexer.  If non-zero, check an individual struct
18654         member, not the whole struct.
18655         (FlowBranching.CheckOutParameters): Check struct members.
18656         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
18657         overloaded versions of these methods which take an additional
18658         `int field_idx' argument to check struct members.
18659         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
18660         overloaded versions of these methods which take an additional
18661         `string field_name' argument to check struct member.s
18662         (VariableInfo): Implement the IVariable interface.
18663         (VariableInfo.StructInfo): New public property.  Returns the
18664         MyStructInfo instance of the variable if it's a struct or null.
18665         (Block.AddThisVariable): New public method.  This is called from
18666         Constructor.Emit() for non-static `struct' constructor which do
18667         not have any initializer.  It creates a special variable for the
18668         "this" instance variable which will be checked by the flow
18669         analysis code to ensure that all of the struct's fields are
18670         initialized before control returns from the constructor.
18671         (UsageVector): Added support for struct members.  If a
18672         variable/parameter is a struct with N members, we reserve a slot
18673         in the usage vector for each member.  A struct is considered fully
18674         initialized if either the struct itself (slot 0) or all its
18675         members are initialized.
18676
18677 2002-08-08  Martin Baulig  <martin@gnome.org>
18678
18679         * driver.cs (Driver.MainDriver): Only report an error CS5001
18680         if there were no compilation errors.
18681
18682         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
18683         `UnsafeContext' property to determine whether the parent is in
18684         unsafe context rather than checking the parent's ModFlags:
18685         classes nested in an unsafe class are unsafe as well.
18686
18687 2002-08-08  Martin Baulig  <martin@gnome.org>
18688
18689         * statement.cs (UsageVector.MergeChildren): Distinguish between
18690         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
18691         we return.  Added test17() and test18() to test-154.cs.
18692
18693 2002-08-08  Martin Baulig  <martin@gnome.org>
18694
18695         * typemanager.cs (TypeManager.FilterWithClosure): If we have
18696         Family access, make sure the invoking type isn't a subclass of the
18697         queried type (that'd be a CS1540).
18698
18699         * ecore.cs (Expression.MemberLookup): Added overloaded version of
18700         this method which takes an additional `Type invocation_type'.
18701
18702         * expression.cs (BaseAccess.DoResolve): Use the base type as
18703         invocation and query type.
18704         (MemberAccess.DoResolve): If the lookup failed and we're about to
18705         report a CS0122, try a lookup with the ec.ContainerType - if this
18706         succeeds, we must report a CS1540.
18707
18708 2002-08-08  Martin Baulig  <martin@gnome.org>
18709
18710         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
18711         (MethodGroupExpr): Implement the IMemberExpr interface.
18712
18713         * expression (MemberAccess.ResolveMemberAccess): No need to have
18714         any special code for MethodGroupExprs anymore, they're now
18715         IMemberExprs.   
18716
18717 2002-08-08  Martin Baulig  <martin@gnome.org>
18718
18719         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
18720         Family, FamANDAssem and FamORAssem permissions.
18721         (TypeManager.IsSubclassOrNestedChildOf): New public method.
18722
18723 2002-08-08  Martin Baulig  <martin@gnome.org>
18724
18725         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
18726         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
18727         or loop block.
18728
18729 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
18730
18731         * driver.cs: implemented /resource option to embed managed resources.
18732
18733 2002-08-07  Martin Baulig  <martin@gnome.org>
18734
18735         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
18736         (FieldBase.HasFieldInitializer): New public property.
18737         (FieldBase.GetInitializerExpression): New public method.  Resolves and
18738         returns the field initializer and makes sure it is only resolved once.
18739         (TypeContainer.EmitFieldInitializers): Call
18740         FieldBase.GetInitializerExpression to get the initializer, this ensures
18741         that it isn't resolved multiple times.
18742
18743         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
18744         the resolving process (SimpleName/MemberLookup) that we're currently
18745         emitting a field initializer (which must not access any instance members,
18746         this is an error CS0236).
18747
18748         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
18749         argument, if the `IsFieldInitializer' flag is set, we must report and
18750         error CS0236 and not an error CS0120.   
18751
18752 2002-08-07  Martin Baulig  <martin@gnome.org>
18753
18754         * ecore.cs (IMemberExpr): New public interface.
18755         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
18756         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
18757         if the expression is an IMemberExpr.
18758
18759         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
18760         to be null, implicitly default to `this' if we're non-static in
18761         this case.  Simplified the code a lot by using the new IMemberExpr
18762         interface.  Also fixed bug #28176 here.
18763
18764 2002-08-06  Martin Baulig  <martin@gnome.org>
18765
18766         * cs-parser.jay (SimpleLookup): Removed.  We need to create
18767         ParameterReferences during semantic analysis so that we can do a
18768         type-only search when resolving Cast, TypeOf and SizeOf.
18769         (block): Pass the `current_local_parameters' to the Block's
18770         constructor.
18771
18772         * class.cs (ConstructorInitializer): Added `Parameters parameters'
18773         argument to the constructor.
18774         (ConstructorInitializer.Resolve): Create a temporary implicit
18775         block with the parameters.
18776
18777         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
18778         references here if we aren't doing a type-only search.
18779
18780         * statement.cs (Block): Added constructor which takes a
18781         `Parameters parameters' argument.
18782         (Block.Parameters): New public property.
18783
18784         * support.cs (InternalParameters.Parameters): Renamed `parameters'
18785         to `Parameters' and made it public readonly.
18786
18787 2002-08-06  Martin Baulig  <martin@gnome.org>
18788
18789         * ecore.cs (Expression.Warning): Made this public as well.
18790
18791         * report.cs (Report.Debug): Print the contents of collections.
18792
18793 2002-08-06  Martin Baulig  <martin@gnome.org>
18794
18795         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
18796         used to tell Resolve() which kinds of expressions it may return.
18797         (Expression.Resolve): Added overloaded version of this method which
18798         takes a `ResolveFlags flags' argument.  This can be used to tell
18799         Resolve() which kinds of expressions it may return.  Reports a
18800         CS0118 on error.
18801         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
18802         ResolveFlags.SimpleName.
18803         (Expression.Error118): Added overloaded version of this method which
18804         takes a `ResolveFlags flags' argument.  It uses the flags to determine
18805         which kinds of expressions are allowed.
18806
18807         * expression.cs (Argument.ResolveMethodGroup): New public method.
18808         Resolves an argument, but allows a MethodGroup to be returned.
18809         This is used when invoking a delegate.
18810
18811         * TODO: Updated a bit.
18812
18813 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18814
18815         Fixed compilation with csc.
18816
18817         * ecore.cs: Expression.Error made public. Is this correct? Should
18818         Warning be made public too?
18819
18820         * expression.cs: use ea.Location instead of ea.loc.
18821         [FIXME:  Filed as bug #28607: MCS must report these errors.]
18822
18823 2002-08-06  Martin Baulig  <martin@gnome.org>
18824
18825         * ecore.cs (Expression.loc): Moved the location here instead of
18826         duplicating it in all derived classes.
18827         (Expression.Location): New public property.
18828         (Expression.Error, Expression.Warning): Made them non-static and
18829         removed the location argument.
18830         (Expression.Warning): Added overloaded version which takes an
18831         `int level' argument.
18832         (Expression.Error118): Make this non-static and removed the
18833         expression and location arguments.
18834         (TypeExpr): Added location argument to the constructor.
18835
18836         * expression.cs (StaticCallExpr): Added location argument to
18837         the constructor.
18838         (Indirection, PointerArithmetic): Likewise.
18839         (CheckedExpr, UnCheckedExpr): Likewise.
18840         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
18841         (StringPtr): Likewise.
18842
18843
18844 2002-08-05  Martin Baulig  <martin@gnome.org>
18845
18846         * expression.cs (BaseAccess.DoResolve): Actually report errors.
18847
18848         * assign.cs (Assign.DoResolve): Check whether the source
18849         expression is a value or variable.
18850
18851         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
18852         while resolving the corresponding blocks.
18853
18854         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
18855         an error, don't silently return null.
18856
18857         * statement.cs (Block.AddVariable): Do the error reporting here
18858         and distinguish between CS0128 and CS0136.
18859         (Block.DoResolve): Report all unused labels (warning CS0164).
18860         (LabeledStatement): Pass the location to the constructor.
18861         (LabeledStatement.HasBeenReferenced): New property.
18862         (LabeledStatement.Resolve): Set it to true here.
18863
18864         * statement.cs (Return.Emit): Return success even after reporting
18865         a type mismatch error (CS0126 or CS0127), this is what csc does and
18866         it avoids confusing the users with any consecutive errors.
18867
18868 2002-08-05  Martin Baulig  <martin@gnome.org>
18869
18870         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
18871
18872         * const.cs (Const.LookupConstantValue): Catch circular definitions.
18873
18874         * expression.cs (MemberAccess.DoResolve): Silently return if an
18875         error has already been reported.
18876
18877         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
18878         error has already been reported.
18879
18880 2002-08-05  Martin Baulig  <martin@gnome.org>
18881
18882         * statement.cs (UsageVector): Only initialize the `parameters'
18883         vector if we actually have any "out" parameters.
18884
18885 2002-08-05  Martin Baulig  <martin@gnome.org>
18886
18887         * expression.cs (Binary.ResolveOperator): When combining delegates,
18888         they must have the same type.
18889
18890 2002-08-05  Martin Baulig  <martin@gnome.org>
18891
18892         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
18893         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
18894         work with the ms runtime and we also don't need it: if we're a
18895         PropertyBuilder and not in the `indexer_arguments' hash, then we
18896         are a property and not an indexer.
18897
18898         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
18899         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
18900         since the latter one doesn't work with the ms runtime.
18901
18902 2002-08-03  Martin Baulig  <martin@gnome.org>
18903
18904         Fixed bugs #27998 and #22735.
18905
18906         * class.cs (Method.IsOperator): New public field.
18907         (Method.CheckBase): Report CS0111 if there's already a method
18908         with the same parameters in the current class.  Report CS0508 when
18909         attempting to change the return type of an inherited method.
18910         (MethodData.Emit): Report CS0179 if a method doesn't have a body
18911         and it's not marked abstract or extern.
18912         (PropertyBase): New abstract base class for Property and Indexer.
18913         (PropertyBase.CheckBase): Moved here from Property and made it work
18914         for indexers.
18915         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
18916         the same so we can reuse it there.
18917         (Property, Indexer): Derive from PropertyBase.
18918         (MethodSignature.inheritable_property_signature_filter): New delegate
18919         to find properties and indexers.
18920
18921         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
18922         argument and improved error reporting.
18923
18924         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
18925         EmptyReadOnlyParameters and made it a property.
18926
18927         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
18928         version of this method which takes a `PropertyInfo indexer'.
18929         (TypeManager.RegisterIndexer): New method.
18930
18931         * class.cs: Added myself as author of this file :-)
18932
18933 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18934
18935         * class.cs: fixed compilation on windoze.
18936
18937 2002-08-03  Martin Baulig  <martin@gnome.org>
18938
18939         * interface.cs (Interface.GetInterfaceBases): Check whether all
18940         base interfaces are at least as accessible than the current one.
18941
18942         * class.cs (TypeContainer.GetClassBases): Check whether base types
18943         are at least as accessible than the current type.
18944         (TypeContainer.AsAccessible): Implemented and made non-static.
18945         (MemberBase.CheckParameters): Report errors if the accessibility
18946         checks fail.
18947
18948         * delegate.cs (Delegate.Delegate): The default visibility is
18949         internal for top-level types and private for nested types.
18950         (Delegate.Define): Report errors if the accessibility checks fail.
18951
18952         * enum.cs (Enum.Enum): The default visibility is internal for
18953         top-level types and private for nested types.
18954         (Enum.DefineType): Compute the correct visibility.
18955
18956         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
18957         function which takes a `bool is_toplevel' instead of a TypeContainer.
18958
18959         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
18960         builtin type.
18961
18962 2002-08-02  Martin Baulig  <martin@gnome.org>
18963
18964         * expression.cs (LocalVariableReferenc): Added constructor which
18965         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
18966         (LocalVariableReference.IsReadOnly): New property.
18967         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
18968         variable is readonly, use our own readonly flag to do this; you can
18969         use the new constructor to get a writable reference to a read-only
18970         variable.
18971
18972         * cs-parser.jay (foreach_statement, using_statement): Get a writable
18973         reference to the local variable.
18974
18975 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
18976
18977         * rootcontext.cs (ResolveCore): Also include System.Exception
18978
18979         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
18980         we reach an EmptyStatement.
18981
18982         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
18983         is also fine.
18984
18985         * expression.cs (Binary.ResolveOperator): Check error result in
18986         two places.
18987
18988         use brtrue/brfalse directly and avoid compares to null.
18989
18990 2002-08-02  Martin Baulig  <martin@gnome.org>
18991
18992         * class.cs (TypeContainer.Define): Define all nested interfaces here.
18993         Fixes bug #28407, added test-155.cs.
18994
18995 2002-08-01  Martin Baulig  <martin@gnome.org>
18996
18997         * class.cs (Event.EmitDefaultMethod): Make this work with static
18998         events.  Fixes #28311, added verify-3.cs.
18999
19000 2002-08-01  Martin Baulig  <martin@gnome.org>
19001
19002         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
19003         `is_disposable' fields.
19004         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
19005         `hm.is_disposable' if we're using the collection pattern.
19006         (Foreach.EmitCollectionForeach): Use the correct type for the
19007         enumerator's local variable, only emit the try/finally block if
19008         necessary (fixes #27713).
19009
19010 2002-08-01  Martin Baulig  <martin@gnome.org>
19011
19012         * ecore.cs (Expression.report118): Renamed to Error118 and made
19013         it public static.
19014
19015         * statement.cs (Throw.Resolve): Check whether the expression is of
19016         the correct type (CS0118) and whether the type derives from
19017         System.Exception (CS0155).
19018         (Catch.Resolve): New method.  Do the type lookup here and check
19019         whether it derives from System.Exception (CS0155).
19020         (Catch.CatchType, Catch.IsGeneral): New public properties.
19021
19022         * typemanager.cs (TypeManager.exception_type): Added.
19023
19024 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
19025
19026         * driver.cs: Updated About function.
19027
19028 2002-07-31  Martin Baulig  <martin@gnome.org>
19029
19030         Implemented Control Flow Analysis.
19031
19032         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
19033         (EmitContext.CurrentBranching): Added.
19034         (EmitContext.StartFlowBranching): Added.
19035         (EmitContext.EndFlowBranching): Added.
19036         (EmitContext.KillFlowBranching): Added.
19037         (EmitContext.IsVariableAssigned): Added.
19038         (EmitContext.SetVariableAssigned): Added.
19039         (EmitContext.IsParameterAssigned): Added.
19040         (EmitContext.SetParameterAssigned): Added.
19041         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
19042         Added control flow analysis stuff here.
19043
19044         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
19045         resolve the expression as lvalue.
19046         (LocalVariableReference.DoResolve): Check whether the variable has
19047         already been assigned.
19048         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
19049         the parameter as assigned here.
19050         (ParameterReference.DoResolve): Check whether the parameter has already
19051         been assigned.
19052         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
19053         expression as lvalue.
19054
19055         * statement.cs (FlowBranching): New class for the flow analysis code.
19056         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
19057         (LabeledStatement.IsDefined): New public property.
19058         (LabeledStatement.AddUsageVector): New public method to tell flow
19059         analyis that the label may be reached via a forward jump.
19060         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
19061         flow analysis.
19062         (VariableInfo.Number): New public field.  This is used by flow analysis
19063         to number all locals of a block.
19064         (Block.CountVariables): New public property.  This is the number of
19065         local variables in this block (including the locals from all parent
19066         blocks).
19067         (Block.EmitMeta): Number all the variables.
19068
19069         * statement.cs: Added flow analysis support to all classes.
19070
19071 2002-07-31  Martin Baulig  <martin@gnome.org>
19072
19073         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
19074         To get debugging messages, compile mcs with /define:MCS_DEBUG and
19075         then use this argument.
19076
19077         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
19078
19079         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
19080         use this to specify /define options.
19081
19082 2002-07-29  Martin Baulig  <martin@gnome.org>
19083
19084         * statement.cs (Fixed): Moved all code that does variable lookups
19085         and resolvings from Emit to Resolve.
19086
19087         * statement.cs (For): Moved all code that does variable lookups
19088         and resolvings from Emit to Resolve.
19089
19090         * statement.cs (Using): Moved all code that does variable lookups
19091         and resolvings from Emit to Resolve.
19092
19093 2002-07-29  Martin Baulig  <martin@gnome.org>
19094
19095         * attribute.cs (Attribute.Resolve): Explicitly catch a
19096         System.NullReferenceException when creating the
19097         CustromAttributeBuilder and report a different warning message.
19098
19099 2002-07-29  Martin Baulig  <martin@gnome.org>
19100
19101         * support.cs (ParameterData.ParameterName): Added method to
19102         get the name of a parameter.
19103
19104         * typemanager.cs (TypeManager.IsValueType): New public method.
19105
19106 2002-07-29  Martin Baulig  <martin@gnome.org>
19107
19108         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
19109         is a flag which specifies that it's either ref or out.
19110         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
19111         the out parameter to `out Parameter.Modifier mod', also set the
19112         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
19113
19114         * support.cs (InternalParameters.ParameterModifier): Distinguish
19115         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
19116         Parameter.Modifier.ISBYREF flag if it's either ref or out.
19117
19118         * expression.cs (Argument.GetParameterModifier): Distinguish
19119         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
19120         Parameter.Modifier.ISBYREF flag if it's either ref or out.
19121
19122 2002-07-29  Martin Baulig  <martin@gnome.org>
19123
19124         * expression.cs (ParameterReference.ParameterReference): Added
19125         `Location loc' argument to the constructor.
19126
19127         * cs-parser.jay: Pass location to ParameterReference.
19128
19129 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
19130
19131         * statement.cs (Try): Initialize the location.
19132
19133         * cs-parser.jay: pass location to Try.
19134
19135         * expression.cs (Unary.Reduce): Change the prototype to return
19136         whether a constant fold could be performed or not.  The result is
19137         returned in an out parameters.  In the case of Indirection and
19138         AddressOf, we want to perform the full tests.
19139
19140 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
19141
19142         * statement.cs (Statement.Emit): Flag dead code.
19143
19144 2002-07-27  Andrew Birkett  <andy@nobugs.org>
19145
19146         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
19147
19148 2002-07-27  Martin Baulig  <martin@gnome.org>
19149
19150         * class.cs (MethodData.Define): Put back call to
19151         TypeManager.AddMethod(), accidentally commented this out.
19152
19153         * report.cs (Debug): New public method to print debugging information,
19154         this is `[Conditional ("DEBUG")]'.
19155
19156 2002-07-26  Martin Baulig  <martin@gnome.org>
19157
19158         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
19159         (switch_statement): Push the current_block to the switch_stack and
19160         pop it again when we're done with the switch.
19161         (switch_section): The new block is a child of the current_block.
19162         Fixes bug #24007, added test-152.cs.
19163
19164 2002-07-27  Martin Baulig  <martin@gnome.org>
19165
19166         * expression.cs (Invocation.EmitArguments): When calling a varargs
19167         function with only its fixed arguments, we need to pass an empty
19168         array.
19169
19170 2002-07-27  Martin Baulig  <martin@gnome.org>
19171
19172         Mono 0.13 has been released.
19173
19174 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
19175
19176         * driver.cs: Rename --resource to --linkres, because that is what
19177         we do currently, we dont support --resource yet.
19178
19179         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
19180
19181 2002-07-25  Martin Baulig  <martin@gnome.org>
19182
19183         * class.cs (MethodData): New public class.  This is a `method builder'
19184         class for a method or one accessor of a Property/Indexer/Event.
19185         (MethodData.GetMethodFlags): Moved here from MemberBase.
19186         (MethodData.ApplyAttributes): Likewise.
19187         (MethodData.ApplyObsoleteAttribute): Likewise.
19188         (MethodData.ApplyConditionalAttribute): Likewise.
19189         (MethodData.ApplyDllImportAttribute): Likewise.
19190         (MethodData.CheckAbstractAndExternal): Likewise.
19191         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
19192         (MethodData.Emit): Formerly known as Method.Emit().
19193         (MemberBase): Moved everything which was specific to a single
19194         accessor/method to MethodData.
19195         (Method): Create a new MethodData and call Define() and Emit() on it.
19196         (Property, Indexer, Event): Create a new MethodData objects for each
19197         accessor and call Define() and Emit() on them.
19198
19199 2002-07-25  Martin Baulig  <martin@gnome.org>
19200
19201         Made MethodCore derive from MemberBase to reuse the code from there.
19202         MemberBase now also checks for attributes.
19203
19204         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
19205         (MemberBase.GetMethodFlags): Moved here from class Method and marked
19206         as virtual.
19207         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
19208         `CallingConventions cc' and `Attributes opt_attrs' arguments.
19209         (MemberBase.ApplyAttributes): New virtual method; applies the
19210         attributes to a method or accessor.
19211         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
19212         (MemberBase.ApplyConditionalAttribute): Likewise.
19213         (MemberBase.ApplyDllImportAttribute): Likewise.
19214         (MemberBase.CheckAbstractAndExternal): Likewise.
19215         (MethodCore.ParameterTypes): This is now a property instead of a
19216         method, it's initialized from DoDefineParameters().
19217         (MethodCore.ParameterInfo): Removed the set accessor.
19218         (MethodCore.DoDefineParameters): New protected virtual method to
19219         initialize ParameterTypes and ParameterInfo.
19220         (Method.GetReturnType): We can now simply return the MemberType.
19221         (Method.GetMethodFlags): Override the MemberBase version and add
19222         the conditional flags.
19223         (Method.CheckBase): Moved some code from Define() here, call
19224         DoDefineParameters() here.
19225         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
19226         here to avoid some larger code duplication.
19227         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
19228         ensure that abstract and external accessors don't declare a body.
19229
19230         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
19231         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
19232         lookup in the attribute's parent classes, so we need to abort as soon
19233         as we found the first match.
19234         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
19235         the attribute has no arguments.
19236
19237         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
19238         of a Method.
19239
19240 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19241
19242         * cs-parser.jay: reverted previous patch.
19243
19244 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19245
19246         * cs-parser.jay: fixed bug #22119.
19247
19248 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19249
19250         * attribute.cs: fixed compilation. The error was:
19251         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
19252         be assigned to before control leaves the current method."
19253         [FIXME:  Filed as bug #28186: MCS must report this error.]
19254
19255 2002-07-25  Martin Baulig  <martin@gnome.org>
19256
19257         * attribute.cs (Attribute.Conditional_GetConditionName): New static
19258         method to pull the condition name ouf of a Conditional attribute.
19259         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
19260         the obsolete message and error flag out of an Obsolete attribute.
19261
19262         * class.cs (Method.GetMethodFlags): New public method to get the
19263         TypeManager.MethodFlags for this method.
19264         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
19265         private methods.
19266         (Method.Define): Get and apply the Obsolete and Conditional attributes;
19267         if we're overriding a virtual function, set the new private variable
19268         `parent_method'; call the new TypeManager.AddMethod().
19269
19270         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
19271         the MethodBuilder and the Method in a PtrHashtable.
19272         (TypeManager.builder_to_method): Added for this purpose.
19273         (TypeManager.MethodFlags): Added IsObsoleteError.
19274         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
19275         Obsolete and Conditional arguments in MethodBuilders.  If we discover
19276         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
19277         the message from the attribute.
19278
19279 2002-07-24  Martin Baulig  <martin@gnome.org>
19280
19281         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
19282         preprocessor directives, ensure that the argument to #define/#undef is
19283         exactly one identifier and that it's actually an identifier.
19284
19285         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
19286         did not work ....
19287
19288 2002-07-24  Martin Baulig  <martin@gnome.org>
19289
19290         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
19291         initialize it to TypeManager.object_type in the constructor.
19292         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
19293         of the `hm.get_current' method if we're using the collection pattern.
19294         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
19295         for the explicit conversion to make it work when we're using the collection
19296         pattern and the `Current' property has a different return type than `object'.
19297         Fixes #27713.
19298
19299 2002-07-24  Martin Baulig  <martin@gnome.org>
19300
19301         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
19302         does not match, but don't report any errors.  This method is called in
19303         order for all methods in a MethodGroupExpr until a matching method is
19304         found, so we don't want to bail out if the first method doesn't match.
19305         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
19306         matches, report the 123.  Fixes #28070.
19307
19308 2002-07-24  Martin Baulig  <martin@gnome.org>
19309
19310         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
19311         TypeManager.TypeToCoreType() to the top of the method so the
19312         following equality checks will work.  Fixes #28107.
19313
19314 2002-07-24  Martin Baulig  <martin@gnome.org>
19315
19316         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
19317         operand is of type uint, and the other operand is of type sbyte,
19318         short or int, the operands are converted to type long." -
19319         Actually do what this comment already told us.  Fixes bug #28106,
19320         added test-150.cs.
19321
19322 2002-07-24  Martin Baulig  <martin@gnome.org>
19323
19324         * class.cs (MethodBase): New abstract class.  This is now a base
19325         class for Property, Indexer and Event to avoid some code duplication
19326         in their Define() and DefineMethods() methods.
19327         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
19328         generic methods for Define() and DefineMethods().
19329         (FieldBase): Derive from MemberBase, not MemberCore.
19330         (Property): Derive from MemberBase, not MemberCore.
19331         (Property.DefineMethod): Moved all the code from this method to the
19332         new MethodBase.DefineAccessor(), just call it with appropriate
19333         argumetnts.
19334         (Property.Define): Call the new Property.DoDefine(), this does some
19335         sanity checks and we don't need to duplicate the code everywhere.
19336         (Event): Derive from MemberBase, not MemberCore.
19337         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
19338         accessors, this will also make them work with interface events.
19339         (Indexer): Derive from MemberBase, not MemberCore.
19340         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
19341         (Indexer.Define): Use the new MethodBase functions.
19342
19343         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
19344         argument to the constructor.
19345         (Interface.FindMembers): Added support for interface events.
19346         (Interface.PopluateEvent): Implemented.
19347
19348         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
19349
19350 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
19351
19352         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
19353         but this is required to check for a method name being the same as
19354         the containing class.  
19355
19356         Handle this now.
19357
19358 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19359
19360         * interface.cs: initialize variable.
19361
19362 2002-07-23  Martin Baulig  <martin@gnome.org>
19363
19364         Implemented the IndexerName attribute in interfaces.
19365
19366         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
19367         name if this is an explicit interface implementation.
19368         (Indexer.InterfaceIndexerName): New public variable.  If we're
19369         implementing an interface indexer, this is the IndexerName in that
19370         interface.  Otherwise, it's the IndexerName.
19371         (Indexer.DefineMethod): If we're implementing interface indexer,
19372         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
19373         and Pending.ImplementIndexer methods.
19374         (Indexer.Define): Also define the PropertyBuilder if we're
19375         implementing an interface indexer and this is neither an explicit
19376         interface implementation nor do the IndexerName match the one in
19377         the interface.
19378
19379         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
19380         If a method is defined here, then we always need to create a proxy
19381         for it.  This is used when implementing interface indexers.
19382         (Pending.IsInterfaceIndexer): New public method.
19383         (Pending.ImplementIndexer): New public method.
19384         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
19385         This is used when implementing interface indexers to define a proxy
19386         if necessary.
19387         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
19388         define a proxy if necessary.
19389
19390         * interface.cs (Interface.IndexerName): New public variable.
19391         (Interface.PopulateIndexer): Set the IndexerName.
19392         (Interface.DefineIndexers): New private method.  Populate all the
19393         indexers and make sure their IndexerNames match.
19394
19395         * typemanager.cs (IndexerPropertyName): Added support for interface
19396         indexers.
19397
19398 2002-07-22  Martin Baulig  <martin@gnome.org>
19399
19400         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
19401         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
19402         ret if HasReturnLabel.
19403         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
19404         variables.
19405
19406         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
19407         and set the ec.LoopBeginTryCatchLevel.
19408         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
19409         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
19410         the current ec.TryCatchLevel, the branch goes out of an exception
19411         block.  In this case, we need to use Leave and not Br.
19412
19413 2002-07-22  Martin Baulig  <martin@gnome.org>
19414
19415         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
19416         block unless the block does not always return or it is contained in
19417         another try { ... } catch { ... } block.  Fixes bug #26506.
19418         Added verify-1.cs to the test suite.
19419
19420 2002-07-22  Martin Baulig  <martin@gnome.org>
19421
19422         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
19423         then we do not always return.  Fixes bug #24985.
19424
19425 2002-07-22  Martin Baulig  <martin@gnome.org>
19426
19427         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
19428         lookup on a per-class level; ie. walk up the class hierarchy until we
19429         found at least one applicable method, then choose the best among them.
19430         Fixes bug #24463 and test-29.cs.
19431
19432 2002-07-22  Martin Baulig  <martin@gnome.org>
19433
19434         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
19435         return types of the methods.  The return type is not part of the
19436         signature and we must not check it to make the `new' modifier work.
19437         Fixes bug #27999, also added test-147.cs.
19438         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
19439
19440         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
19441         on the method's return type.
19442
19443 2002-07-21  Martin Baulig  <martin@gnome.org>
19444
19445         * assign.cs: Make this work if the rightmost source is a constant and
19446         we need to do an implicit type conversion.  Also adding a few more tests
19447         to test-38.cs which should have caught this.
19448
19449         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
19450         target in the makefile for this.  The makefile.gnu is primarily intended
19451         for end-users who don't want to debug the compiler.
19452
19453 2002-07-21  Martin Baulig  <martin@gnome.org>
19454
19455         * assign.cs: Improved the Assign class so it can now handle embedded
19456         assignments (X = Y = Z = something).  As a side-effect this'll now also
19457         consume less local variables.  test-38.cs now passes with MCS, added
19458         a few new test cases to that test.
19459
19460 2002-07-20  Martin Baulig  <martin@gnome.org>
19461
19462         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
19463         instructions.  Fixes bug #27977, also added test-146.cs.
19464
19465 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19466
19467         * cs-tokenizer.cs: fixed getHex ().
19468
19469 2002-07-19  Martin Baulig  <martin@gnome.org>
19470
19471         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
19472         not Type.GetType() to lookup the array type.  This is needed when
19473         we're constructing an array of a user-defined type.
19474         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
19475         single-dimensional arrays, but also for single-dimensial arrays of
19476         type decimal.
19477
19478 2002-07-19  Martin Baulig  <martin@gnome.org>
19479
19480         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
19481         this function is called, it's not allowed to share LocalBuilders
19482         among ILGenerators.
19483
19484 2002-07-19  Martin Baulig  <martin@gnome.org>
19485
19486         * expression.cs (Argument.Resolve): Report an error 118 when trying
19487         to pass a type as argument.
19488
19489 2002-07-18  Martin Baulig  <martin@gnome.org>
19490
19491         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
19492         Conv_R_Un for the signed `long' type.
19493
19494 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
19495
19496         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
19497         `expr' for the temporary result, as that will fail if we do
19498         multiple resolves on the same expression.
19499
19500 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
19501
19502         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
19503         ec.TypeContainer for looking up aliases. 
19504
19505         * class.cs (TypeContainer): Remove LookupAlias from here.
19506
19507         * decl.cs (DeclSpace); Move here.
19508
19509 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
19510
19511         * class.cs (FindMembers): Only call filter if the constructor
19512         bulider is not null.
19513
19514         Also handle delegates in `NestedTypes' now.  Now we will perform
19515         type lookups using the standard resolution process.  This also
19516         fixes a bug.
19517
19518         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
19519         This uses Expressions (the limited kind that can be parsed by the
19520         tree) instead of strings.
19521
19522         * expression.cs (ComposedCast.ToString): Implement, used to flag
19523         errors since now we have to render expressions.
19524
19525         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
19526         FormArrayType. 
19527
19528         * ecore.cs (SimpleName.ToString): ditto.
19529
19530         * cs-parser.jay: Instead of using strings to assemble types, use
19531         Expressions to assemble the type (using SimpleName, ComposedCast,
19532         MemberAccess).  This should fix the type lookups in declarations,
19533         because we were using a different code path for this.
19534
19535         * statement.cs (Block.Resolve): Continue processing statements
19536         even when there is an error.
19537
19538 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
19539
19540         * class.cs (Event.Define): Also remove the `remove' method from
19541         the list of pending items.
19542
19543         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
19544         generate more compact code. 
19545
19546 2002-07-17  Martin Baulig  <martin@gnome.org>
19547
19548         * const.cs (Const.LookupConstantValue): Add support for constant
19549         `unchecked' and `checked' expressions.
19550         Also adding test case test-140.cs for this.
19551
19552 2002-07-17  Martin Baulig  <martin@gnome.org>
19553
19554         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
19555         check whether mi.ReturnType implements the IEnumerator interface; the
19556         `==' and the IsAssignableFrom() will fail in this situation.
19557
19558 2002-07-16  Ravi Pratap  <ravi@ximian.com>
19559
19560         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
19561         here too.
19562
19563 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19564
19565         * expression.cs: fixed bug #27811.
19566
19567 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
19568
19569         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
19570         Molaro: when we are a ref, the value already contains a pointer
19571         value, do not take the address of it.
19572
19573 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
19574         * removed mb-parser.jay and mb-tokenizer.cs
19575
19576 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19577
19578         * expression.cs: check against the building corlib void type.
19579
19580 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
19581
19582         * ecore.cs: fix for valuetype static readonly fields: when 
19583         initializing them, we need their address, not the address of a copy.
19584
19585 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
19586
19587         * typemanager.cs: register also enum_type in corlib.
19588
19589 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19590
19591         * class.cs: allow calling this (but not base) initializers in structs.
19592
19593 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
19594
19595         * ecore.cs: make sure we compare against the building base types
19596         in GetTypeSize ().
19597
19598 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
19599
19600         * typemanager.cs: fix TypeToCoreType() to handle void and object
19601         (corlib gets no more typerefs after this change).
19602
19603 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
19604
19605         * expression.cs (ArrayCreation.EmitArrayArguments): use
19606         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
19607
19608         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
19609         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
19610         array indexes, the runtime actually forbids them.
19611
19612         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
19613         for array arguments here.
19614
19615         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
19616         instead of the default for ValueTypes.
19617
19618         (New.DoEmit): Use IsValueType instead of
19619         IsSubclassOf (value_type)
19620         (New.DoResolve): ditto.
19621         (Invocation.EmitCall): ditto.
19622
19623         * assign.cs (Assign): ditto.
19624
19625         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
19626         Statements *are* currently doing part of their resolution during
19627         Emit.  
19628
19629         Expressions do always resolve during resolve, but statements are
19630         only required to propagate resolution to their children.
19631
19632 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
19633
19634         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
19635
19636         (LoadAssembly): Do not add the dll if it is already specified
19637
19638         (MainDriver): Add the System directory to the link path at the end,
19639         after all the other -L arguments. 
19640
19641         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
19642         wrong opcode for loading bytes and bools (ldelem.i1 instead of
19643         ldelem.u1) and using the opposite for sbytes.
19644
19645         This fixes Digger, and we can finally run it.
19646
19647         * driver.cs (UnixParseOption): Move the option parsing here.  
19648         (CSCParseOption): Implement CSC-like parsing of options.
19649
19650         We now support both modes of operation, the old Unix way, and the
19651         new CSC-like way.  This should help those who wanted to make cross
19652         platform makefiles.
19653
19654         The only thing broken is that /r:, /reference: and /lib: are not
19655         implemented, because I want to make those have the same semantics
19656         as the CSC compiler has, and kill once and for all the confussion
19657         around this.   Will be doing this tomorrow.
19658
19659         * statement.cs (Unsafe.Resolve): The state is checked during
19660         resolve, not emit, so we have to set the flags for IsUnsfe here.
19661
19662 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19663
19664         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
19665         not catch the Error_ObjectRefRequired in SimpleName (as it is
19666         possible to have a class/instance variable name that later gets
19667         deambiguated), we have to check this here.      
19668
19669 2002-07-10  Ravi Pratap  <ravi@ximian.com>
19670
19671         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
19672         make static and put into Expression.
19673
19674         (Event.Define): Register the private field of the event with the 
19675         TypeManager so that GetFieldFromEvent can get at it.
19676
19677         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
19678         keep track of the private field associated with an event which
19679         has no accessors.
19680
19681         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
19682         private field.
19683
19684         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
19685
19686 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19687
19688         * expression.cs (Binary.EmitBranchable): this routine emits the
19689         Binary expression in a branchable context.  This basically means:
19690         we need to branch somewhere, not just get the value on the stack.
19691
19692         This works together with Statement.EmitBoolExpression.
19693
19694         * statement.cs (Statement.EmitBoolExpression): Use
19695         EmitBranchable. 
19696
19697 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
19698
19699         * statement.cs (For): Reduce the number of jumps in loops.
19700
19701         (For): Implement loop inversion for the For statement.
19702
19703         (Break): We can be breaking out of a Try/Catch controlled section
19704         (foreach might have an implicit try/catch clause), so we need to
19705         use Leave instead of Br.
19706
19707         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
19708         now).  If the instace expression supports IMemoryLocation, we use
19709         the AddressOf method from the IMemoryLocation to extract the
19710         address instead of emitting the instance.
19711
19712         This showed up with `This', as we were emitting the instance
19713         always (Emit) instead of the Address of This.  Particularly
19714         interesting when This is a value type, as we dont want the Emit
19715         effect (which was to load the object).
19716
19717 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
19718
19719         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
19720
19721         * statement.cs (Checked): Set the CheckedState during the resolve
19722         process too, as the ConvCast operations track the checked state on
19723         the resolve process, and not emit.
19724
19725         * cs-parser.jay (namespace_member_declaration): Flag that we have
19726         found a declaration when we do.  This is used to flag error 1529
19727
19728         * driver.cs: Report ok when we display the help only.
19729
19730 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
19731
19732         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
19733
19734 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
19735
19736         * cs-tokenizer.cs (define): We also have to track locally the
19737         defines.  AllDefines is just used for the Conditional Attribute,
19738         but we also need the local defines for the current source code. 
19739
19740 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
19741
19742         * statement.cs (While, For, Do): These loops can exit through a
19743         Break statement, use this information to tell whether the
19744         statement is the last piece of code.
19745
19746         (Break): Flag that we break.
19747
19748         * codegen.cs (EmitContexts): New `Breaks' state variable.
19749
19750 2002-07-03  Martin Baulig  <martin@gnome.org>
19751
19752         * class.cs (TypeContainer.MethodModifiersValid): Allow override
19753         modifiers in method declarations in structs.  Otherwise, you won't
19754         be able to override things like Object.Equals().
19755
19756 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19757
19758         * class.cs (Method, Property, Indexer): Do not allow the public
19759         modifier to be used in explicit interface implementations.
19760
19761         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
19762         override modifiers in method declarations in structs
19763
19764 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
19765
19766         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
19767         integer or real overflow, report an error
19768
19769 2002-07-02  Martin Baulig  <martin@gnome.org>
19770
19771         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
19772         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
19773         to tell the runtime about our newly created System.Object and
19774         System.ValueType types.
19775
19776 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19777
19778         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
19779         struct instead of Ldarg/Starg.
19780
19781 2002-07-02  Martin Baulig  <martin@gnome.org>
19782
19783         * expression.cs (Indirection.Indirection): Call
19784         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
19785
19786 2002-07-02  Martin Baulig  <martin@gnome.org>
19787
19788         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
19789         ValueType, call TypeManager.TypeToCoreType() on it.
19790         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
19791         the OpCodes.Newarr argument.
19792
19793 2002-07-02  Martin Baulig  <martin@gnome.org>
19794
19795         * expression.cs (Invocation.EmitCall): When compiling corlib,
19796         replace all calls to the system's System.Array type to calls to
19797         the newly created one.
19798
19799         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
19800         System.Array methods.
19801         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
19802         from the system's System.Array type which must be replaced.
19803
19804 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
19805
19806         * typemanager.cs: load unverifiable_code_ctor so we can build
19807         corlib using the correct type. Avoid using GetTypeCode() with
19808         TypeBuilders.
19809         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
19810         TypeManager.object_type to allow building corlib.
19811
19812 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
19813
19814         * ecore.cs: handle System.Enum separately in LoadFromPtr().
19815
19816 2002-07-01  Martin Baulig  <martin@gnome.org>
19817
19818         * class.cs: Make the last change actually work, we need to check
19819         whether `ifaces != null' to avoid a crash.
19820
19821 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19822
19823         * class.cs: when we build structs without fields that implement
19824         interfaces, we need to add the interfaces separately, since there is
19825         no API to both set the size and add the interfaces at type creation
19826         time.
19827
19828 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19829
19830         * expression.cs: the dimension arguments to the array constructors
19831         need to be converted if they are a long.
19832
19833 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
19834
19835         * class.cs: don't emit ldarg.0 if there is no parent constructor
19836         (fixes showstopper for corlib).
19837
19838 2002-06-29  Martin Baulig  <martin@gnome.org>
19839
19840         MCS now compiles corlib on GNU/Linux :-)
19841
19842         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
19843         ie. check for MethodImplOptions.InternalCall.
19844
19845         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
19846         and TypeManager.attribute_type are null, so we must explicitly check
19847         whether parent is not null to find out whether it's an attribute type.
19848         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
19849         and SetBuilder, not only if the property is neither abstract nor external.
19850         This is necessary to set the MethodImplOptions on the accessor methods.
19851         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
19852         SetBuilder, see Property.Emit().
19853
19854         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
19855         populate "System.Object", "System.ValueType" and "System.Attribute" since
19856         they've already been populated from BootCorlib_PopulateCoreTypes().
19857
19858 2002-06-29  Martin Baulig  <martin@gnome.org>
19859
19860         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
19861         is the NullLiteral, we also need to make sure that target_type is not
19862         an enum type.   
19863
19864 2002-06-29  Martin Baulig  <martin@gnome.org>
19865
19866         * rootcontext.cs (RootContext.ResolveCore): We must initialize
19867         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
19868         before calling BootstrapCorlib_ResolveDelegate ().
19869
19870 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19871
19872         * statement.cs: fixed build-breaker. All tests passed ok.
19873
19874 2002-06-27  Martin Baulig  <martin@gnome.org>
19875
19876         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
19877         for System.Decimal when compiling corlib.
19878
19879 2002-06-27  Martin Baulig  <martin@gnome.org>
19880
19881         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
19882         switch blocks which contain nothing but a default clause.
19883
19884 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
19885
19886        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
19887
19888 2002-06-27  Martin Baulig  <martin@gnome.org>
19889
19890         * ecore.cs (PropertyExpr.PropertyExpr): Call
19891         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
19892
19893         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
19894         is already a TypeBuilder.
19895
19896 2002-06-27  Martin Baulig  <martin@gnome.org>
19897
19898         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
19899         `target_type == TypeManager.array_type', not IsAssignableFrom() in
19900         the "from an array-type to System.Array" case.  This makes it work
19901         when compiling corlib.
19902
19903 2002-06-27  Martin Baulig  <martin@gnome.org>
19904
19905         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
19906         non-static PropertyExpr, set its InstanceExpression.  This makes
19907         the `ICollection.Count' property work in System/Array.cs.
19908
19909 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
19910
19911         * driver.cs: Made error handling more consistent.  Errors now
19912         tracked by Report class, so many methods which used to return int
19913         now return void.  Main() now prints success/failure and 
19914         errors/warnings message.
19915
19916         Renamed '--probe' compiler argument to '--expect-error'.  Removed
19917         the magic number return values (123 and 124).  Now, if the
19918         expected error occurs, the compiler exits with success (exit value
19919         0).  If the compilation completes without seeing that particular
19920         error, the compiler exits with failure (exit value 1).  The
19921         makefile in mcs/errors has been changed to handle the new behaviour.
19922
19923         * report.cs: Made 'expected error' number a property and renamed
19924         it from 'Probe' to 'ExpectedError'.
19925
19926         * genericparser.cs: Removed error handling support, since it is
19927         now all done by Report class.
19928
19929         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
19930         class, so parse() no longer returns an int.
19931
19932         * namespace.cs: Use Report.Error instead of GenericParser.error
19933
19934 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
19935
19936         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
19937         TypeContainer.AddOperator): At the front of the list put the
19938         explicit implementations, so they get resolved/defined first. 
19939
19940 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
19941
19942         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
19943         interface type is implemented by this TypeContainer.  Used during
19944         explicit interface implementation.
19945
19946         (Property.Define, Indexer.Define, Method.Define): Validate that
19947         the given interface in the explicit implementation is one of the
19948         base classes for the containing type.
19949
19950         Also if we are explicitly implementing an interface, but there is
19951         no match in the pending implementation table, report an error.
19952
19953         (Property.Define): Only define the property if we are
19954         not explicitly implementing a property from an interface.  Use the
19955         correct name also for those properties (the same CSC uses,
19956         although that is really not needed).
19957
19958         (Property.Emit): Do not emit attributes for explicitly implemented
19959         properties, as there is no TypeBuilder.
19960
19961         (Indexer.Emit): ditto.
19962
19963         Hiding then means that we do not really *implement* a pending
19964         implementation, which makes code fail.
19965
19966 2002-06-22  Martin Baulig  <martin@gnome.org>
19967
19968         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
19969         the return value of Object.GetType().  [FIXME: we need to do this whenever
19970         we get a type back from the reflection library].
19971
19972 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
19973
19974         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
19975
19976 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
19977
19978         * attribute.cs: Return null if we can not look up the type.
19979
19980         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
19981         the interface types found.
19982
19983         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
19984         interface types found.
19985
19986         * typemanager.cs (GetInterfaces): Make this routine returns alll
19987         the interfaces and work around the lame differences between
19988         System.Type and System.Reflection.Emit.TypeBuilder in the results
19989         result for GetInterfaces.
19990
19991         (ExpandInterfaces): Given an array of interface types, expand and
19992         eliminate repeated ocurrences of an interface.  This expands in
19993         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
19994         be IA, IB, IC.
19995
19996 2002-06-21  Martin Baulig  <martin@gnome.org>
19997
19998         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
19999         on System.Enum.
20000
20001 2002-06-21  Martin Baulig  <martin@gnome.org>
20002
20003         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
20004         and called with one of the core types, return the corresponding typebuilder for
20005         that type.
20006
20007         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
20008         element type.
20009
20010 2002-06-21  Martin Baulig  <martin@gnome.org>
20011
20012         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
20013         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
20014         (Expression.ConvertReferenceExplicit): Likewise.
20015
20016         * expression.cs (ElementAccess.DoResolve): Likewise.
20017         (ElementAccess.DoResolveLValue): Likewise.
20018
20019 2002-06-10  Martin Baulig  <martin@gnome.org>
20020
20021         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
20022         add the "value" parameter to the parameter list.
20023
20024         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
20025         to our caller.
20026
20027 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
20028
20029         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
20030         the argument to an int, uint, long or ulong, per the spec.  Also
20031         catch negative constants in array creation.
20032
20033 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
20034
20035         * class.cs: do not allow the same interface to appear twice in
20036         the definition list.
20037
20038 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
20039
20040         * ecore.cs: don't use ldlen with System.Array.
20041
20042 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
20043
20044         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
20045
20046 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
20047
20048         * modifiers.cs: produce correct field attributes for protected
20049         internal. Easy fix so miguel can work on ther harder stuff:-)
20050
20051 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
20052
20053         * pending.cs: New file.  Move the code from class.cs here.
20054         Support clearning the pending flag for all methods (when not doing
20055         explicit interface implementation).
20056
20057 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
20058
20059         * rootcontext.cs: added a couple more types needed to bootstrap.
20060
20061 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
20062
20063         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
20064         constructor in the type, instead of any constructor in the type
20065         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
20066         a bug in the Mono runtime when applying the params attribute). 
20067
20068 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
20069         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
20070
20071 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
20072
20073         * expression.cs (Unary.ResolveOperator): Use TypeManager
20074         to resolve the type.
20075
20076 2002-06-13  Ravi Pratap  <ravi@ximian.com>
20077
20078         * cs-parser.jay (enum_member_declaration): Pass in the attributes
20079         attached.
20080
20081         * enum.cs (AddEnumMember): Add support to store the attributes associated 
20082         with each member too.
20083
20084         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
20085         field builders too - this takes care of the enum member case.
20086
20087 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
20088
20089         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
20090         address-of operator on both value types and pointers.
20091
20092 2002-06-10  Martin Baulig  <martin@gnome.org>
20093
20094         * interface.cs (Interface.PopulateIndexer): Add the indexer's
20095         PropertyBuilder to the `property_builders' list.
20096
20097         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
20098         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
20099         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
20100         find any indexers which are inherited from an interface.
20101
20102 2002-06-09  Martin Baulig  <martin@gnome.org>
20103
20104         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
20105         the same type as the constant if necessary.  There's also a test-130.cs
20106         for this.
20107
20108         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
20109
20110         * typemanager.cs (TypeManager.ChangeType): Previously known as
20111         Enum.ChangeEnumType().
20112
20113 2002-06-09  Martin Baulig  <martin@gnome.org>
20114
20115         * expression.cs (Cast.TryReduce): Added support for consts.
20116
20117 2002-06-08  Ravi Pratap  <ravi@ximian.com>
20118
20119         * class.cs (Accessor): Hold attributes information so we can pass
20120         it along.
20121
20122         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
20123         Modify to pass in attributes attached to the methods.
20124
20125         (add_accessor_declaration, remove_accessor_declaration): Ditto.
20126
20127         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
20128         to handle the Accessor kind :-)
20129
20130         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
20131
20132 2002-06-08  Martin Baulig  <martin@gnome.org>
20133
20134         * expression.cs (Unary.TryReduceNegative): Added support for
20135         ULongConstants.
20136
20137 2002-06-08  Martin Baulig  <martin@gnome.org>
20138
20139         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
20140         name can't be found in the `defined_names' - the caller will do a
20141         MemberLookup in this case and thus find methods in System.Enum
20142         such as Enum.IsDefined().
20143
20144 2002-06-08  Martin Baulig  <martin@gnome.org>
20145
20146         * enum.cs (Enum.ChangeEnumType): This is a custom version of
20147         Convert.ChangeType() which works with TypeBuilder created types.
20148         (Enum.LookupEnumValue, Enum.Define): Use it here.
20149
20150         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
20151         `TypeBuilder.BaseType != null' check.
20152         (TypeContainer.FindMembers): Only lookup parent members if we
20153         actually have a parent.
20154         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
20155         (ConstructorInitializer.Resolve): Likewise.
20156
20157         * interface.cs (Interface.FindMembers): Added
20158         `TypeBuilder.BaseType != null' check.
20159
20160         * rootcontext.cs (RootContext.ResolveCore): Added
20161         "System.Runtime.CompilerServices.IndexerNameAttribute" to
20162         classes_second_stage.
20163
20164         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
20165         debug_type and trace_type when compiling with --nostdlib.       
20166
20167 2002-06-07  Martin Baulig  <martin@gnome.org>
20168
20169         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
20170         (AddField): Set it to true when adding a non-static field.
20171         (DefineType): Use `have_nonstatic_fields' to find out whether we
20172         have non-static fields, not `Fields != null'.
20173
20174 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
20175
20176         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
20177         dereferencing a null on the static-field code path)
20178
20179 2002-05-30  Martin Baulig  <martin@gnome.org>
20180
20181         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
20182         to take command line arguments.  Use reflection to call the new
20183         custom `Initialize' function on the symbol writer and pass it the
20184         command line arguments.
20185
20186         * driver.cs (--debug-args): New command line argument to pass command
20187         line arguments to the symbol writer.
20188
20189 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
20190
20191         * assign.cs (DoResolve): Forgot to do the implicit conversion to
20192         the target type for indexers and properties.  Thanks to Joe for
20193         catching this.
20194
20195 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
20196
20197         * typemanager.cs (MethodFlags): returns the method flags
20198         (Obsolete/ShouldIgnore) that control warning emission and whether
20199         the invocation should be made, or ignored. 
20200
20201         * expression.cs (Invocation.Emit): Remove previous hack, we should
20202         not do this on matching a base type, we should do this based on an attribute
20203
20204         Only emit calls to System.Diagnostics.Debug and
20205         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
20206         on the command line.
20207
20208         * rootcontext.cs: Global settings for tracing and debugging.
20209
20210         * cs-tokenizer.cs (define): New utility function to track
20211         defines.   Set the global settings for TRACE and DEBUG if found.
20212
20213 2002-05-25  Ravi Pratap  <ravi@ximian.com>
20214
20215         * interface.cs (Populate*): Pass in the TypeContainer as well as
20216         the DeclSpace as parameters so that we can create EmitContexts and
20217         then use that to apply attributes etc.
20218
20219         (PopulateMethod, PopulateEvent, PopulateProperty)
20220         (PopulateIndexer): Apply attributes everywhere.
20221
20222         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
20223         etc.
20224
20225         (ApplyAttributes): Update accordingly.
20226
20227         We now apply interface attributes for all members too.
20228
20229 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
20230
20231         * class.cs (Indexer.Define); Correctly check if we are explicit
20232         implementation (instead of checking the Name for a ".", we
20233         directly look up if the InterfaceType was specified).
20234
20235         Delay the creation of the PropertyBuilder.
20236
20237         Only create the PropertyBuilder if we are not an explicit
20238         interface implementation.   This means that explicit interface
20239         implementation members do not participate in regular function
20240         lookups, and hence fixes another major ambiguity problem in
20241         overload resolution (that was the visible effect).
20242
20243         (DefineMethod): Return whether we are doing an interface
20244         implementation. 
20245
20246         * typemanager.cs: Temporary hack until we get attributes in
20247         interfaces (Ravi is working on that) and we get IndexerName
20248         support in interfaces.
20249
20250         * interface.cs: Register the indexers as properties.
20251
20252         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
20253         warning, I have verified that this is a bug in the .NET runtime
20254         (JavaScript suffers of the same problem).
20255
20256         * typemanager.cs (MemberLookup): When looking up members for
20257         interfaces, the parent of an interface is the implicit
20258         System.Object (so we succeed in searches of Object methods in an
20259         interface method invocation.  Example:  IEnumerable x;  x.ToString
20260         ()) 
20261
20262 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
20263
20264         * class.cs (Event): Events should also register if they do
20265         implement the methods that an interface requires.
20266
20267         * typemanager.cs (MemberLookup); use the new GetInterfaces
20268         method. 
20269
20270         (GetInterfaces): The code used to lookup interfaces for a type is
20271         used in more than one place, factor it here. 
20272
20273         * driver.cs: Track the errors at the bottom of the file, we kept
20274         on going.
20275
20276         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
20277         instance if the method we are calling is static!
20278
20279 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
20280
20281         * attribute.cs (ApplyAttributes): Make this function filter out
20282         the IndexerName attribute (as that attribute in reality is never
20283         applied) and return the string constant for the IndexerName
20284         attribute. 
20285
20286         * class.cs (TypeContainer.Emit): Validate that all the indexers
20287         have the same IndexerName attribute, and if so, set the
20288         DefaultName attribute on the class. 
20289
20290         * typemanager.cs: The return value might contain other stuff (not
20291         only methods).  For instance, consider a method with an "Item"
20292         property and an Item method.
20293
20294         * class.cs: If there is a problem with the parameter types,
20295         return. 
20296
20297 2002-05-24  Ravi Pratap  <ravi@ximian.com>
20298
20299         * ecore.cs (ImplicitConversionExists): Wrapper function which also
20300         looks at user defined conversion after making a call to 
20301         StandardConversionExists - we need this for overload resolution.
20302
20303         * expression.cs : Update accordingly the various method calls.
20304
20305         This fixes 2 bugs filed against implicit user defined conversions 
20306
20307 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
20308
20309         * statement.cs: Track the result of the assignment.
20310
20311 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
20312
20313         * expression.cs (MemberAccess): Improved error reporting for
20314         inaccessible members.
20315
20316 2002-05-22  Martin Baulig  <martin@gnome.org>
20317
20318         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
20319         itself with debugging support.
20320
20321 2002-05-22  Martin Baulig  <martin@gnome.org>
20322
20323         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
20324         Removed, this isn't needed anymore.
20325
20326 2002-05-20  Martin Baulig  <martin@gnome.org>
20327
20328         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
20329         be underlying type for an enum.
20330
20331 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
20332
20333         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
20334         that splits out the loading of just the core types.
20335
20336         * rootcontext.cs (ResolveCore): Split the struct resolution in
20337         two, so we can load the enumeration underlying types before any
20338         enums are used.
20339
20340         * expression.cs (Is): Bandaid until we fix properly Switch (see
20341         bug #24985 for details).
20342
20343         * typemanager.cs (ImplementsInterface): The hashtable will contain
20344         a null if there are no interfaces implemented.
20345
20346 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
20347
20348         * cs-parser.jay (indexer_declarator): It is fine to have array
20349         parameters
20350
20351 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
20352
20353         * typemanager.cs: (RegisterBuilder): New function used to register
20354         TypeBuilders that implement interfaces.  Since
20355         TypeBuilder.GetInterfaces (as usual) does not work with lame
20356         Reflection.Emit. 
20357         (AddUserType): register interfaces.
20358
20359         (ImplementsInterface): Use the builder_to_ifaces hash if we are
20360         dealing with TypeBuilder.  Also, arrays are showing up as
20361         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
20362         methods can not be invoked on them!
20363
20364         * ecore.cs (ExplicitReferenceConversionExists): Made public.
20365         (ImplicitReferenceConversionExists): Split out from
20366         StandardConversionExists. 
20367
20368         * expression.cs (As): We were only implementing one of the three
20369         cases for the as operator.  We now implement them all.
20370         (Is): Implement the various other cases for Is as well.
20371
20372         * typemanager.cs (CACHE): New define used to control if we want or
20373         not the FindMembers cache.  Seems to have a negative impact on
20374         performance currently
20375
20376         (MemberLookup): Nested types have full acess to
20377         enclosing type members
20378
20379         Remove code that coped with instance/static returns for events, we
20380         now catch this in RealFindMembers.
20381
20382         (RealFindMembers): only perform static lookup if the instance
20383         lookup did not return a type or an event.  
20384
20385 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
20386
20387         * assign.cs (CompoundAssign): We pass more semantic information
20388         now to Compound Assignments than we did before: now we have all
20389         the information at hand, and now we resolve the target *before* we
20390         do the expression expansion, which allows the "CacheValue" method
20391         to have the effect we intended (before, a [x] += 1 would generate
20392         two differen ArrayAccess expressions from the ElementAccess,
20393         during the resolution process).
20394
20395         (CompoundAssign.DoResolve): Resolve target and original_source here.
20396
20397 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
20398
20399         * expression.cs (ArrayAccess): dropped debugging information. 
20400
20401         * typemanager.cs: Small bug fix: I was always returning i_members,
20402         instead of one of i_members or s_members (depending on which had
20403         the content).
20404
20405         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
20406         method is invoked before any code generation takes place, and it
20407         is a mechanism to inform that the expression will be invoked more
20408         than once, and that the method should use temporary values to
20409         avoid having side effects
20410
20411         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
20412
20413         * ecore.cs (Expression.CacheTemporaries): Provide empty default
20414         implementation.
20415
20416         * expression.cs (Indirection, ArrayAccess): Add support for
20417         CacheTemporaries in these two bad boys. 
20418
20419         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
20420         ldobj or ldind_ref.  
20421         (StoreFromPtr): Handle stobj as well.
20422
20423         * expression.cs (UnaryMutator): Share more code.
20424
20425         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
20426         down: I was not tracking the Filter function as well, which
20427         was affecting the results of the cache.
20428
20429 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
20430
20431         * attribute.cs: Remove the hack to handle the CharSet property on
20432         StructLayouts. 
20433
20434 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
20435
20436         * attribute.cs (DoResolve): More uglyness, we now only try to
20437         resolve the attribute partially, to extract the CharSet
20438         information (only if we are a StructLayout attribute).  Otherwise 
20439
20440         (GetExtraTypeInfo): Add some code to conditionally kill in the
20441         future this.   I am more and more convinced that the .NET
20442         framework has special code to handle the attribute setting on
20443         certain elements.
20444
20445         * expression.cs (IsParamsMethodApplicable): Revert my previous
20446         foreach change here, it was wrong.
20447
20448 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
20449
20450         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
20451         (pp_expr): do not abort on unknown input, just return.
20452         (eval): abort if there are pending chars.
20453
20454         * attribute.cs (Attribute.Resolve): Positional parameters are
20455         optional.  Deal with that case.
20456
20457         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
20458         the Ansi/Unicode/Auto information for the type.
20459
20460         (TypeContainer.DefineType): instantiate the EmitContext here, as
20461         we will be using it during the type definition (to resolve
20462         attributes) and during the emit phase.
20463
20464         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
20465         to pull type information out of the attributes
20466
20467         (Attribute.Resolve): track the constructor builder, and allow for
20468         multiple invocations (structs and classes will use this).
20469
20470         * ecore.cs (MemberLookupFinal): new version with all the
20471         parameters customizable.
20472
20473         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
20474         constructors.  Return if the result value is null (as the error
20475         would have been flagged already by MemberLookupFinal)
20476
20477         Do not allow instances of abstract classes or interfaces to be
20478         created.
20479
20480         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
20481         We have to compare the assembly property here when dealing with
20482         FamANDAssem and Assembly access modifiers, because we might be
20483         creating an assembly from *modules* (that means that we are not
20484         getting TypeBuilders for types defined in other modules that are
20485         part of this assembly).
20486
20487         (Method.Emit): If the method is marked abstract and has a body,
20488         emit an error. 
20489
20490         (TypeContainer.DefineMembers): If both the defined member and the
20491         parent name match are methods, then do not emit any warnings: let
20492         the Method.Define routine take care of flagging warnings.  But if
20493         there is a mismatch (method overrides something else, or method is
20494         overriwritten by something, then emit warning).
20495
20496         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
20497         set to null, this means `do not check for the return type on the
20498         signature'. 
20499
20500         (Method.Define): set the return type for the method signature to
20501         null, so that we get methods with the same name and parameters and
20502         different return types.  This is used to flag warning 114 (you are
20503         hiding a method, and you probably want to use the new/override
20504         keywords instead).
20505
20506         * typemanager.cs (MemberLookup): Implemented proper access
20507         control, closing a long standing set of bug reports.  The problem
20508         was that the Framework only has two bits: Public and NonPublic,
20509         and NonPublic includes private and protected methods, but we need
20510         to enforce the FamANDAssem, FamOrAssem and Family. 
20511
20512 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
20513
20514         * statement.cs (GotoCase): Return true: Ammounts to giving up
20515         knowledge on whether we return or not, and letting the other case
20516         be responsible for it.
20517
20518 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
20519
20520         * driver.cs: Do not load directories for each file processed, only
20521         do it if there is a pattern.
20522
20523         * ecore.cs: Report readonly assigns here as well, as we might have
20524         been resolved only by MemberAccess.
20525
20526         (SimpleName.SimpleNameResolve): Also be useful for LValue
20527         resolution.   We need this to propagate assign to local readonly variables
20528
20529         * typemanager.cs: Use a ptrhashtable for the criteria, because we
20530         do not want to reuse potential criteria memory.
20531
20532         * class.cs (MyEventBuilder): Set reflected_type;
20533
20534         * ecore.cs (Constantify): Added support for constifying bools.
20535
20536         (RootContext.LookupType): Added a cache for values looked up in
20537         the declaration space.
20538
20539         * typemanager.cs (FindMembers): Now is a front-end to
20540         RealFindMembers, and provides a two-level hashtable-based cache to
20541         the request.  
20542
20543         15% performance improvement: from 22.5 to 19.2 seconds.
20544
20545         * expression.cs (IsParamsMethodApplicable): use foreach.
20546         (Invocation.DoResolve): ditto.
20547         (New.DoResolve): ditto.
20548         (ArrayCreation.DoResolve): ditto.
20549
20550         * ecore.cs (FindMostEncompassingType): use foreach.
20551
20552         * delegate.cs (NewDelegate.DoResolve): Use foreach
20553
20554         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
20555         (RemoveMethods): use foreach.
20556
20557         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
20558         nested foreach statements instead of for, and also break out of
20559         the inner loop once a match is found.
20560
20561         (Invocation.OverloadResolve): Use foreach, simplify the code. 
20562
20563 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
20564
20565         * cfold.cs (BinaryFold): During an enumeration evaluation context,
20566         we actually unwrap the expression to allow for extra information
20567         to be extracted. 
20568
20569         * expression.cs: Use Shr_Un on unsigned operations. 
20570
20571 2002-05-08  Ravi Pratap  <ravi@ximian.com>
20572
20573         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
20574         applicable operators was not being considered correctly. This closes
20575         the bug Miguel reported.
20576
20577 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
20578
20579         * attribute.cs: check that the type derives from System.Attribute
20580         and report the correct error in that case (moved the duplicate code to
20581         its own method, too).
20582
20583 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
20584
20585         * attribute.cs: lookup attribute type name as the spec says: first the
20586         bare attribute name and then name + "Attribute" (nant compiles with
20587         mcs after this fix).
20588
20589 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
20590
20591         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
20592         Because of the way we parse things, we should try to see if a
20593         UIntConstant can fit in an integer.
20594
20595 2002-05-07  Ravi Pratap  <ravi@ximian.com>
20596
20597         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
20598         when we are in an explicit context.
20599
20600         (ConvertReferenceExplicit): When converting from Iface type S to Class
20601         T make sure the rules are implemented as an OR.
20602
20603         * parameter.cs (ParameterType): Make it a property for now although the
20604         purpose really isn't anything immediate.
20605
20606         * expression.cs (Is*Applicable): Do better checking on the parameter type
20607         of a ref/out parameter. The ones from the system assemblies are already 
20608         marked with the correct type so we don't need to do any correction.
20609
20610         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
20611         the object type is standard too so include that.
20612
20613 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20614
20615         * ecore.cs (StandardConversionExists): Augment with missing code:
20616         deal with IntConstant, LongConstants and Enumerations.
20617
20618         * assign.cs: Report the error, instead of failing silently
20619
20620         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
20621         typecontainer that they are declared, because the
20622         typecontainer/namespace will have the list of using clauses that
20623         need to be applied.
20624
20625         Assembly Attributes were escaping the normal registration
20626         mechanism. 
20627
20628         (EmitCode): Apply attributes within an EmitContext that represents
20629         the container they were declared on.
20630
20631         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
20632
20633 2002-05-06  Ravi Pratap  <ravi@ximian.com>
20634
20635         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
20636         Revamp completely - make much cleaner as we now operate only
20637         on a set of Types.
20638
20639         (FindMostSpecificSource, FindMostSpecificTarget): New methods
20640         to implement the logic detailed in the spec more correctly.
20641
20642         (UserDefinedConversion): Update accordingly.
20643
20644 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20645
20646         * statement.cs: Return flow analysis information up.
20647
20648         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
20649         and the default.
20650
20651         (token): Do not consume an extra character before calling
20652         decimal_digits.
20653
20654 2002-05-06  Piers Haken <piersh@friskit.com>
20655
20656         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
20657
20658 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20659
20660         * class.cs (Constructor.Emit): Set the IsStatic flag in the
20661         EmitContext during the instance constructor initializer
20662         resolution, to stop access to instance variables.
20663
20664         This is mandated by the spec, last paragraph of the `constructor
20665         initializers' section. 
20666
20667 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
20668
20669         * cs-parser.jay, class.cs (Accessor): new class used to represent
20670         an accessor (get or set).  In the past we used `null' to represent
20671         a missing accessor.  But this is ambiguous because there was no
20672         way to tell in abstract indexers/properties if one of them was
20673         specified.
20674
20675         Now there is a way of addressing that.
20676
20677         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
20678         instead of FindMembers.
20679
20680         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
20681         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
20682
20683         * attribute.cs: Treat indexers and properties as the same in terms
20684         of applying attributes
20685
20686         * ecore.cs (FindMostEncompassedType): Use statically initialized
20687         EmptyExpressions()s like we do elsewhere to avoid creating useless
20688         objects (and we take this out of the tight loop).
20689
20690         (GetConversionOperators): Move the code to extract the actual
20691         operators to a separate routine to clean things up.
20692
20693 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
20694
20695         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
20696         events are always registered FieldBuilders.
20697
20698         * class.cs (FieldBase): New class shared by Fields 
20699
20700         * delegate.cs: If we are a toplevel delegate, use our full name.
20701         If we are a nested delegate, then only use our tail name.
20702
20703 2002-05-02  Ravi Pratap  <ravi@ximian.com>
20704
20705         * expression.cs (IsApplicable): Ensure that we add the "&" to
20706         ref/out types before comparing it with the type of the argument.
20707
20708         (IsParamsMethodApplicable): Ditto.
20709
20710         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
20711         silly me ;-)
20712
20713         * delegate.cs : Handle the case when we have more than one applicable
20714         method. Flag an error only when we finish checking all.
20715
20716 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
20717
20718         * expression.cs: Add support for boolean static initializers.
20719
20720 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
20721
20722         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
20723
20724         * parameter.cs (ComputeParameterTypes,
20725         ComputeAndDefineParameterTypes): Better error handling: now we
20726         clear the `types' cache if we fail during any of the type lookups.
20727         We also return the status code correctly to our caller
20728
20729         * delegate.cs: If we fail to define a delegate, abort the extra
20730         steps. 
20731
20732         * expression.cs (Binary.ResolveOperator): for
20733         operator==(object,object) and operator !=(object, object) we also
20734         have to verify that there is an implicit conversion from one to
20735         the other.
20736
20737         (ArrayAccess.DoResolve): Array Access can operate on
20738         non-variables. 
20739
20740 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
20741
20742         * assign.cs (CompoundAssign): A new class used as a "flag" that
20743         the assignment actually is happening as part of a compound
20744         assignment operator.
20745
20746         During compound assignment, a few new rules exist to enable things
20747         like:
20748
20749         byte b |= 1 + 2
20750
20751         From the spec:
20752
20753         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
20754         to the type of x) if y is implicitly convertible to the type of x,
20755         and the operator is a builtin operator and the return type of the
20756         operator is explicitly convertible to the type of x. 
20757
20758         * rootcontext.cs: Reset warning level to 2.  4 catches various
20759         "interesting" features in mcs, we must clean this up at some
20760         point, but currently am trying to kill other bugs ;-)
20761
20762         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
20763         in container classes as well.  
20764
20765         * expression.cs (Binary.ResolveOperator): Handle string case
20766         before anything else (as operator overloading does emit an error
20767         before doing anything else).
20768
20769         This code could go away when we move to a table driven model, but
20770         i could not come up with a good plan last night.
20771
20772 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
20773
20774         * typemanager.cs (CSharpName): reimplementation using regex.
20775         * class.cs: added null check for fields in Emit
20776         * rootcontext.cs: set warninglevel to 4
20777
20778 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
20779
20780         * typemanager.cs (CSharpName): reimplemented with Lupus
20781         suggestion.
20782
20783 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
20784
20785         * statement.cs (If): correclty implement Resolve, because we were
20786         not catching sem errors in there.  The same process is needed
20787         everywhere else. 
20788         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
20789
20790
20791         (Statement.Warning_DeadCodeFound): Factorize code.
20792         (While): Report dead code here too.
20793
20794         (Statement): Added Resolve virtual method to allow
20795         for resolution split from the emit code.
20796
20797 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20798
20799         * statement.cs (EmitBoolExpression): No longer try to resolve the
20800         expression here.    
20801         (MakeBoolean): New utility function that resolve, implicitly
20802         converts to boolean and tags the expression. 
20803
20804
20805         (If, Do): Implement dead code elimination.
20806         (While): Implement loop inversion
20807
20808         (Do, While, For, If): Resolve the expression prior to calling our
20809         code generation.
20810
20811 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
20812
20813         * class.cs:
20814           - added method Report28 (warning: program has more than one entry point)
20815           - added method IsEntryPoint, implements paragraph 10.1 of the spec
20816           - modified method Method.Define, the part at the end of the method
20817
20818         * rootcontext.cs: added static public Location EntryPointLocation;
20819           
20820         * ../errors/cs0028.cs : Add test case for the above warning.              
20821
20822         * typemanager.cs:
20823           - modified method CSharpName to allow arrays of primitive type to
20824             be printed nicely (e.g. instead of System.Int32[][] it now prints
20825             int[][])
20826           - added method CSharpSignature: returns the signature of a method
20827             in string format to be used in reporting errors, warnings, etc.
20828
20829         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
20830         with String.Empty.
20831
20832 2002-04-26  Ravi Pratap  <ravi@ximian.com>
20833
20834         * delegate.cs (Define): Fix extremely silly bug where I was
20835         setting the type of the 'object' parameter of the BeginInvoke
20836         method to System.IAsyncResult instead of System.Object ;-)
20837
20838 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20839
20840         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
20841         here. 
20842
20843         (Constructor.Emit): return if we fail to initialize the
20844         constructor.  Another door closed!  
20845
20846         * expression.cs (New.DoResolve): Improve error message (from -6 to
20847         1501).  Use DeclaredOnly lookup to find the exact constructor.
20848
20849         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
20850         loop.  This is useful.
20851
20852         * cs-parser.jay: Adjust the default parameters so that destructors
20853         have the proper signature.
20854
20855 2002-04-26  Martin Baulig  <martin@gnome.org>
20856
20857         * driver.cs (LoadAssembly): If `assembly' contains any characters
20858         which are only valid in path names and not in assembly names
20859         (currently slash, backslash and point), use Assembly.LoadFrom ()
20860         instead of Assembly.Load () on the `assembly' (before iteration
20861         over the link_paths).
20862
20863 2002-04-26  Martin Baulig  <martin@gnome.org>
20864
20865         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
20866
20867 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
20868
20869         * class.cs (Property): use the new typemanager.MemberLookup
20870
20871         (TypeContainer.MemberLookup): Implement using the
20872         TypeManager.MemberLookup now. 
20873
20874         * typemanager.cs: Make MemberLookup a function of the TypeManager,
20875         and return MemberInfos, so that these can be used without an
20876         EmitContext (what we had before).
20877
20878 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
20879
20880         * expression.cs: Fix the case where the argument to params if the
20881         type of the params.  I omitted handling this before.   Fixed
20882
20883 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20884
20885         * driver.cs: Call BootCorlib_PopulateCoreType
20886
20887         * class.cs (Property.CheckBase): Check for properties only, not
20888         for all members. 
20889
20890         * interface.cs: Temporary hack: try/catch around the
20891         CustomAttributeBuilder, because I am getting an exception that I
20892         do not understand.
20893
20894         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
20895         types whose definitions are required to be there (attributes are
20896         defined before standard types).
20897
20898         Compute definitions as we boot the various types, as they are used
20899         immediately (value_type class will need object_type, but if we do
20900         not initialize object_type, we will pass a null, which will let
20901         the runtime pick the System.Object from the existing corlib, which
20902         is not what we want).
20903
20904 2002-04-22  Patrik Torstensson <totte@labs2.com>
20905
20906         * cs-tokenizer.cs: fixed a number of trim() issues.
20907
20908 2002-04-22  Ravi Pratap  <ravi@ximian.com>
20909
20910         * expression.cs (Argument.Type): Ensure that we return the correct
20911         type when we have out or ref parameters [in which case we 
20912         append a "&"].
20913
20914 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20915
20916         * class.cs (Property, Indexer): Allow extern modifier in there. 
20917
20918         * typemanager.cs (InitBaseTypes): Initializes object_type and
20919         value_type, since those will be used early on during the bootstrap
20920         process to compile corlib.
20921
20922         (InitCoreTypes): Move code from here to InitBaseTypes.
20923
20924 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
20925
20926         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
20927         single-dimension arrays as using the ldlen opcode.  
20928
20929         Daniel Lewis discovered this optimization.  
20930
20931         * typemanager.cs: Add signature for System.Array::get_Length
20932
20933 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20934
20935         * statement.cs: report the error when the foreach does not apply to an
20936         array nor a collection.
20937
20938 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
20939
20940         * expression.cs: Add implicit conversions to the operator ~.
20941
20942         * constant.cs (DecimalConstant.Emit): Emit decimal value.
20943
20944         * typemanager.cs: Locate the decimal constructor.
20945
20946 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20947
20948         * attribute.cs: use the new property of TypeOf.
20949         * expression.cs: added 'get' property around typearg.
20950
20951         These changes fix a build breaker reported by NickD. Is this the
20952         correct way to fix?  If not, please, revert my changes and make it
20953         work :-).
20954
20955 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
20956
20957         * attribute.cs: Add support for typeof in attribute invocations.
20958         I am not sure that this is right though.
20959
20960 2002-04-14  Duncan Mak  <duncan@ximian.com>
20961
20962         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
20963         Binary.Operator.Division case.
20964
20965 2002-04-13  Ravi Pratap  <ravi@ximian.com>
20966
20967         * class.cs (DefineType): Ensure that we do a proper check on
20968         attribute types and also register it with the TypeManager.
20969
20970         (TypeContainer.Targets): The default for attribute types is
20971         AttributeTargets.All.
20972
20973         * attribute.cs (ApplyAttributes): Registering the attribute type
20974         is done elsewhere, not when we discover we have a Usage attribute.
20975
20976 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20977
20978         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
20979         and get rid of is_delegate parameter.
20980
20981         * everywhere : update.
20982
20983 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20984
20985         * cs-parser.jay (compilation_unit): Revamp completely to use
20986         some new ideas that I got from Rhys' grammar to solve the problems
20987         with assembly level attributes.
20988
20989         (outer_declaration): New grammar production.
20990
20991         (attribute_sections): Add.
20992
20993         (opt_attributes): Base on attribute_sections
20994
20995         (namespace_declaration): Allow opt_attributes to tackle the case
20996         when we have assembly level attributes - we are clever in this
20997         regard now ;-)
20998
20999         * attribute.cs (ApplyAttributes): Do not worry about assembly 
21000         attributes in the non-global context.
21001
21002         * rootcontext.cs (AddGlobalAttributes): Go back to using this
21003         instead of SetGlobalAttributes.
21004
21005         * class.cs, rootcontext.cs : Ensure we define and generate 
21006         attribute types before anything else.
21007
21008         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
21009         and flag the new error -20 for the case when the attribute type
21010         does not have valid targets specified. csc does not catch this.
21011
21012         * ../errors/errors.txt : update for error # -20
21013
21014 2002-04-11  Ravi Pratap  <ravi@ximian.com>
21015
21016         * support.cs (InternalParameters.ParameterModifier): Do some null
21017         checking and return sane values.
21018
21019         * class.cs (Method.Define): If we are a PInvoke method, ensure
21020         that we are static and extern. Report error # 601
21021
21022         * ../errors/cs0601.cs : Add test case for the above error.
21023
21024 2002-04-07  Ravi Pratap  <ravi@ximian.com>
21025
21026         * rootcontext.cs (attribute_types): We need to keep type of
21027         all attribute types separately and emit code for them first.
21028
21029         (RegisterAttribute) : Implement.
21030
21031         * class.cs (DefineType): Check if the current Type is a custom
21032         attribute type and register it accordingly.
21033
21034         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
21035         adding the first attribute twice and rename to
21036
21037         (SetGlobalAttributes): this.
21038
21039         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
21040         lookups.
21041
21042         * attribute.cs (ApplyAttributes): Take an additional argument telling us
21043         if we are processing global arguments. Hmm, I am unsure of this.
21044
21045 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21046
21047         * expression.cs: added static array of strings to avoid calling
21048         Enum.ToString () for Operator in Binary. Significant recover of
21049         performance.
21050
21051 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
21052
21053         * class.cs (FindMembers): Allow the Builders of the various
21054         members to be null.  If they are skip them.  This only happens
21055         during the PInvoke declaration.
21056
21057 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
21058
21059         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
21060         failure, so we do not keep going afterwards.
21061
21062         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
21063         wanted to pass `false' as the `is_delegate' argument.  If this is
21064         the case, why not use delegate_type == null to mean `is_delegate =
21065         false' and anything else as is_delegate = true.
21066
21067 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
21068
21069         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
21070         code for the section, not the beginning of the tests.
21071
21072 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
21073
21074         * cfold.cs: Handle operator + (Enum x, Underlying x) 
21075
21076         * expression.cs (Binary): same.  Warn about errors where we have
21077         Enum/Enum in operator + as well.
21078
21079 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
21080
21081         * statement.cs:
21082                 - added support for switch(bool)
21083                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
21084                 - add TableSwitchEmit() to handle table-based switch statements
21085
21086 2002-04-05  Ravi Pratap  <ravi@ximian.com>
21087
21088         * expression.cs (Invocation.OverloadResolve): Factor out code which
21089         does parameter compatibility checking with arguments so that we can 
21090         re-use the code even from Delegate.VerifyApplicability
21091
21092         (VerifyArgumentsCompat): Move above code here.
21093
21094         * delegate.cs (VerifyApplicability): Get rid of duplicate code
21095         and instead make a call to the above method.
21096
21097 2002-03-31  Ravi Pratap  <ravi@ximian.com>
21098
21099         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
21100         We use it to keep track of classes which are attribute types.
21101
21102 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
21103
21104         * delegate.cs (Delegate.Define): Correctly define the types in the
21105         presence of fixed and array parameters.
21106
21107         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
21108         doing FindMembers.
21109
21110         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
21111         include NonPublic after the first iteration.
21112
21113         * class.cs (Indexer.CheckBase): Only check if both parents are
21114         non-null. 
21115
21116         * cs-parser.jay (accessor_body): If empty, set to null.
21117
21118         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
21119         same code path here to resolve constants names that we did have in
21120         MemberAccess.DoResolve.  There is too much code duplicated here.
21121
21122 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
21123
21124         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
21125
21126         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
21127         to MakeUnionSet.
21128
21129         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
21130         tokens, numbers and strings.
21131
21132         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
21133         parenthesis.
21134
21135         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
21136         asyncronous parameters and the regular parameters.  
21137
21138         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
21139         specify the target directory.
21140
21141         * expression.cs: (This.DoResolve): Simplify
21142         (As.Emit): Optimize, do not generate IsInst if the expression is
21143         always of the given type.
21144
21145         (Is.DoResolve): Bug fix, we were reporting both always/never for
21146         the is expression.
21147
21148         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
21149         creating too many unnecessary arrays.
21150
21151 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
21152
21153         * class.cs (EmitFieldInitializer): Use Assign expression to assign
21154         fields instead of rolling our own initializer.   Takes care of all
21155         implicit conversions, and drops unnecessary static checks/argument.
21156
21157 2002-03-31  Dick Porter  <dick@ximian.com>
21158
21159         * driver.cs: use the GetDirectories() return values properly, and
21160         use "/" as path separator.
21161
21162 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
21163
21164         * expression.cs (Unary): Optimize - - expr into expr.
21165         (Binary): Optimize a + (-b) into a -b.
21166
21167         * codegen.cs (CodeGen): Made all methods static.
21168
21169 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
21170
21171         * rootcontext.cs: 
21172
21173         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
21174         TypeBuilder property.
21175
21176         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
21177         instead. 
21178
21179         * tree.cs: Removed the various RecordXXXX, and replaced with a
21180         single RecordDecl.  Removed all the accessor methods, and just
21181         left a single access point Type 
21182
21183         * enum.cs: Rename DefineEnum to DefineType.
21184
21185         * decl.cs: New abstract method `DefineType' used to unify the
21186         Defines for Enumerations, Interfaces, TypeContainers and
21187         Delegates.
21188
21189         (FindType): Moved LookupInterfaceOrClass here.  Moved the
21190         LookupBaseClasses method that used to live in class.cs and
21191         interface.cs here, and renamed to FindType.
21192
21193         * delegate.cs: Implement DefineType.  Take advantage of the
21194         refactored pattern for locating the parent builder without taking
21195         the parent_builder argument (which we know does not work if we are
21196         nested, and triggering a toplevel definition).
21197
21198 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
21199
21200         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
21201         accessibility of a member has changed during override and report
21202         an error if so.
21203
21204         * class.cs (Method.Define, Property.Define): Only complain on
21205         overrides if the method is private, any other accessibility is
21206         fine (and since we just checked the permission is the same, we are
21207         good to go).
21208
21209         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
21210         and elif are processed always.  The other pre-processing
21211         directives are only processed if we are "taking" the path
21212
21213 2002-03-29  Martin Baulig  <martin@gnome.org>
21214
21215         * class.cs (Method.Emit): Only emit symbolic debugging info if the
21216         current location is not Null.
21217
21218         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
21219         a separate method so we can profile it.
21220
21221         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
21222         `span.Seconds' are just seconds, but no minutes or hours.
21223         (MainDriver): Profile the CodeGen.SaveSymbols calls.
21224
21225 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
21226
21227         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
21228         Remove the gratuitous set of Final:
21229
21230                                 // If an interface implementation, then we can set Final.
21231                                 if (((flags & MethodAttributes.Abstract) == 0) &&
21232                                     implementing.DeclaringType.IsInterface)
21233                                         flags |= MethodAttributes.Final;
21234
21235         I do not know what I was smoking when I used that.
21236
21237
21238         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
21239         step into fixing the name resolution issues for delegates and
21240         unifying the toplevel name resolution.
21241
21242 2002-03-28  Martin Baulig  <martin@gnome.org>
21243
21244         * class.cs (Method.Emit): If we have a symbol writer, call its
21245         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
21246         tell it about the current method.
21247
21248         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
21249         writer that we're going to emit the first byte of IL code for a new
21250         statement (a new source line).
21251         (EmitContext.EmitTopBlock): If we have a symbol writer, call
21252         EmitContext.Mark() before emitting any code.
21253
21254         * location.cs (SymbolDocument): Return null when we're Null.
21255
21256         * statement.cs (Statement): Moved the `Location loc' variable here.
21257         (Statement.EmitBoolExpression): If we have a symbol writer, call
21258         ec.Mark() before emitting any code to tell it that we're at the
21259         beginning of a new statement.
21260         (StatementExpression): Added `Location' argument to the constructor.
21261         (Block): Added public readonly variable `StartLocation' and public
21262         variable `EndLocation'.  The latter is to be set using SetEndLocation().
21263         (Block): Added constructor which takes a start and end location.
21264         (Block.SetEndLocation): New method. This sets the end location.
21265         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
21266         local variables we create.
21267         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
21268         each statement and do also mark the begin and end of the block.
21269
21270         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
21271         tell it the current lexer.Location, use Location.Null for the end of the
21272         block.
21273         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
21274         current block, set its end location using SetEndLocation().
21275         (statement_expression): StatementExpression constructor now takes the
21276         lexer.Location as additional argument.
21277         (for_statement, declare_local_variables): Likewise.
21278         (declare_local_variables): When creating a new implicit block, use the
21279         new Block constructor and pass it the lexer.Location.
21280
21281 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
21282
21283         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
21284         members also on the parent interfaces recursively.
21285
21286 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
21287
21288         * report.cs: Use new formats, since Gonzalo finished the missing
21289         bits. 
21290
21291         * expression.cs (Binary.ResolveOperator): added missing operator|
21292         operator& and operator^ for bool/bool.
21293
21294         * cs-parser.jay: CheckDef now takes a Location argument that is
21295         used to report errors more precisly (instead of reporting the end
21296         of a definition, we try to track something which is a lot closer
21297         to the source of the problem).
21298
21299         * cs-tokenizer.cs: Track global token use, so we can properly flag
21300         the use of #define/#undef after the first token has been seen.
21301
21302         Also, rename the reportXXXX to Error_DescriptiveName
21303
21304         * decl.cs (DeclSpace.IsTopLevel): Move property here from
21305         TypeContainer, so that Enum and Interface can use this too.
21306
21307         * class.cs (TypeContainer.LookupInterfaceOrClass,
21308         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
21309         `builder' argument.  Typically this was used to pass the parent
21310         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
21311         the definition).  
21312
21313         The problem is that a nested class could trigger the definition of
21314         a toplevel class, and the builder would be obviously wrong in that
21315         case. 
21316
21317         So we drop this argument, and we compute dynamically the
21318         TypeBuilder/ModuleBuilder (the correct information was available
21319         to us anyways from DeclSpace.Parent)
21320
21321         * interface.cs (Interface.DefineInterface): Drop builder
21322         parameter cleanup like class.cs
21323
21324         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
21325         like class.cs
21326
21327         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
21328         values. 
21329
21330         (Try.Emit): Propagate the returns value from the statement.
21331
21332         (Return.Emit): Even if we are leavning 
21333
21334         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
21335
21336         * modifiers.cs: Fix the computation of MethodAttributes flags.
21337
21338 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
21339
21340         * driver.cs: allow compilation of files that start with '/'.
21341         Add a default case when checking the argument of --target.
21342
21343 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
21344
21345         * interface.cs: Implement the same search algorithm for types in
21346         the interface code.
21347
21348         * delegate.cs: Do not allow multiple definition.
21349
21350         * Recovered ChangeLog that got accidentally amputated
21351
21352         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
21353
21354         * rootcontext.cs: Load manually enum to allow core classes to
21355         contain enumerations.
21356
21357         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
21358         Update to new static methods in TypeManager.
21359
21360         * typemanager.cs (GetMethod, GetConstructor): Use our
21361         implementation of FindMembers to find the members, since during
21362         corlib compilation, the types are TypeBuilders and GetMethod and
21363         GetConstructor do not work.
21364
21365         Make all methods in TypeManager static.
21366
21367         (InitCodeHelpers): Split the functionality from
21368         the InitCodeTypes function.
21369
21370         * driver.cs: Call InitCodeHelpers after we have populated the
21371         types. 
21372
21373         * cs-parser.jay (delegate_declaration): we did not used to compute
21374         the delegate name correctly for void delegates.
21375
21376 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
21377
21378         * rootcontext.cs (RootContext): Init the interface_resolve_order
21379         and type_container_resolve_order always.
21380
21381         (ResolveCore, BootstrapCorlib_ResolveClass,
21382         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
21383         compiler when compiling with --nostdlib
21384
21385         * class.cs (TypeContainer.DefineType): Check that our parent is
21386         not null.  This test is most important when we are bootstraping
21387         the core types.
21388
21389         * codegen.cs: Split out the symbol writing code.
21390
21391 2002-03-25  Martin Baulig  <martin@gnome.org>
21392
21393         * driver.cs (-g): Made -g an alias for --debug.
21394
21395 2002-03-24  Martin Baulig  <martin@gnome.org>
21396
21397         * codegen.cs (SymbolWriter): New public variable. Returns the
21398         current symbol writer.
21399         (CodeGen): Added `bool want_debugging_support' argument to the
21400          constructor. If true, tell the ModuleBuild that we want debugging
21401         support and ask it for the ISymbolWriter.
21402         (Save): If we have a symbol writer, call it's Close() method after
21403         saving the assembly.
21404
21405         * driver.c (--debug): New command line argument to create a
21406         debugger information file.
21407
21408         * location.cs (SymbolDocument): New public property. Returns an
21409         ISymbolDocumentWriter object for the current source file or null
21410         if we don't have a symbol writer.
21411
21412 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
21413
21414         * driver.cs (LoadAssembly): Correctly return when all the paths
21415         have been tried and not before.
21416
21417         * statement.cs (Switch.Emit): return the actual coverage for this
21418         statement (returns/not-returns)
21419
21420         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
21421         switch of the statement if we are the last switch section.  That
21422         kills two problems: try/catch problems (we used to emit an empty
21423         nop at the end) and switch statements where all branches would
21424         return. 
21425
21426 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
21427
21428         * driver.cs: Add default assemblies (the equivalent to the
21429         Microsoft CSC.RSP file)
21430
21431         * cs-tokenizer.cs: When updating `cols and setting it to zero,
21432         also update tokens_seen and set it to false.
21433
21434         * driver.cs: Implement --recurse for Mike.
21435
21436         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
21437         correctly splitting out the paths.
21438
21439 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
21440
21441         * interface.cs (Interface.PopulateProperty): Instead of using
21442         `parent' as the declaration space for the set parameters, use
21443         `this' 
21444
21445         * support.cs (InternalParameters): InternalParameters constructor
21446         takes a DeclSpace instead of a TypeContainer.
21447
21448         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
21449         types are being initialized, load the address of it before calling
21450         the function.  
21451
21452         (New): Provide a mechanism to disable the generation of local
21453         value type temporaries when the caller will be providing us with
21454         an address to store it.
21455
21456         (ArrayCreation.EmitDynamicInitializers): Use it.
21457
21458 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
21459
21460         * expression.cs (Invocation.EmitArguments): Only probe for array
21461         property if there is more than one argument.  Sorry about that.
21462
21463         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
21464         empty param arrays.
21465
21466         * class.cs (Method.LabelParameters): Fix incorrect code path that
21467         prevented the `ParamArrayAttribute' from being applied to the
21468         params attribute.
21469
21470 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
21471
21472         * support.cs (ReflectionParameters): Correctly compute whether the
21473         last argument is a params array.  Fixes the problem with
21474         string.Split ('a')
21475
21476         * typemanager.cs: Make the assemblies array always be non-null
21477         (empty, but non-null)
21478
21479         * tree.cs (RecordDecl): New function that abstracts the recording
21480         of names.  This reports error 101, and provides a pointer to the
21481         previous declaration.  Fixes a crash in the compiler.
21482
21483         * cs-parser.jay (constructor_declaration): Update to new grammar,
21484         and provide a constructor_body that can be empty.
21485
21486 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
21487
21488         * driver.cs: Add support for --resources.
21489
21490         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
21491         Make all types for the various array helper methods be integer.
21492
21493         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
21494         CheckState to ConvCast.
21495
21496         (ConvCast): Now it takes a `checked' state argument, to avoid
21497         depending on the emit context for the conversion, and just using
21498         the resolve time setting.
21499
21500         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
21501         instead of Invocation.EmitArguments.  We do not emit the original
21502         arguments, instead we emit those which have been converted to
21503         unsigned int expressions.
21504
21505         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
21506
21507         * codegen.cs: ditto.
21508
21509         * expression.cs (LocalVariableReference): Drop the use of the
21510         Store function that depended on the variable index.
21511
21512         * statement.cs (VariableInfo): Drop the `Idx' property from this
21513         class, as this is not taking into account the indexes for
21514         temporaries tat we generate during the execution, getting the
21515         indexes wrong.
21516
21517         * class.cs: First emit class initializers, then call the parent
21518         constructor. 
21519
21520         * expression.cs (Binary): Fix opcode emision.
21521         (UnaryMutator.EmitCode): Support checked code generation
21522
21523         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
21524         matches for events for both the Static and Instance scans,
21525         pointing to the same element.   Fix that.
21526
21527 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
21528
21529         * rootcontext.cs (ResolveTree): Always set the
21530         interface_resolve_order, because nested interfaces will be calling
21531         into us.
21532
21533         * class.cs (GetInterfaceOrClass): Track the same resolution
21534         process used by TypeManager.LookupType.  This fixes the nested
21535         type lookups in class declarations (separate path from
21536         LookupType). 
21537
21538         (TypeContainer.DefineType): Also define nested interfaces.
21539         (TypeContainer.RegisterOrder): New public function used to
21540         register the order in which child interfaces need to be closed.
21541
21542         Nested interfaces need to be closed after their parents have been
21543         created. 
21544
21545         * interface.cs (InterfaceAttr): Put all the logic for computing
21546         the interface attribute here. 
21547
21548         (DefineInterface): Register our interface order with the
21549         RootContext or with the TypeContainer depending on the case.
21550
21551 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21552
21553         * cs-parser.jay: rework foreach statement to work with the new
21554         changes to the policy on SimpleNames.
21555
21556         * report.cs: support Stacktrace on warnings as well.
21557
21558         * makefile: drop --unsafe and /unsafe from the compile.
21559
21560 2002-03-13  Ravi Pratap  <ravi@ximian.com>
21561
21562         * ecore.cs (StandardConversionExists): Modify to take an Expression
21563         as the first parameter. Ensure we do null -> reference type conversion
21564         checking.
21565
21566         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
21567         temporary Expression objects.
21568
21569 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
21570
21571         * interface.cs: workaround bug in method overloading resolution
21572         (there is already a bugzilla bug for it).
21573
21574 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21575
21576         We could also solve this problem by having a separate path for
21577         performing type lookups, instead of DoResolve, we could have a
21578         ResolveType entry point, and only participating pieces of the
21579         production (simplename, deref, array) would implement this. 
21580
21581         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
21582         signal SimpleName to only resolve type names and not attempt to
21583         resolve anything else.
21584
21585         * expression.cs (Cast): Set the flag.
21586
21587         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
21588
21589         * class.cs: Only report 108 if there is no `new' modifier.
21590
21591         * cs-parser.jay: rework foreach statement to work with the new
21592         changes to the policy on SimpleNames.
21593         
21594         * report.cs: support Stacktrace on warnings as well.
21595
21596         * makefile: drop --unsafe and /unsafe from the compile.
21597
21598 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
21599
21600         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21601         lookups here, instead of doing that at parse time.  This means
21602         that our grammar will not introduce `LocalVariableReferences' as
21603         expressions at this point.  That solves the problem of code like
21604         this:
21605
21606         class X {
21607            static void Main ()
21608            { int X = 1;
21609             { X x = null }}}
21610
21611         This is only half the fix.  The full fix requires parameters to
21612         also be handled in this way.
21613
21614         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
21615         makes the use more obvious of the DeclSpace.  The
21616         ec.TypeContainer.TypeBuilder is now only used to pull the
21617         TypeBuilder for it.
21618
21619         My theory is that I can get rid of the TypeBuilder completely from
21620         the EmitContext, and have typecasts where it is used (from
21621         DeclSpace to where it matters).  
21622
21623         The only pending problem is that the code that implements Aliases
21624         is on TypeContainer, and probably should go in DeclSpace.
21625
21626         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21627         lookups here, instead of doing that at parse time.  This means
21628         that our grammar will not introduce `LocalVariableReferences' as
21629         expressions at this point.  That solves the problem of code like
21630         this:
21631
21632         class X {
21633            static void Main ()
21634            { int X = 1;
21635             { X x = null }}}
21636
21637         This is only half the fix.  The full fix requires parameters to
21638         also be handled in this way.
21639
21640         * class.cs (Property.DefineMethod): When implementing an interface
21641         method, set newslot, when implementing an abstract method, do not
21642         set the flag (before we tried never setting it, or always setting
21643         it, which is the difference).
21644         (Indexer.DefineMethod): same.
21645         (Method.DefineMethod): same.
21646
21647         * ecore.cs: Only set the status used flag if we get back a Field.
21648
21649         * attribute.cs: Temporary hack, so Paolo can keep working.
21650
21651 2002-03-08  Ravi Pratap  <ravi@ximian.com>
21652
21653         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
21654         the unmanaged type in the case we have a MarshalAs attribute.
21655
21656         (Resolve): Handle the case when we are parsing the special MarshalAs
21657         attribute [we need to store the unmanaged type to use later]
21658
21659         * typemanager.cs (marshal_as_attr_type): Built in type for the 
21660         MarshalAs Attribute.
21661
21662         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
21663         on parameters and accordingly set the marshalling info.
21664
21665 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
21666
21667         * class.cs: Optimizing slightly by removing redundant code after
21668         we switched to the `NoTypes' return value.
21669         (Property.DefineMethod): use NoTypes here too.
21670
21671         This fixes the bug I introduced in my last batch of changes.
21672
21673 2002-03-05  Ravi Pratap  <ravi@ximian.com>
21674
21675         * tree.cs (RecordEnum): Add. We now keep track of enums too.
21676
21677         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
21678         Enums since those are types too. 
21679
21680         * cs-parser.jay (enum_declaration): Record enums as we parse them.
21681
21682         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
21683         thanks to a call during the lookup process.
21684
21685 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
21686
21687         * statement.cs (Foreach): Lots of work to accomodate a particular
21688         kind of foreach statement that I had not kept in mind.  It is
21689         possible to have foreachs on classes that provide a GetEnumerator
21690         method that return objects that implement the "pattern" for using
21691         a foreach, there is no need to support GetEnumerator
21692         specifically. 
21693
21694         This is needed to compile nant.
21695
21696         * decl.cs: Only report 114 if the member is not `Finalize' and if
21697         the warning level is at least 2.
21698
21699         * class.cs: Moved the compare function from Method to
21700         MethodSignature. 
21701
21702         (MethodSignature.InheritableMemberSignatureCompare): Add new
21703         filter function that is used to extract inheritable methods from a
21704         class. 
21705
21706         (Method.Define): Use the new `inheritable_method_signature_filter'
21707         delegate
21708
21709         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
21710         command. 
21711
21712 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
21713
21714         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
21715
21716         * cs-parser.jay: Add opt_semicolon to the interface declaration.
21717
21718         * expression.cs: Pass location information to
21719         ConvertImplicitStandard. 
21720
21721         * class.cs: Added debugging code to track return values from
21722         interfaces. 
21723
21724 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
21725
21726         * expression.cs (Is.DoResolve): If either side of the `is' is an
21727         interface, do not flag the warning.
21728
21729         * ecore.cs (ImplicitReferenceConversion): We need a separate test
21730         for interfaces
21731
21732         * report.cs: Allow for --fatal to be used with --probe.
21733
21734         * typemanager.cs (NoTypes): Move the definition for the empty Type
21735         array here. 
21736
21737         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
21738         properties. 
21739         (TypeContainer.DefineProxy): New function used to proxy to parent
21740         implementations when implementing interfaces.
21741         (TypeContainer.ParentImplements): used to lookup if our parent
21742         implements a public function that is required by an interface.
21743         (TypeContainer.VerifyPendingMethods): Hook this up.
21744
21745         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
21746         `modules' and `assemblies' arraylists into arrays.  We only grow
21747         these are the very early start up of the program, so this improves
21748         the speedof LookupType (nicely measured).
21749
21750         * expression.cs (MakeByteBlob): Replaced unsafe code with
21751         BitConverter, as suggested by Paolo.
21752
21753         * cfold.cs (ConstantFold.Binary): Special case: perform constant
21754         folding of string concatenation, but if either side is a string,
21755         and the other is not, then return null, and let the runtime use
21756         the concatenation on the string plus the object (using
21757         `Object.ToString'). 
21758
21759 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
21760
21761         Constant Folding has been implemented now.
21762
21763         * expression.cs (Unary.Reduce): Do not throw an exception, catch
21764         the error instead on types that are not supported in one's
21765         complement. 
21766
21767         * constant.cs (Constant and all children): New set of functions to
21768         perform implict and explicit conversions.
21769
21770         * ecore.cs (EnumConstant): Implement the new functions to perform
21771         conversion by proxying to the child expression.
21772
21773         * codegen.cs: (ConstantCheckState): Constant evaluation has its
21774         own separate setting that can not be turned off from the command
21775         line using --unchecked or --checked and is only controlled using
21776         the checked/unchecked statements and expressions.  This setting is
21777         used by the constant folder to flag errors.
21778
21779         * expression.cs (CheckedExpr, UncheckedExpr): Set the
21780         ConstantCheckState as well.   
21781
21782         During Resolve, they also have to flag the state, because the
21783         constant folder runs completely in the Resolve phase.
21784
21785         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
21786         well.
21787
21788 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21789
21790         * cfold.cs: New file, this file contains the constant folder.
21791
21792         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
21793         argument to track whether we are using the resulting address to
21794         load or store a value and provide better error messages. 
21795
21796         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
21797         new AddressOf arguments.
21798
21799         * statement.cs (Foreach.EmitCollectionForeach): Update
21800
21801         * expression.cs (Argument.Emit): Call AddressOf with proper
21802         arguments to track usage.
21803
21804         (New.DoEmit): Call AddressOf with new arguments.
21805
21806         (Unary.Emit): Adjust AddressOf call.
21807
21808 2002-03-01  Ravi Pratap  <ravi@ximian.com>
21809
21810         * cs-parser.jay (member_access): Change the case for pre-defined types
21811         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
21812         this suggestion.
21813
21814         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
21815         a method body.
21816
21817         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
21818         essentially like methods and apply attributes like MethodImplOptions to them too.
21819
21820         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
21821         not being null.
21822
21823         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
21824         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
21825         is the DeclSpace.
21826
21827         * Update code everywhere accordingly.
21828
21829         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
21830
21831         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
21832
21833 2002-02-28  Ravi Pratap  <ravi@ximian.com>
21834
21835         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
21836         try performing lookups against those instead of jumping straight into using
21837         the 'using' clauses.
21838
21839         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
21840
21841         (LookupType): Perform lookups in implicit parents too.
21842
21843         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
21844         sequence as RootContext.LookupType. 
21845
21846         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
21847         the various cases of namespace lookups into this method.
21848
21849 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21850
21851         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
21852         in positional arguments)
21853
21854         * class.cs (Operator): Update the AllowedModifiers to contain
21855         extern. 
21856
21857         * cs-parser.jay: Update operator declaration to allow for the
21858         operator body to be empty.
21859
21860         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
21861         values. 
21862
21863 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
21864
21865         * class.cs (Method.Emit): Label parameters.
21866
21867         * driver.cs: Return 1 or 0 as the program exit code.
21868
21869 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
21870
21871         * expression.cs: Special case the `null' object when trying to
21872         auto-compute the type, as anything can be explicitly converted to
21873         that. 
21874
21875         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
21876         spotting this Paolo.
21877
21878         (Expression.ImplicitNumericConversion): Perform comparissions of
21879         the type using the underlying type in the case of an enumeration
21880         rather than using the enumeration type for the compare.
21881
21882         Cope with the underlying == type case, which is not possible to
21883         catch before. 
21884
21885         (Expression.ConvertNumericExplicit): Perform comparissions of
21886         the type using the underlying type in the case of an enumeration
21887         rather than using the enumeration type for the compare.
21888
21889         * driver.cs: If the user does not supply an extension, assume .exe
21890
21891         * cs-parser.jay (if_statement): Rewrote so that we can track the
21892         location for the if statement.
21893
21894         * expression.cs (Binary.ConstantFold): Only concat strings when
21895         the operation is "+", not everything ;-)
21896
21897         * statement.cs (Statement.EmitBoolExpression): Take a location
21898         argument. 
21899         (If, While, Do): Track location.
21900
21901         * expression.cs (Binary.ResolveOperator): In the object + string
21902         case, I was missing a call to ConvertImplicit
21903
21904 2002-02-25  Ravi Pratap  <ravi@ximian.com>
21905
21906         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
21907         Location arguments. Ensure we use RootContext.LookupType to do our work
21908         and not try to do a direct Type.GetType and ModuleBuilder.GetType
21909
21910         * interface.cs (PopulateMethod): Handle the type of the parameter being
21911         null gracefully.
21912
21913         * expression.cs (Invocation.BetterFunction): Handle the case when we 
21914         have a params method with no fixed arguments and a call is made with no
21915         arguments.
21916
21917 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
21918
21919         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
21920         the verbatim-string-literal
21921
21922         * support.cs (InternalParameters.ParameterModifier): handle null
21923         fixed parameters.
21924         (InternalParameters.ParameterType): ditto.
21925
21926         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
21927         duplicating the name of the variable parameter.
21928         (GetParameterByName): Fix bug where we were not looking up array
21929         paramters if they were the only present (thanks Paolo!).
21930         (GetParameterInfo): We only have an empty set of types if both
21931         fixed and array are set to null.
21932         (GetParameterInfo-idx): Handle FixedParameter == null
21933
21934         * cs-parser.jay: Handle the case where there is no catch
21935         statements (missing null test).
21936
21937 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
21938
21939         * driver.cs (MainDriver): Be conservative on our command line
21940         handling.
21941
21942         Catch DirectoryNotFoundException when calling GetFiles.
21943
21944         (SplitPathAndPattern): Used to split the input specification into
21945         a path and a pattern that we can feed to Directory.GetFiles.
21946
21947 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
21948
21949         * statement.cs (Fixed): Implement the last case of the Fixed
21950         statement (string handling).
21951
21952         * expression.cs (StringPtr): New class used to return a char * to
21953         a string;  Used by the Fixed statement.
21954
21955         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
21956
21957         * expression.cs (Binary.ResolveOperator): Remove redundant
21958         MemberLookup pn parent type.
21959         Optimize union call, we do not need a union if the types are the same.
21960         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
21961         type.
21962
21963         Specialize the use of MemberLookup everywhere, instead of using
21964         the default settings. 
21965
21966         (StackAlloc): Implement stackalloc keyword.
21967
21968         * cs-parser.jay: Add rule to parse stackalloc.
21969
21970         * driver.cs: Handle /h, /help, /?
21971
21972         * expression.cs (MakeByteBlob): Removed the hacks we had in place
21973         before we supported unsafe code.
21974
21975         * makefile: add --unsafe to the self compilation of mcs.
21976
21977 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
21978
21979         * expression.cs (PointerArithmetic): New class that is used to
21980         perform pointer arithmetic.
21981         (Binary.Resolve): Handle pointer arithmetic
21982         Handle pointer comparission.
21983         (ArrayPtr): Utility expression class that is used to take the
21984         address of an array.
21985
21986         (ElementAccess): Implement array access for pointers
21987
21988         * statement.cs (Fixed): Implement fixed statement for arrays, we
21989         are missing one more case before we are done.
21990
21991         * expression.cs (Indirection): Implement EmitAssign and set the
21992         ExprClass to Variable.  This allows pointer dereferences to be
21993         treated as variables, and to have values assigned to them.
21994
21995         * ecore.cs (Expression.StoreFromPtr): New utility function to
21996         store values dereferencing.
21997
21998 2002-02-20  Ravi Pratap  <ravi@ximian.com>
21999
22000         * expression.cs (Binary.ResolveOperator): Ensure that we are
22001         not trying to operate on a void type - this fixes the reported
22002         bug.
22003
22004         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
22005         the parent implementation is sealed.
22006
22007         * ../errors/cs0239.cs : Add.
22008
22009         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
22010
22011         * typemanager.cs (unverifiable_code_type): Corresponds to 
22012         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
22013         which have unsafe code in them.
22014
22015         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
22016         unsafe context.
22017
22018 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
22019
22020         * cs-tokenizer.cs: Add support for @"litreal strings"
22021
22022         Make tokenizer accept pre-processor directives
22023         on any column (remove the old C-like limitation). 
22024
22025         * rootcontext.cs (EmitCode): Emit any global attributes.
22026         (AddGlobalAttributes): Used to keep track of assembly attributes. 
22027
22028         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
22029
22030         * cs-parser.jay: Add support for global attributes.  
22031
22032 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
22033
22034         * expression.cs (Indirection): New helper class.  Unary will
22035         create Indirection classes to be able to implement the
22036         IMemoryLocation interface on it.
22037
22038 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
22039
22040         * cs-parser.jay (fixed_statement): reference the right statement.
22041
22042         * statement.cs (Fixed.Emit): Finish implementing the fixed
22043         statement for the &x case.
22044
22045 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
22046
22047         * class.cs (Property.Define, Method.Define): Remove newslot when
22048         `implementing'.  
22049
22050         * modifiers.cs: My use of NewSlot when `Abstract' was set was
22051         wrong.  NewSlot should only be used if the `new' keyword is present.
22052
22053         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
22054         locating our system dir.  Sorry about this.
22055
22056 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
22057
22058         * driver.cs (GetSystemDir): Compute correctly the location of our
22059         system assemblies.  I was using the compiler directory instead of
22060         the library directory.
22061
22062 2002-02-13  Ravi Pratap  <ravi@ximian.com>
22063
22064         * expression.cs (BetterFunction): Put back in what Miguel commented out
22065         since it is the correct fix. The problem is elsewhere ;-)
22066
22067         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
22068         parameters of the parms method are themselves compatible or not !
22069
22070         (StandardConversionExists): Fix very dangerous bug where we were forgetting
22071         to check that a class implements an interface before saying that an implicit
22072         conversion was allowed. Use ImplementsInterface to do the checking.
22073
22074 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
22075
22076         * class.cs (Method.Define): Track whether we are an explicit
22077         implementation or not.  And only call DefineMethodOverride if we
22078         are an explicit implementation.
22079
22080         (Property.DefineMethod): Ditto.
22081
22082 2002-02-11  Ravi Pratap  <ravi@ximian.com>
22083
22084         * expression.cs (BetterFunction): Catch hideous bug which was
22085          preventing us from detecting ambiguous calls due to implicit casts i.e
22086         cs0121.
22087
22088 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
22089
22090         * support.cs (Pair): Remove un-needed method.  I figured why I was
22091         getting the error in cs-parser.jay, the variable in a foreach loop
22092         is readonly, and the compiler does not really treat this as a variable.
22093
22094         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
22095         instead of EQUALS in grammar.  
22096
22097         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
22098
22099         * expression.cs (Unary.DoResolve): Check whether the argument is
22100         managed or not.
22101
22102 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
22103
22104         * support.cs: Api for Pair to set a value.  Despite the fact that
22105         the variables are public the MS C# compiler refuses to compile
22106         code that accesses the field if the variable is part of a foreach
22107         statement. 
22108
22109         * statement.cs (Fixed): Begin implementation of the fixed
22110         statement.
22111
22112         (Block.AddVariable): Return the VariableInfo on success and null
22113         on failure instead of true/false. 
22114
22115         * cs-parser.jay (foreach): Catch errors on variables already
22116         defined (we were ignoring this value before) and properly unwind
22117         the block hierarchy
22118
22119         (fixed_statement): grammar for the fixed statement.
22120
22121 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
22122
22123         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
22124         pointer types to be incretemented.
22125
22126         (SizeOf): Implement.
22127
22128         * cs-parser.jay (pointer_member_access): Implement
22129         expr->IDENTIFIER production.
22130
22131         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
22132         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
22133         on safe contexts.
22134
22135         (Unary): Implement indirection.
22136
22137         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
22138         use in non-unsafe context).
22139
22140         (SimpleName.DoResolve): Check for pointers in field access on safe
22141         contexts. 
22142
22143         (Expression.LoadFromPtr): Factor the load-indirect code in this
22144         function.  This was duplicated in UnboxCast and ParameterReference
22145
22146 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
22147
22148         * expression.cs (ComposedCast): report an error if a pointer cast
22149         is used in a safe region.
22150
22151         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
22152         pointer type casts in unsafe context.
22153
22154         * codegen.cs (EmitContext): Set up IsUnsafe.
22155
22156         * cs-parser.jay (non_expression_type): Add productions for pointer
22157         casts. 
22158
22159         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
22160         code.  We should not use force into static mode if the method is
22161         not virtual.  Fixes bug in MIS
22162
22163         * statement.cs (Do.Emit, While.Emit, For.Emit,
22164         Statement.EmitBoolExpression): Add support to Do and While to
22165         propagate infinite loop as `I do return' semantics.
22166
22167         Improve the For case to also test for boolean constants.
22168
22169         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
22170         to the list of attributes we can add.
22171
22172         Remove `EmitContext' argument.
22173
22174         * class.cs (Method.Define): Apply parameter attributes.
22175         (Constructor.Define): Apply parameter attributes.
22176         (MethodCore.LabelParameters): Move here the core of labeling
22177         parameters. 
22178
22179         * support.cs (ReflectionParameters.ParameterModifier,
22180         InternalParameters.ParameterModifier): Use IsByRef on the type and
22181         only return the OUT bit for these parameters instead of in/out/ref
22182         flags.
22183
22184         This is because I miss-understood things.  The ParameterInfo.IsIn
22185         and IsOut represent whether the parameter has the [In] and [Out]
22186         attributes set.  
22187
22188 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
22189
22190         * ecore.cs (FieldExpr.Emit): Release temporaries.
22191
22192         * assign.cs (LocalTemporary.Release): new function.
22193
22194         * codegen.cs (EmitContext.GetTemporaryStorage,
22195         EmitContext.FreeTemporaryStorage): Rework the way we deal with
22196         temporary storage.  Now we can "put back" localbuilders when we
22197         are done with them
22198
22199 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
22200
22201         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
22202         need to make a copy of the variable to generate verifiable code.
22203
22204 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
22205
22206         * driver.cs: Compute dynamically the system directory.
22207
22208         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
22209         Slower, but more generally useful.  Used by the abstract
22210         registering implementation. 
22211
22212         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
22213         the rules for the special rule on Type/instances.  First check if
22214         we have the same name, and if so, try that special static path
22215         rather than the instance path.
22216
22217 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
22218
22219         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
22220         for, while and if.
22221
22222         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
22223         Enum, ValueType, Delegate or Array for non-corlib compiles.
22224
22225         * cs-tokenizer.cs: Catch long identifiers (645)
22226
22227         * typemanager.cs (IndexerPropetyName): Ravi never tested this
22228         piece of code.
22229
22230         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
22231         fix, we were returning too early, so we were not registering
22232         pending methods from abstract classes.
22233
22234         Do not register pending methods if the class is abstract.
22235
22236         * expression.cs (Conditional.DoResolve): Report circular implicit
22237         conversions when we neecd to compute it for conditional
22238         expressions. 
22239
22240         (Is.DoResolve): If the expression is always of the provided type,
22241         flag warning 183.  If the expression can not ever be of the
22242         provided type flag warning 184.
22243
22244         * class.cs: Catch 169 as well.
22245
22246         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
22247         read. 
22248
22249 2002-01-18  Nick Drochak  <ndrochak@gol.com>
22250
22251         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
22252
22253 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
22254
22255         * interface.cs: (PopulateMethod): Check for pointers being defined
22256         only if the unsafe context is active.
22257         (PopulateProperty): ditto.
22258         (PopulateIndexer): ditto.
22259
22260         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
22261         specified.  If pointers are present, make sure that they are
22262         present in an unsafe context.
22263         (Constructor, Constructor.Define): ditto.
22264         (Field, Field.Define): ditto.
22265         (Property, Property.Define): ditto.
22266         (Event, Event.Define): ditto.
22267
22268         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
22269         hashtable if there are classes or structs defined.
22270
22271         * expression.cs (LocalVariableReference.DoResolve): Simplify this
22272         code, as the constant resolution moved.
22273
22274         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
22275         the metadata, so we can flag error 133. 
22276
22277         * decl.cs (MemberCore.UnsafeOK): New function to test that a
22278         pointer is being declared in an unsafe context.
22279
22280 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
22281
22282         * modifiers.cs (Modifiers.Check): Require a Location argument.
22283         Report error 227 for Unsafe use.
22284
22285         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
22286
22287         * statement.cs (For.Emit): If the test is null, then report that
22288         we do `return', as we wont reach anything afterwards.
22289
22290         (Switch.SwitchGoverningType): Track the expression that matched
22291         the conversion.
22292
22293         * driver.cs: Allow negative numbers as an error code to flag.
22294
22295         * cs-parser.jay: Handle 1551.
22296
22297         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
22298
22299 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
22300
22301         * cs-parser.jay: Report 1518 (type declaration can only contain
22302         class, struct, interface, enum or delegate)
22303
22304         (switch_label): Report 1523 (keywords `case' or `default' must
22305         preced code)
22306
22307         (opt_switch_sections): Report 1522 (empty switch)
22308
22309         * driver.cs: Report 1515 (response file specified multiple times)
22310         Report 1516 (Source file specified multiple times).
22311
22312         * expression.cs (Argument.Resolve): Signal 1510
22313
22314         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
22315         access not allowed in static code)
22316
22317 2002-01-11  Ravi Pratap  <ravi@ximian.com>
22318
22319         * typemanager.cs (IsPointerType): Utility method which we are going
22320         to need a lot.
22321
22322         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
22323         the object type, so we take care of that.
22324
22325         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
22326
22327         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
22328         added to non-params parameters :-)
22329
22330         * typemanager.cs (CSharpName): Include 'void' type too. 
22331
22332         (void_ptr_type): Include in the set of core types.
22333
22334         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
22335         duplicating code.
22336
22337         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
22338         an unsafe context.
22339
22340         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
22341         completely forgotten about it.
22342
22343 2002-01-10  Ravi Pratap  <ravi@ximian.com>
22344
22345         * cs-parser.jay (pointer_type): Add. This begins our implementation
22346         of parsing rules for unsafe code.
22347
22348         (unsafe_statement): Implement.
22349
22350         (embedded_statement): Modify to include the above.
22351
22352         * statement.cs (Unsafe): Implement new class for unsafe blocks.
22353
22354         * codegen.cs (EmitContext.InUnsafe): Add. This determines
22355         if the current context is an unsafe one.
22356
22357         * cs-parser.jay (local_variable_pointer_type): Since local variable types
22358         are handled differently, we need separate rules for them.
22359
22360         (local_variable_declaration): Update to use local_variable_pointer_type
22361         to allow variable declarations of unmanaged pointer types.
22362
22363         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
22364         in unsafe contexts.
22365
22366         * ../errors/cs0214.cs : Add.
22367
22368 2002-01-16  Nick Drochak  <ndrochak@gol.com>
22369
22370         * makefile: remove 'response' file when cleaning.
22371
22372 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
22373
22374         * cs-parser.jay: Report 1524.
22375
22376 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
22377
22378         * typemanager.cs (RegisterMethod): drop checking if we have
22379         registered this from here
22380
22381 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
22382
22383         * class.cs (Method.EmitDestructor): Implement calling our base
22384         destructor. 
22385
22386         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
22387         value of InFinally.
22388
22389         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
22390         this routine and will wrap the call in a try/catch block.  Deal
22391         with the case.
22392
22393 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
22394
22395         * ecore.cs (Expression.MemberLookup): instead of taking a
22396         parameter `same_type' that was used to tell whether we could
22397         access private members we compute our containing type from the
22398         EmitContext.
22399
22400         (FieldExpr): Added partial support for volatile fields.  This does
22401         not work for volatile fields exposed from assemblies, as I can not
22402         figure out how to extract the modreq from it.
22403
22404         Updated all the source files to use this.
22405
22406         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
22407         because it is referenced by MemberLookup very often. 
22408
22409 2002-01-09  Ravi Pratap  <ravi@ximian.com>
22410
22411         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
22412         TypeBuilder.GetCustomAttributes to retrieve what we need.
22413
22414         Get rid of redundant default_member_attr_type as this is the same as
22415         default_member_type which already exists.
22416
22417         * interface.cs, attribute.cs : Update accordingly.
22418
22419 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
22420
22421         * typemanager.cs: Enable IndexerPropertyName again.  It does not
22422         work for TYpeBuilders though.  Ravi, can you please fix this?
22423
22424         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
22425
22426         * expression.cs (Argument.Emit): Handle the case of ref objects
22427         being passed to ref functions;  
22428
22429         (ParameterReference.EmitLoad): Loads the content of the pointer
22430         without dereferencing.
22431
22432 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
22433
22434         * cs-tokenizer.cs: Implemented the pre-processing expressions.
22435
22436 2002-01-08  Ravi Pratap  <ravi@ximian.com>
22437
22438         * class.cs (Indexer.DefineMethod): Incorporate the interface
22439         type in the name of the method if we are doing explicit interface
22440         implementation.
22441
22442         * expression.cs (ConversionExists): Remove as it is completely obsolete.
22443
22444         (BetterConversion): Fix extremely trivial bug where we were referring to
22445         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
22446         again !
22447
22448         * ../errors/bug16.cs : Add although we have fixed it.
22449
22450 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
22451
22452         * expression.cs (BaseIndexer): Begin implementation.
22453
22454         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
22455
22456         * cs-parser.jay (indexer_declarator): Use qualified_identifier
22457         production directly to remove a shift/reduce, and implement
22458         explicit interface implementation.
22459
22460         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
22461         after a floating point suffix.
22462
22463         * expression.cs (DoNumericPromotions): Improved the conversion for
22464         uint/uint.  If we have a constant, we avoid doing a typecast to a
22465         larger type.
22466
22467         * class.cs (Indexer): Implement explicit interface implementation
22468         for indexers.
22469
22470 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
22471
22472         * class.cs: make the default instance constructor public and hidebysig.
22473
22474 2001-01-03  Ravi Pratap  <ravi@ximian.com>
22475
22476         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
22477         so we can call it from elsewhere.
22478
22479         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
22480         we emit it internally if the class has a defined indexer; otherwise the user
22481         emits it by decorating the class definition with the DefaultMemberAttribute.
22482
22483         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
22484         attribute is not used on a type which defines an indexer.
22485
22486         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
22487         character when we skip whitespace.
22488
22489         * ../errors/cs0646.cs : Add.
22490
22491 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
22492
22493         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
22494         again. 
22495
22496         * makefile: Add practical target `mcs3.exe' which builds the third
22497         generation compiler. 
22498
22499         * expression.cs (New): Fix structures constructor calling.
22500
22501         * class.cs (Property, Method, Indexer): Emit Final flag on the
22502         method if we are an interface implementation and we are not
22503         abstract. 
22504
22505         * ecore.cs (PropertyExpr): New public field `IsBase', tells
22506         whether this property is referencing a `base' method.
22507
22508         * expression.cs (Invocation.EmitCall): take an extra argument:
22509         is_base, this is used to determine whether the `call' or
22510         `callvirt' opcode should be used.
22511
22512
22513         * delegate.cs: update EmitCall.
22514
22515         * class.cs (Method.Define): Set NewSlot for the cases where we are
22516         not implementing an interface method.
22517
22518         (Property.Define): ditto.
22519
22520 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
22521
22522         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
22523         'r'.  Allows mcs to parse itself fully.
22524
22525 2002-01-02  Ravi Pratap  <ravi@ximian.com>
22526
22527         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
22528         of the number of initializers that require the InitializeArray method.
22529
22530         (CheckIndices): Store the Expression in all cases - not the plain value. Also
22531         update the above field where necessary.
22532
22533         (MakeByteBlob): Update accordingly.
22534
22535         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
22536         greater than 2.
22537
22538         (EmitDynamicInitializers): Update in accordance with the new optimization.
22539
22540         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
22541         same OpCode applies.
22542
22543         * cs-parser.jay : Fix some glaring errors I introduced.
22544
22545 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
22546
22547         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
22548         so that we can check for name clashes there too.
22549
22550         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
22551         for interface indexers.
22552
22553         * interfaces.cs (Define): Emit the default member attribute.
22554
22555         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
22556         variable was being referred to while setting the value ;-)
22557
22558 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
22559
22560         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
22561         byte-by-byte information when we know the data is zero.
22562
22563         Make the block always a multiple of 4, because
22564         DefineInitializedData has a bug.
22565
22566         * assign.cs: Fix, we should assign from the temporary, not from
22567         the source. 
22568
22569         * expression.cs (MakeByteBlob): Fix my incorrect code.
22570
22571 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
22572
22573         * typemanager.cs (EnumToUnderlying): This function is used to get
22574         the underlying type from an enumeration, because it does not
22575         always work. 
22576
22577         * constant.cs: Use the I4_S form for values between -128 and 127.
22578
22579         * statement.cs (Block.LookupLabel): Looks up a label.
22580         (Block): Drop support for labeled blocks.
22581
22582         (LabeledStatement): New kind of statement that represents a label
22583         only.
22584
22585         (Goto): Finally implement this bad boy.
22586
22587         * cs-parser.jay: Update to reflect new mechanism to implement
22588         labels.
22589
22590 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
22591
22592         * codegen.cs (EmitContext.This): a codegen property that keeps the
22593         a single instance of this instead of creating many different this
22594         instances. 
22595
22596         * delegate.cs (Delegate.DoResolve): Update to use the property;
22597
22598         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
22599
22600         * expression.cs (BaseAccess.DoResolve): Ditto.
22601
22602 2001-12-29  Ravi Pratap  <ravi@ximian.com>
22603
22604         * typemanager.cs (methodimpl_attr_type): Add to hold the type
22605         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
22606
22607         (InitCoreTypes): Update accordingly.
22608
22609         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
22610         so we can quickly store the state.
22611
22612         (ApplyAttributes): Set the correct implementation flags
22613         for InternalCall methods.
22614
22615 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
22616
22617         * expression.cs (EmitCall): if a method is not virtual, then do
22618         not use callvirt on it.
22619
22620         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
22621         user defined stuff) requires the use of stobj, which takes an
22622         address on the stack instead of an array and an index.  So emit
22623         the Ldelema operation for it.
22624
22625         (EmitStoreOpcode): Use stobj for valuetypes.
22626
22627         (UnaryMutator.EmitCode): Use the right 1 value depending on
22628         whether we are dealing with int64/uint64, float or doubles.
22629
22630         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
22631         constructors that I implemented last night.
22632
22633         (Constructor.IsDefault): Fix to work properly for static
22634         constructors.
22635
22636         * cs-parser.jay (CheckDef): report method signature errors.
22637         Update error number 103 to be 132.
22638
22639         * decl.cs: New AdditionResult enumeration value: MethodExists.
22640         Although we do this check for methods later on in the semantic
22641         analysis, catching repeated default constructors is so easy that
22642         we catch these here. 
22643
22644         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
22645         promotions code.
22646
22647         (ParameterReference.EmitAssign, Emit): handle
22648         bools as bytes.
22649
22650         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
22651         (ArrayAccess.EmitStoreOpcode): ditto.
22652
22653         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
22654
22655         * expression.cs (MakeByteBlob): Complete all the missing types
22656         (uint, short, ushort, byte, sbyte)
22657
22658         * class.cs: Only init instance field initializers on instance
22659         constructors. 
22660
22661         Rename `constructors' to instance_constructors. 
22662
22663         (TypeContainer.AddConstructor): Only add constructors to the list
22664         if it is not static.
22665
22666         Make sure that we handle default_static_constructor independently
22667         everywhere where we handle instance_constructors
22668
22669 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
22670
22671         * class.cs: Do not lookup or create a base initializer for a
22672         static constructor.
22673
22674         (ConstructorInitializer.Resolve): use the proper type to lookup
22675         for constructors.
22676
22677         * cs-parser.jay: Report error 1585 (modifiers between type and name).
22678
22679         * enum.cs, interface.cs: Remove CloseType, this is taken care by
22680         in DeclSpace. 
22681
22682         * decl.cs: CloseType is now an virtual method, the default
22683         implementation just closes this type.
22684
22685 2001-12-28  Ravi Pratap  <ravi@ximian.com>
22686
22687         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
22688         to PreserveSig by default. Also emit HideBySig on such methods.
22689
22690         Basically, set the defaults to standard values.
22691
22692         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
22693         argument, if candidate is better, it can't be worse than the best !
22694
22695         (Invocation): Re-write bits to differentiate between methods being
22696         applicable in their expanded form and their normal form - for params
22697         methods of course.
22698
22699         Get rid of use_standard everywhere as only standard conversions are allowed
22700         in overload resolution. 
22701
22702         More spec conformance.
22703
22704 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22705
22706         * driver.cs: Add --timestamp, to see where the compiler spends
22707         most of its time.
22708
22709         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
22710         `this' in static code.
22711
22712         (SimpleName.DoResolve): Implement in terms of a helper function
22713         that allows static-references to be passed upstream to
22714         MemberAccess.
22715
22716         (Expression.ResolveWithSimpleName): Resolve specially simple
22717         names when called by MemberAccess to implement the special
22718         semantics. 
22719
22720         (Expression.ImplicitReferenceConversion): Handle conversions from
22721         Null to reference types before others, as Null's type is
22722         System.Object. 
22723
22724         * expression.cs (Invocation.EmitCall): Handle the special case of
22725         calling methods declared on a reference type from a ValueType
22726         (Base classes System.Object and System.Enum)
22727
22728         (MemberAccess.Resolve): Only perform lookups on Enumerations if
22729         the left hand side is a TypeExpr, not on every enumeration. 
22730
22731         (Binary.Resolve): If types are reference types, then do a cast to
22732         object on operators != and == of both arguments.
22733
22734         * typemanager.cs (FindMembers): Extract instance and static
22735         members if requested.
22736
22737         * interface.cs (PopulateProperty): Use void_type instead of null
22738         as the return type for the setter method.
22739
22740         (PopulateIndexer): ditto.
22741
22742 2001-12-27  Ravi Pratap  <ravi@ximian.com>
22743
22744         * support.cs (ReflectionParameters): Fix minor bug where we
22745         were examining the wrong parameter for the ParamArray attribute.
22746
22747         Cope with requests for the type of the parameter at position
22748         greater than the params parameter's. We now return the element
22749         type of the params array as that makes more sense.
22750
22751         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
22752         accordingly as we no longer have to extract the element type
22753         ourselves.
22754
22755         (Invocation.OverloadResolve): Update.
22756
22757 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22758
22759         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
22760         against IEnumerator, test whether the return value is a descendant
22761         of the IEnumerator interface.
22762
22763         * class.cs (Indexer.Define): Use an auxiliary method to implement
22764         the other bits of the method definition.  Begin support for
22765         explicit interface implementation.
22766
22767         (Property.DefineMethod): Use TypeManager.void_type instead of null
22768         for an empty return value.
22769
22770 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
22771
22772         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
22773         dealing with a FieldExpr which is composed of a FieldBuilder, in
22774         the code path we did extract the constant, but we should have
22775         obtained the underlying value to be able to cast it (otherwise we
22776         end up in an infinite loop, this is what Ravi was running into).
22777
22778         (ArrayCreation.UpdateIndices): Arrays might be empty.
22779
22780         (MemberAccess.ResolveMemberAccess): Add support for section
22781         14.5.4.1 that deals with the special case of E.I when E is a type
22782         and something else, that I can be a reference to a static member.
22783
22784         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
22785         handle a particular array type to create byte blobs, it is just
22786         something we dont generate byteblobs for.
22787
22788         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
22789         arguments. 
22790
22791         * location.cs (Push): remove the key from the hashtable that we
22792         are about to add.   This happens for empty files.
22793
22794         * driver.cs: Dispose files after we have parsed them.
22795
22796         (tokenize): new function that only runs the tokenizer on its
22797         input, for speed testing.
22798
22799 2001-12-26  Ravi Pratap  <ravi@ximian.com>
22800
22801         * class.cs (Event.Define): Define the private field only if there
22802         are no accessors defined.
22803
22804         * expression.cs (ResolveMemberAccess): If there is no associated
22805         field with the event, that means we have an event defined with its
22806         own accessors and we should flag error cs0070 since transforming
22807         ourselves into a field is not valid in that case.
22808
22809         * ecore.cs (SimpleName.DoResolve): Same as above.
22810
22811         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
22812         and charset to sane values.
22813
22814 2001-12-25  Ravi Pratap  <ravi@ximian.com>
22815
22816         * assign.cs (DoResolve): Perform check on events only if they 
22817         are being accessed outside the declaring type.
22818
22819         * cs-parser.jay (event_declarations): Update rules to correctly
22820         set the type of the implicit parameter etc.
22821
22822         (add_accessor, remove_accessor): Set current local parameters.
22823
22824         * expression.cs (Binary): For delegate addition and subtraction,
22825         cast the return value from the method into the appropriate delegate
22826         type.
22827
22828 2001-12-24  Ravi Pratap  <ravi@ximian.com>
22829
22830         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
22831         of these as the workaround is unnecessary.
22832
22833         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
22834         delegate data - none of that is needed at all.
22835
22836         Re-write bits to extract the instance expression and the delegate method
22837         correctly.
22838
22839         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
22840         on delegates too.
22841
22842         * attribute.cs (ApplyAttributes): New method to take care of common tasks
22843         of attaching attributes instead of duplicating code everywhere.
22844
22845         * everywhere : Update code to do attribute emission using the above method.
22846
22847 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22848
22849         * expression.cs (IsParamsMethodApplicable): if there are not
22850         parameters, return immediately.
22851
22852         * ecore.cs: The 0 literal can be implicity converted to an enum
22853         type. 
22854
22855         (SimpleName.DoResolve): First lookup the type, then lookup the
22856         members. 
22857
22858         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
22859         want to get its address.  If the InstanceExpression is not
22860         addressable, store the result in a temporary variable, then get
22861         the address of it.
22862
22863         * codegen.cs: Only display 219 errors on warning level or above. 
22864
22865         * expression.cs (ArrayAccess): Make it implement the
22866         IMemoryLocation interface.
22867
22868         (Binary.DoResolve): handle the operator == (object a, object b)
22869         and operator != (object a, object b) without incurring into a
22870         BoxedCast (because 5 != o should never be performed).
22871
22872         Handle binary enumerator operators.
22873
22874         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
22875         value type, otherwise use Ldelem_ref.
22876
22877         Use precomputed names;
22878
22879         (AddressOf): Implement address of
22880
22881         * cs-parser.jay (labeled_statement): Fix recursive block
22882         addition by reworking the production.
22883
22884         * expression.cs (New.DoEmit): New has a special case:
22885                 
22886                  If we are dealing with a ValueType, we have a few
22887                  situations to deal with:
22888                 
22889                     * The target of New is a ValueType variable, that is
22890                       easy, we just pass this as the variable reference
22891                 
22892                     * The target of New is being passed as an argument,
22893                       to a boxing operation or a function that takes a
22894                       ValueType.
22895                 
22896                       In this case, we need to create a temporary variable
22897                       that is the argument of New.
22898
22899
22900 2001-12-23  Ravi Pratap  <ravi@ximian.com>
22901
22902         * rootcontext.cs (LookupType): Check that current_type is not null before
22903         going about looking at nested types.
22904
22905         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
22906         not implement the IAssignMethod interface any more.
22907
22908         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
22909         where we tranform them into FieldExprs if they are being resolved from within
22910         the declaring type.
22911
22912         * ecore.cs (SimpleName.DoResolve): Do the same here.
22913
22914         * assign.cs (DoResolve, Emit): Clean up code considerably. 
22915
22916         * ../errors/bug10.cs : Add.
22917
22918         * ../errors/cs0070.cs : Add.
22919
22920         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
22921
22922         * assign.cs : Get rid of EventIsLocal everywhere.
22923
22924 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22925
22926         * ecore.cs (ConvertIntLiteral): finished the implementation.
22927
22928         * statement.cs (SwitchLabel): Convert the value we are using as a
22929         key before looking up the table.
22930
22931 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22932
22933         * codegen.cs (EmitTopBlock): Require a Location argument now.
22934
22935         * cs-parser.jay (constructor_declarator): We need to setup
22936         current_local_parameters before we parse the
22937         opt_constructor_initializer, to allow the variables to be bound
22938         to the constructor arguments.
22939
22940         * rootcontext.cs (LookupType): First lookup nested classes in our
22941         class and our parents before we go looking outside our class.
22942
22943         * expression.cs (ConstantFold): Extract/debox the values at the
22944         beginnning. 
22945
22946         * rootcontext.cs (EmitCode): Resolve the constants first before we
22947         resolve the types.  This is not really needed, but it helps debugging.
22948
22949         * statement.cs: report location.
22950
22951         * cs-parser.jay: pass location to throw statement.
22952
22953         * driver.cs: Small bug fix.
22954
22955         * report.cs: Updated format to be 4-zero filled digits.
22956
22957 2001-12-22  Ravi Pratap  <ravi@ximian.com>
22958
22959         * expression.cs (CheckIndices): Fix minor bug where the wrong
22960         variable was being referred to ;-)
22961
22962         (DoEmit): Do not call EmitStaticInitializers when the 
22963         underlying type is System.Object.
22964
22965 2001-12-21  Ravi Pratap  <ravi@ximian.com>
22966
22967         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
22968         and do the usual workaround for SRE.
22969
22970         * class.cs (MyEventBuilder.EventType): New member to get at the type
22971         of the event, quickly.
22972
22973         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
22974
22975         * assign.cs (Assign.DoResolve): Handle the case when the target
22976         is an EventExpr and perform the necessary checks.
22977
22978         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
22979         interface.
22980
22981         (SimpleName.MemberStaticCheck): Include check for EventExpr.
22982
22983         (EventExpr): Set the type in the constructor itself since we 
22984         are meant to be born fully resolved.
22985
22986         (EventExpr.Define): Revert code I wrote earlier.
22987                 
22988         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
22989         instance expression is null. The instance expression is a This in that case
22990         or a null, depending on whether it is a static method or not.
22991
22992         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
22993         refers to more than one method.
22994
22995         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
22996         and accordingly flag errors.
22997
22998 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22999
23000         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
23001
23002 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
23003
23004         * location.cs (ToString): Provide useful rutine.
23005
23006 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
23007
23008         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
23009         objects, return the actual integral boxed.
23010
23011         * statement.cs (SwitchLabel): define an ILLabel for each
23012         SwitchLabel. 
23013
23014         (Switch.CheckSwitch): If the value is a Literal, extract
23015         the underlying literal.
23016
23017         Also in the unused hashtable we had, add the SwitchLabel so we can
23018         quickly look this value up.
23019
23020         * constant.cs: Implement a bunch of new constants.  Rewrite
23021         Literal based on this.  Made changes everywhere to adapt to this.
23022
23023         * expression.cs (Expression.MakeByteBlob): Optimize routine by
23024         dereferencing array only once, and also copes with enumrations.
23025
23026         bytes are two bytes wide, not one.
23027
23028         (Cast): Perform constant conversions.
23029
23030         * ecore.cs (TryImplicitIntConversion): Return literals instead of
23031         wrappers to the literals here.
23032
23033         * expression.cs (DoNumericPromotions): long literals can converted
23034         to ulong implicity (this is taken care of elsewhere, but I was
23035         missing this spot).
23036
23037         * ecore.cs (Expression.Literalize): Make the return type Literal,
23038         to improve type checking.
23039
23040         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
23041
23042 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
23043
23044         * literal.cs: Revert code from ravi that checked the bounds.  The
23045         bounds are sane by the definition of the type itself. 
23046
23047         * typemanager.cs: Fix implementation of ImplementsInterface.  We
23048         need to actually look up in our parent hierarchy for interfaces
23049         implemented. 
23050
23051         * const.cs: Use the underlying type for enumerations
23052
23053         * delegate.cs: Compute the basename for the delegate creation,
23054         that should fix the delegate test case, and restore the correct
23055         Type Lookup semantics in rootcontext
23056
23057         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
23058         referencing a nested type with the Reflection API is using the "+"
23059         sign. 
23060
23061         * cs-parser.jay: Do not require EOF token at the end.
23062
23063 2001-12-20  Ravi Pratap  <ravi@ximian.com>
23064
23065         * rootcontext.cs (LookupType): Concatenate type names with
23066         a '.' instead of a '+' The test suite passes again.
23067
23068         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
23069         field of the enumeration.
23070
23071         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
23072         the case when the member is an EventExpr.
23073
23074         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
23075         static has an associated instance expression.
23076
23077         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
23078
23079         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
23080
23081         * class.cs (Event.Define): Register event and perform appropriate checks
23082         for error #111.
23083
23084         We define the Add and Remove methods even if the use provides none because
23085         in that case, we provide default implementations ourselves.
23086
23087         Define a private field of the type of the event. This is done by the CSC compiler
23088         and we should be doing it too ;-)
23089
23090         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
23091         More methods we use in code we generate.
23092
23093         (multicast_delegate_type, delegate_type): Two separate types since the distinction
23094         is important.
23095
23096         (InitCoreTypes): Update accordingly for the above.
23097
23098         * class.cs (Event.Emit): Generate code for default accessors that we provide
23099
23100         (EmitDefaultMethod): Do the job in the above.
23101
23102         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
23103         appropriate place.
23104
23105 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
23106
23107         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
23108         builders even if we were missing one.
23109
23110         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
23111         pass the Basename as our class name instead of the Name.  The
23112         basename will be correctly composed for us.
23113
23114         * parameter.cs (Paramters): Now takes a Location argument.
23115
23116         * decl.cs (DeclSpace.LookupType): Removed convenience function and
23117         make all the code call directly LookupType in RootContext and take
23118         this chance to pass the Location information everywhere.
23119
23120         * Everywhere: pass Location information.
23121
23122 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
23123
23124         * class.cs (Constructor.Define): Updated way of detecting the
23125         length of the parameters.
23126
23127         (TypeContainer.DefineType): Use basename as the type name for
23128         nested types.
23129
23130         (TypeContainer.Define): Do not recursively define types here, as
23131         definition is taken care in order by the RootContext.
23132
23133         * tree.cs: Keep track of namespaces in a per-file basis.
23134
23135         * parameter.cs (Parameter.ComputeSignature): Update to use
23136         DeclSpace. 
23137
23138         (Parameters.GetSignature): ditto.
23139
23140         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
23141         instead of a TypeContainer.
23142
23143         (Interface.SemanticAnalysis): Use `this' instead of our parent to
23144         resolve names.  Because we need to be resolve in our context, not
23145         our parents.
23146
23147         * driver.cs: Implement response files.
23148
23149         * class.cs (TypeContainer.DefineType): If we are defined, do not
23150         redefine ourselves.
23151
23152         (Event.Emit): Emit the code for add/remove handlers.
23153         (Event.Define): Save the MethodBuilders for add/remove.
23154
23155         * typemanager.cs: Use pair here too.
23156
23157         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
23158         DictionaryEntry requires the first argument to be non-null.  
23159
23160         (enum_declaration): Compute full name for registering the
23161         enumeration.
23162
23163         (delegate_declaration): Instead of using
23164         formal_parameter_list, use opt_formal_parameter_list as the list
23165         can be empty.
23166
23167         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
23168         (EventParsing): New property that controls whether `add' and
23169         `remove' are returned as tokens or identifiers (for events);
23170
23171 2001-12-19  Ravi Pratap  <ravi@ximian.com>
23172
23173         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
23174         use MyEventBuilder only and let it wrap the real builder for us.
23175
23176         (MyEventBuilder): Revamp constructor etc.
23177
23178         Implement all operations that we perform on EventBuilder in precisely the same
23179         way here too.
23180
23181         (FindMembers): Update to use the EventBuilder member.
23182
23183         (Event.Emit): Update accordingly.
23184
23185 2001-12-18  Ravi Pratap  <ravi@ximian.com>
23186
23187         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
23188         by calling the appropriate methods.
23189
23190         (GetCustomAttributes): Make stubs as they cannot possibly do anything
23191         useful.
23192
23193         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
23194
23195 2001-12-17  Ravi Pratap  <ravi@ximian.com>
23196
23197         * delegate.cs (Delegate.Populate): Check that the return type
23198         and various parameters types are indeed accessible.
23199
23200         * class.cs (Constructor.Define): Same here.
23201
23202         (Field.Define): Ditto.
23203
23204         (Event.Define): Ditto.
23205
23206         (Operator.Define): Check that the underlying Method defined itself
23207         correctly - so it's MethodBuilder should not be null.
23208
23209         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
23210         expression happens to be null.
23211
23212         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
23213         members but as of now we don't seem to be able to do anything really useful with it.
23214
23215         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
23216         not the EventBuilder.
23217
23218 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
23219
23220         * cs-tokenizer.cs: Add support for defines.
23221         Add support for #if, #elif, #else, #endif
23222
23223         (eval_var): evaluates a variable.
23224         (eval): stubbed for evaluating functions.
23225
23226         * cs-parser.jay: Pass the defines information
23227
23228         * driver.cs: Add --define command line option.
23229
23230         * decl.cs: Move MemberCore here.
23231
23232         Make it the base class for DeclSpace.  This allows us to catch and
23233         report 108 and 109 for everything now.
23234
23235         * class.cs (TypeContainer.Define): Extract all the members
23236         before populating and emit the warning 108 (new keyword required
23237         to override) instead of having each member implement this.
23238
23239         (MemberCore.Define): New abstract method, we will be using this in
23240         the warning reporting engine in Populate.
23241
23242         (Operator.Define): Adjust to new MemberCore protocol. 
23243
23244         * const.cs (Const): This does not derive from Expression, it is a
23245         temporary object we use to create fields, it is a MemberCore. 
23246
23247         * class.cs (Method.Define): Allow the entry point to be in a
23248         specific class.
23249
23250         * driver.cs: Rewrite the argument handler to clean it up a bit.
23251
23252         * rootcontext.cs: Made it just an auxiliary namespace feature by
23253         making everything static.
23254
23255         * driver.cs: Adapt code to use RootContext type name instead of
23256         instance variable.
23257
23258         * delegate.cs: Remove RootContext argument.
23259
23260         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
23261         argument. 
23262
23263         * class.cs (Event.Define): The lookup can fail.
23264
23265         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
23266
23267         * expression.cs: Resolve the this instance before invoking the code.
23268
23269 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
23270
23271         * cs-parser.jay: Add a production in element_access that allows
23272         the thing to become a "type" reference.  This way we can parse
23273         things like "(string [])" as a type.
23274
23275         Note that this still does not handle the more complex rules of
23276         casts. 
23277
23278
23279         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
23280
23281         * ecore.cs: (CopyNewMethods): new utility function used to
23282         assemble the list of methods from running FindMembers.
23283
23284         (MemberLookup): Rework FindMembers so that 
23285
23286 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
23287
23288         * class.cs (TypeContainer): Remove Delegates who fail to be
23289         defined.
23290
23291         * delegate.cs (Populate): Verify that we dont get null return
23292         values.   TODO: Check for AsAccessible.
23293
23294         * cs-parser.jay: Use basename to emit error 574 (destructor should
23295         have the same name as container class), not the full name.
23296
23297         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
23298         possible representation.  
23299
23300         Also implements integer type suffixes U and L.
23301
23302 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
23303
23304         * expression.cs (ArrayCreation.DoResolve): We need to do the
23305         argument resolution *always*.
23306
23307         * decl.cs: Make this hold the namespace.  Hold the root context as
23308         well.
23309         (LookupType): Move here.
23310
23311         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
23312
23313         * location.cs (Row, Name): Fixed the code, it was always returning
23314         references to the first file.
23315
23316         * interface.cs: Register properties defined through interfaces.
23317
23318         * driver.cs: Add support for globbing on the command line
23319
23320         * class.cs (Field): Make it derive from MemberCore as well.
23321         (Event): ditto.
23322
23323 2001-12-15  Ravi Pratap  <ravi@ximian.com>
23324
23325         * class.cs (Event::Define): Check that the type of the event is a delegate
23326         type else flag error #66.
23327
23328         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
23329         same.
23330
23331         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
23332         values of EntryPoint, CharSet etc etc.
23333
23334         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
23335
23336         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
23337         be null and we should ignore this. I am not sure if this is really clean. Apparently,
23338         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
23339         which needs this to do its work.
23340
23341         * ../errors/cs0066.cs : Add.
23342
23343 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
23344
23345         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
23346         helper functions.
23347
23348         * class.cs: (MethodSignature.MethodSignature): Removed hack that
23349         clears out the parameters field.
23350         (MemberSignatureCompare): Cleanup
23351
23352         (MemberCore): New base class used to share code between MethodCore
23353         and Property.
23354
23355         (RegisterRequiredImplementations) BindingFlags.Public requires
23356         either BindingFlags.Instace or Static.  Use instance here.
23357
23358         (Property): Refactored code to cope better with the full spec.
23359
23360         * parameter.cs (GetParameterInfo): Return an empty array instead
23361         of null on error.
23362
23363         * class.cs (Property): Abstract or extern properties have no bodies.
23364
23365         * parameter.cs (GetParameterInfo): return a zero-sized array.
23366
23367         * class.cs (TypeContainer.MethodModifiersValid): Move all the
23368         method modifier validation to the typecontainer so we can reuse
23369         this on properties.
23370
23371         (MethodCore.ParameterTypes): return an empty sized array of types.
23372
23373         (Property.Define): Test property modifier validity.
23374
23375         Add tests for sealed/override too.
23376
23377         (Method.Emit): abstract or extern methods have no bodies.
23378
23379 2001-12-14  Ravi Pratap  <ravi@ximian.com>
23380
23381         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
23382         thing.
23383
23384         (Method::Define, ::Emit): Modify accordingly.
23385
23386         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
23387
23388         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
23389
23390         * makefile: Pass in /unsafe.
23391
23392 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
23393
23394         * class.cs (MakeKey): Kill routine.
23395
23396         * class.cs (TypeContainer.Define): Correctly define explicit
23397         method implementations (they require the full interface name plus
23398         the method name).
23399
23400         * typemanager.cs: Deply the PtrHashtable here and stop using the
23401         lame keys.  Things work so much better.
23402
23403         This of course broke everyone who depended on `RegisterMethod' to
23404         do the `test for existance' test.  This has to be done elsewhere.
23405
23406         * support.cs (PtrHashtable): A hashtable that avoid comparing with
23407         the object stupid Equals method (because, that like fails all over
23408         the place).  We still do not use it.
23409
23410         * class.cs (TypeContainer.SetRequiredInterface,
23411         TypeContainer.RequireMethods): Killed these two routines and moved
23412         all the functionality to RegisterRequiredImplementations.
23413
23414         (TypeContainer.RegisterRequiredImplementations): This routine now
23415         registers all the implementations required in an array for the
23416         interfaces and abstract methods.  We use an array of structures
23417         which can be computed ahead of time to reduce memory usage and we
23418         also assume that lookups are cheap as most classes will not
23419         implement too many interfaces.
23420
23421         We also avoid creating too many MethodSignatures.
23422
23423         (TypeContainer.IsInterfaceMethod): Update and optionally does not
23424         clear the "pending" bit if we find that there are problems with
23425         the declaration.
23426
23427         (TypeContainer.VerifyPendingMethods): Update to report errors of
23428         methods that look like implementations but are not.
23429
23430         (TypeContainer.Define): Add support for explicit interface method
23431         implementation. 
23432
23433 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
23434
23435         * typemanager.cs: Keep track of the parameters here instead of
23436         being a feature of the TypeContainer.
23437
23438         * class.cs: Drop the registration of parameters here, as
23439         InterfaceMethods are also interface declarations.
23440
23441         * delegate.cs: Register methods with the TypeManager not only with
23442         the TypeContainer.  This code was buggy.
23443
23444         * interface.cs: Full registation here.
23445
23446 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
23447
23448         * expression.cs: Remove reducer for binary expressions, it can not
23449         be done this way.
23450
23451         * const.cs: Put here the code that used to go into constant.cs
23452
23453         * constant.cs: Put here the code for constants, this is a new base
23454         class for Literals.
23455
23456         * literal.cs: Make Literal derive from Constant.
23457
23458 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
23459
23460         * statement.cs (Return.Emit): Report error 157 if the user
23461         attempts to return from a finally block.
23462
23463         (Return.Emit): Instead of emitting a return, jump to the end of
23464         the function.
23465
23466         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
23467         LocalBuilder to store the result of the function.  ReturnLabel is
23468         the target where we jump.
23469
23470
23471 2001-12-09  Radek Doulik  <rodo@ximian.com>
23472
23473         * cs-parser.jay: remember alias in current namespace
23474
23475         * ecore.cs (SimpleName::DoResolve): use aliases for types or
23476         namespaces
23477
23478         * class.cs (LookupAlias): lookup alias in my_namespace
23479
23480         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
23481         aliases hashtable
23482         (LookupAlias): lookup alias in this and if needed in parent
23483         namespaces
23484
23485 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
23486
23487         * support.cs: 
23488
23489         * rootcontext.cs: (ModuleBuilder) Made static, first step into
23490         making things static.  I need this to avoid passing the
23491         TypeContainer when calling ParameterType.
23492
23493         * support.cs (InternalParameters.ParameterType): Remove ugly hack
23494         that did string manipulation to compute the type and then call
23495         GetType.  Use Parameter.ParameterType instead.
23496
23497         * cs-tokenizer.cs: Consume the suffix for floating values.
23498
23499         * expression.cs (ParameterReference): figure out whether this is a
23500         reference parameter or not.  Kill an extra variable by computing
23501         the arg_idx during emission.
23502
23503         * parameter.cs (Parameters.GetParameterInfo): New overloaded
23504         function that returns whether a parameter is an out/ref value or not.
23505
23506         (Parameter.ParameterType): The type of the parameter (base,
23507         without ref/out applied).
23508
23509         (Parameter.Resolve): Perform resolution here.
23510         (Parameter.ExternalType): The full type (with ref/out applied).
23511
23512         * statement.cs (Using.Emit, Using.EmitExpression): Implement
23513         support for expressions on the using statement.
23514
23515 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
23516
23517         * statement.cs (Using.EmitLocalVariableDecls): Split the
23518         localvariable handling of the using statement.
23519
23520         (Block.EmitMeta): Keep track of variable count across blocks.  We
23521         were reusing slots on separate branches of blocks.
23522
23523         (Try.Emit): Emit the general code block, we were not emitting it. 
23524
23525         Check the type of the declaration to be an IDisposable or
23526         something that can be implicity converted to it. 
23527
23528         Emit conversions if required.
23529
23530         * ecore.cs (EmptyExpression): New utility class.
23531         (Expression.ImplicitConversionExists): New utility function.
23532
23533 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
23534
23535         * statement.cs (Using): Implement.
23536
23537         * expression.cs (LocalVariableReference): Support read only variables.
23538
23539         * statement.cs: Remove the explicit emit for the Leave opcode.
23540         (VariableInfo): Add a readonly field.
23541
23542 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
23543
23544         * ecore.cs (ConvCast): new class used to encapsulate the various
23545         explicit integer conversions that works in both checked and
23546         unchecked contexts.
23547
23548         (Expression.ConvertNumericExplicit): Use new ConvCast class to
23549         properly generate the overflow opcodes.
23550
23551 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23552
23553         * statement.cs: The correct type for the EmptyExpression is the
23554         element_type, not the variable type.  Ravi pointed this out.
23555
23556 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23557
23558         * class.cs (Method::Define): Handle PInvoke methods specially
23559         by using DefinePInvokeMethod instead of the usual one.
23560
23561         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
23562         above to do the task of extracting information and defining the method.
23563
23564 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23565
23566         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
23567         of the condition for string type.
23568
23569         (Emit): Move that here. 
23570
23571         (ArrayCreation::CheckIndices): Keep string literals in their expression
23572         form.
23573
23574         (EmitDynamicInitializers): Handle strings appropriately.
23575
23576 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23577
23578         * codegen.cs (EmitContext): Replace multiple variables with a
23579         single pointer to the current Switch statement.
23580
23581         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
23582         EmitContext.
23583
23584 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23585
23586         * statement.cs 
23587
23588         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
23589         default'.
23590
23591         (Foreach.Emit): Foreach on arrays was not setting
23592         up the loop variables (for break/continue).
23593
23594         (GotoCase): Semi-implented.
23595
23596 2001-12-03  Ravi Pratap  <ravi@ximian.com>
23597
23598         * attribute.cs (CheckAttribute): Handle system attributes by using
23599         Attribute.GetAttributes to examine information we need.
23600
23601         (GetValidPlaces): Same here.
23602
23603         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
23604
23605         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
23606
23607         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
23608
23609         (Method::Define): Set appropriate flags if we have a DllImport attribute.
23610
23611         (Method::Emit): Handle the case when we are a PInvoke method.
23612
23613 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23614
23615         * expression.cs: Use ResolveWithSimpleName on compound names.
23616
23617 2001-12-02  Ravi Pratap  <ravi@ximian.com>
23618
23619         * constant.cs (EmitConstant): Make sure we resolve the associated expression
23620         before trying to reduce it.
23621
23622         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
23623
23624         * constant.cs (LookupConstantValue): Implement.
23625
23626         (EmitConstant): Use the above in emitting the constant.
23627
23628         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
23629         that are user-defined by doing a LookupConstantValue on them.
23630
23631         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
23632         too, like above.
23633
23634 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
23635
23636         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
23637
23638         (BaseAccess.DoResolve): Implement.
23639
23640         (MemberAccess.DoResolve): Split this routine into a
23641         ResolveMemberAccess routine that can be used independently
23642
23643 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
23644
23645         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
23646         As that share bits of the implementation.  Is returns a boolean,
23647         while As returns the Type that is being probed.
23648
23649 2001-12-01  Ravi Pratap  <ravi@ximian.com>
23650
23651         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
23652         instead of a Literal - much easier.
23653
23654         (EnumInTransit): Remove - utterly useless :-)
23655
23656         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
23657
23658         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
23659
23660         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
23661         chain when we have no associated expression.
23662
23663 2001-11-30  Ravi Pratap  <ravi@ximian.com>
23664
23665         * constant.cs (Define): Use Location while reporting the errror.
23666
23667         Also emit a warning when 'new' is used and there is no inherited
23668         member to hide.
23669
23670         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
23671         populated.
23672
23673         (LookupEnumValue): Implement to lookup an enum member's value and define it
23674         if necessary.
23675
23676         (Populate): Re-write accordingly to use the above routine.
23677
23678 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
23679
23680         * expression.cs (This): Fix prototype for DoResolveLValue to
23681         override the base class DoResolveLValue.
23682
23683         * cs-parser.cs: Report errors cs574 and cs575 (destructor
23684         declarations) 
23685
23686         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
23687         (we need to load the address of the field here).  This fixes
23688         test-22. 
23689
23690         (FieldExpr.DoResolveLValue): Call the DoResolve
23691         function to initialize the Instance expression.
23692
23693         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
23694         correctly the GetEnumerator operation on a value type.
23695
23696         * cs-parser.jay: Add more simple parsing error catches.
23697
23698         * statement.cs (Switch): Add support for string switches.
23699         Handle null specially.
23700
23701         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
23702
23703 2001-11-28  Ravi Pratap  <ravi@ximian.com>
23704
23705         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
23706
23707         (declare_local_constant): New helper function.
23708
23709         * statement.cs (AddConstant): Keep a separate record of constants
23710
23711         (IsConstant): Implement to determine if a variable is a constant.
23712
23713         (GetConstantExpression): Implement.
23714
23715         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
23716
23717         * statement.cs (IsVariableDefined): Re-write.
23718
23719 2001-11-27  Ravi Pratap  <ravi@ximian.com>
23720
23721         * class.cs (TypeContainer::FindMembers): Look for constants
23722         in the case when we are looking for MemberTypes.Field
23723
23724         * expression.cs (MemberAccess::DoResolve): Check that in the
23725         case we are a FieldExpr and a Literal, we are not being accessed
23726         by an instance reference.
23727
23728         * cs-parser.jay (local_constant_declaration): Implement.
23729
23730         (declaration_statement): Implement for constant declarations.
23731
23732 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
23733
23734         * statement.cs (Switch): Catch double defaults.
23735
23736         (Switch): More work on the switch() statement
23737         implementation.  It works for integral values now, need to finish
23738         string support.
23739
23740
23741 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23742
23743         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
23744         integer literals into other integer literals.  To be used by
23745         switch. 
23746
23747 2001-11-24  Ravi Pratap  <ravi@ximian.com>
23748
23749         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
23750         some memory.
23751
23752         (EmitDynamicInitializers): Cope with the above since we extract data
23753         directly from ArrayData now.
23754
23755         (ExpectInitializers): Keep track of whether initializers are mandatory
23756         or not.
23757
23758         (Bounds): Make it a hashtable to prevent the same dimension being 
23759         recorded for every element in that dimension.
23760
23761         (EmitDynamicInitializers): Fix bug which prevented the Set array method
23762         from being found.
23763
23764         Also fix bug which was causing the indices to be emitted in the reverse
23765         order.
23766
23767 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23768
23769         * expression.cs (ArrayCreation): Implement the bits that Ravi left
23770         unfinished.  They do not work, because the underlying code is
23771         sloppy.
23772
23773 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23774
23775         * cs-parser.jay: Remove bogus fixme.
23776
23777         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
23778         on Switch statement.
23779
23780 2001-11-23  Ravi Pratap  <ravi@ximian.com>
23781
23782         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
23783         the same. 
23784
23785         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
23786         parameter. Apparently, any expression is allowed. 
23787
23788         (ValidateInitializers): Update accordingly.
23789
23790         (CheckIndices): Fix some tricky bugs thanks to recursion.
23791
23792         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
23793         I was being completely brain-dead.
23794
23795         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
23796         and re-write acordingly.
23797
23798         (DelegateInvocation): Re-write accordingly.
23799
23800         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
23801
23802         (MakeByteBlob): Handle types more correctly.
23803
23804         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
23805         initialization from expressions but it is incomplete because I am a complete
23806         Dodo :-|
23807
23808 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23809
23810         * statement.cs (If.Emit): Fix a bug that generated incorrect code
23811         on If.  Basically, we have to return `true' (ie, we do return to
23812         our caller) only if both branches of the if return.
23813
23814         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
23815         short-circuit operators, handle them as short circuit operators. 
23816
23817         (Cast.DoResolve): Resolve type.
23818         (Cast.Cast): Take an expression as the target type.
23819
23820         * cs-parser.jay (cast_expression): Remove old hack that only
23821         allowed a limited set of types to be handled.  Now we take a
23822         unary_expression and we resolve to a type during semantic
23823         analysis.
23824
23825         Use the grammar productions from Rhys to handle casts (this is
23826         not complete like Rhys syntax yet, we fail to handle that corner
23827         case that C# has regarding (-x), but we will get there.
23828
23829 2001-11-22  Ravi Pratap  <ravi@ximian.com>
23830
23831         * class.cs (EmitFieldInitializer): Take care of the case when we have a
23832         field which is an array type.
23833
23834         * cs-parser.jay (declare_local_variables): Support array initialization too.
23835
23836         * typemanager.cs (MakeKey): Implement.
23837
23838         (everywhere): Use the above appropriately.
23839
23840         * cs-parser.jay (for_statement): Update for array initialization while
23841         declaring variables.
23842
23843         * ecore.cs : The error message was correct, it's the variable's names that
23844         were misleading ;-) Make the code more readable.
23845
23846         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
23847         the correct type etc.
23848
23849         (ConvertExplicit): Handle Enum types by examining the underlying type.
23850
23851 2001-11-21  Ravi Pratap  <ravi@ximian.com>
23852
23853         * parameter.cs (GetCallingConvention): Always return
23854         CallingConventions.Standard for now.
23855
23856 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23857
23858         * expression.cs (Binary.ResolveOperator): Update the values of `l'
23859         and `r' after calling DoNumericPromotions.
23860
23861         * ecore.cs: Fix error message (the types were in the wrong order).
23862
23863         * statement.cs (Foreach.ProbeCollectionType): Need to pass
23864         BindingFlags.Instance as well 
23865
23866         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
23867         implicit int literal conversion in an empty cast so that we
23868         propagate the right type upstream.
23869
23870         (UnboxCast): new class used to unbox value types.
23871         (Expression.ConvertExplicit): Add explicit type conversions done
23872         by unboxing.
23873
23874         (Expression.ImplicitNumericConversion): Oops, forgot to test for
23875         the target type before applying the implicit LongLiterals to ULong
23876         literal cast.
23877
23878 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
23879
23880         * cs-parser.jay (for_statement): Reworked the way For works: now
23881         we declare manually any variables that are introduced in
23882         for_initializer to solve the problem of having out-of-band code
23883         emition (that is what got for broken).
23884
23885         (declaration_statement): Perform the actual variable declaration
23886         that used to be done in local_variable_declaration here.
23887
23888         (local_variable_declaration): Do not declare anything, just pass
23889         the information on a DictionaryEntry
23890
23891 2001-11-20  Ravi Pratap  <ravi@ximian.com>
23892
23893         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
23894         re-write of the logic to now make it recursive.
23895
23896         (UpdateIndices): Re-write accordingly.
23897
23898         Store element data in a separate ArrayData list in the above methods.
23899
23900         (MakeByteBlob): Implement to dump the array data into a byte array.
23901
23902 2001-11-19  Ravi Pratap  <ravi@ximian.com>
23903
23904         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
23905         into CheckIndices.
23906
23907         * constant.cs (Define): Implement.
23908
23909         (EmitConstant): Re-write fully.
23910
23911         Pass in location info.
23912
23913         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
23914         respectively.
23915
23916         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
23917         DictionaryEntry since we need location info too.
23918
23919         (constant_declaration): Update accordingly.
23920
23921         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
23922         code into another method : UpdateIndices.
23923
23924 2001-11-18  Ravi Pratap  <ravi@ximian.com>
23925
23926         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
23927         some type checking etc.
23928
23929 2001-11-17  Ravi Pratap  <ravi@ximian.com>
23930
23931         * expression.cs (ArrayCreation::ValidateInitializers): Implement
23932         bits to provide dimension info if the user skips doing that.
23933
23934         Update second constructor to store the rank correctly.
23935
23936 2001-11-16  Ravi Pratap  <ravi@ximian.com>
23937
23938         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
23939         and try to implement.
23940
23941         * ../errors/cs0150.cs : Add.
23942
23943         * ../errors/cs0178.cs : Add.
23944
23945 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
23946
23947         * statement.cs: Implement foreach on multi-dimensional arrays. 
23948
23949         * parameter.cs (Parameters.GetParameterByName): Also lookup the
23950         name of the params argument.
23951
23952         * expression.cs: Use EmitStoreOpcode to get the right opcode while
23953         initializing the array.
23954
23955         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
23956         we can use this elsewhere.
23957
23958         * statement.cs: Finish implementation of foreach for single
23959         dimension arrays.
23960
23961         * cs-parser.jay: Use an out-of-band stack to pass information
23962         around, I wonder why I need this.
23963
23964         foreach_block: Make the new foreach_block the current_block.
23965
23966         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
23967         function used to return a static Parameters structure.  Used for
23968         empty parameters, as those are created very frequently.
23969
23970         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
23971
23972 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23973
23974         * interface.cs : Default modifier is private, not public. The
23975         make verify test passes again.
23976
23977 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23978
23979         * support.cs (ReflectionParameters): Fix logic to determine
23980         whether the last parameter is a params one. Test 9 passes again.
23981
23982         * delegate.cs (Populate): Register the builders we define with
23983         RegisterParameterForBuilder. Test 19 passes again.
23984
23985         * cs-parser.jay (property_declaration): Reference $6 instead
23986         of $$ to get at the location.
23987
23988         (indexer_declaration): Similar stuff.
23989
23990         (attribute): Ditto.
23991
23992         * class.cs (Property): Register parameters for the Get and Set methods
23993         if they exist. Test 23 passes again.
23994
23995         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
23996         call to EmitArguments as we are sure there aren't any params arguments. 
23997         Test 32 passes again.
23998
23999         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
24000         IndexOutOfRangeException. 
24001
24002         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
24003         Test 33 now passes again.
24004
24005 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
24006
24007         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
24008         broke a bunch of things.  Will have to come up with a better way
24009         of tracking locations.
24010
24011         * statement.cs: Implemented foreach for single dimension arrays.
24012
24013 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
24014
24015         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
24016         an error.  This removes the lookup from the critical path.
24017
24018         * cs-parser.jay: Removed use of temporary_loc, which is completely
24019         broken. 
24020
24021 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
24022
24023         * support.cs (ReflectionParameters.ParameterModifier): Report
24024         whether the argument is a PARAMS argument or not.
24025
24026         * class.cs: Set the attribute `ParamArrayAttribute' on the
24027         parameter argument.
24028
24029         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
24030         and cons_param_array_attribute (ConstructorInfo for
24031         ParamArrayAttribute)., 
24032
24033         * codegen.cs: Emit the return using the `Return' statement, that
24034         way we can report the error correctly for missing return values. 
24035
24036         * class.cs (Method.Emit): Clean up.
24037
24038         * expression.cs (Argument.Resolve): Take another argument: the
24039         location where this argument is used.  Notice that this is not
24040         part of the "Argument" class as to reduce the size of the
24041         structure (we know the approximate location anyways).
24042
24043         Test if the argument is a variable-reference, if not, then
24044         complain with a 206.
24045
24046         (Argument.Emit): Emit addresses of variables.
24047
24048         (Argument.FullDesc): Simplify.
24049
24050         (Invocation.DoResolve): Update for Argument.Resolve.
24051
24052         (ElementAccess.DoResolve): ditto.
24053
24054         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
24055         method should be virtual, as this method is always virtual.
24056
24057         (NewDelegate.DoResolve): Update for Argument.Resolve.
24058
24059         * class.cs (ConstructorInitializer.DoResolve): ditto.
24060
24061         * attribute.cs (Attribute.Resolve): ditto.
24062
24063 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
24064
24065         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
24066
24067         * expression.cs (ParameterReference): Drop IStackStorage and implement
24068         IAssignMethod instead. 
24069
24070         (LocalVariableReference): ditto.
24071
24072         * ecore.cs (FieldExpr): Drop IStackStorage and implement
24073         IAssignMethod instead. 
24074
24075 2001-11-13  Miguel de Icaza <miguel@ximian.com>
24076
24077         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
24078         enumerations that are used in heavily used structures derive from
24079         byte in a laughable and pathetic attempt to reduce memory usage.
24080         This is the kind of pre-optimzations that you should not do at
24081         home without adult supervision.
24082
24083         * expression.cs (UnaryMutator): New class, used to handle ++ and
24084         -- separatedly from the other unary operators.  Cleans up the
24085         code, and kills the ExpressionStatement dependency in Unary.
24086
24087         (Unary): Removed `method' and `Arguments' from this class, making
24088         it smaller, and moving it all to SimpleCall, so I can reuse this
24089         code in other locations and avoid creating a lot of transient data
24090         strucutres when not required.
24091
24092         * cs-parser.jay: Adjust for new changes.
24093
24094 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
24095
24096         * enum.cs (Enum.Populate): If there is a failure during
24097         definition, return
24098
24099         * cs-parser.jay (opt_enum_base): we used to catch type errors
24100         here, but this is really incorrect.  The type error should be
24101         catched during semantic analysis.
24102
24103 2001-12-11  Ravi Pratap  <ravi@ximian.com>
24104
24105         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
24106         current_local_parameters as expected since I, in my stupidity, had forgotten
24107         to do this :-)
24108
24109         * attribute.cs (GetValidPlaces): Fix stupid bug.
24110
24111         * class.cs (Method::Emit): Perform check on applicability of attributes.
24112
24113         (Constructor::Emit): Ditto.
24114
24115         (Field::Emit): Ditto.
24116
24117         (Field.Location): Store location information.
24118
24119         (Property, Event, Indexer, Operator): Ditto.
24120
24121         * cs-parser.jay (field_declaration): Pass in location for each field.
24122
24123         * ../errors/cs0592.cs : Add.
24124
24125 2001-11-12  Ravi Pratap  <ravi@ximian.com>
24126
24127         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
24128
24129         (InitCoreTypes): Update accordingly.
24130
24131         (RegisterAttrType, LookupAttr): Implement.
24132
24133         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
24134         info about the same.
24135
24136         (Resolve): Update to populate the above as necessary.
24137
24138         (Error592): Helper.
24139
24140         (GetValidPlaces): Helper to the above.
24141
24142         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
24143
24144         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
24145
24146 2001-11-12  Ravi Pratap  <ravi@ximian.com>
24147
24148         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
24149
24150         * ../errors/cs0617.cs : Add.
24151
24152 2001-11-11  Ravi Pratap  <ravi@ximian.com>
24153
24154         * enum.cs (Emit): Rename to Populate to be more consistent with what
24155         we expect it to do and when exactly it is called.
24156
24157         * class.cs, rootcontext.cs : Update accordingly.
24158
24159         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
24160         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
24161
24162         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
24163
24164         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
24165         of a fieldinfo using the above, when dealing with a FieldBuilder.
24166
24167 2001-11-10  Ravi Pratap  <ravi@ximian.com>
24168
24169         * ../errors/cs0031.cs : Add.
24170
24171         * ../errors/cs1008.cs : Add.
24172
24173         * ../errrors/cs0543.cs : Add.
24174
24175         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
24176         enum type.
24177
24178         (FindMembers): Implement.
24179
24180         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
24181         enums and delegates too.
24182
24183         (enum_types): Rename to builder_to_enum.
24184
24185         (delegate_types): Rename to builder_to_delegate.
24186
24187         * delegate.cs (FindMembers): Implement.
24188
24189 2001-11-09  Ravi Pratap  <ravi@ximian.com>
24190
24191         * typemanager.cs (IsEnumType): Implement.
24192
24193         * enum.cs (Emit): Re-write parts to account for the underlying type
24194         better and perform checking etc.
24195
24196         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
24197         of the underlying type.
24198
24199         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
24200         value
24201
24202         * enum.cs (error31): Helper to report error #31.
24203
24204         * cs-parser.jay (enum_declaration): Store location of each member too.
24205
24206         * enum.cs (member_to_location): New hashtable. 
24207
24208         (AddEnumMember): Update location hashtable.
24209
24210         (Emit): Use the location of each member while reporting errors.
24211
24212 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
24213
24214         * cs-parser.jay: A for_initializer if is a
24215         local_variable_declaration really ammount to have an implicit
24216         block with the variable declaration and no initializer for for.
24217
24218         * statement.cs (For.Emit): Cope with null initializers.
24219
24220         This fixes the infinite loop on for initializers.
24221
24222 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
24223
24224         * enum.cs: More cleanup.
24225
24226         * ecore.cs: Remove dead code.
24227
24228         * class.cs (Property.Emit): More simplification.
24229         (Event.Emit): ditto.
24230
24231         Reworked to have less levels of indentation.
24232
24233 2001-11-08  Ravi Pratap  <ravi@ximian.com>
24234
24235         * class.cs (Property): Emit attributes.
24236
24237         (Field): Ditto.
24238
24239         (Event): Ditto.
24240
24241         (Indexer): Ditto.
24242
24243         (Operator): Ditto.
24244
24245         * enum.cs (Emit): Ditto.
24246
24247         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
24248         Enums too.
24249
24250         * class.cs (Field, Event, etc.): Move attribute generation into the
24251         Emit method everywhere.
24252
24253         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
24254         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
24255         as we had no way of defining nested enums !
24256
24257         * rootcontext.cs : Adjust code accordingly.
24258
24259         * typemanager.cs (AddEnumType): To keep track of enum types separately.
24260
24261 2001-11-07  Ravi Pratap  <ravi@ximian.com>
24262
24263         * expression.cs (EvalConstantExpression): Move into ecore.cs
24264
24265         * enum.cs (Enum): Rename some members and make them public and readonly
24266         according to our convention.
24267
24268         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
24269         nothing else.
24270
24271         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
24272
24273         (Enum::Emit): Write a simple version for now which doesn't try to compute
24274         expressions. I shall modify this to be more robust in just a while.
24275
24276         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
24277
24278         (TypeContainer::CloseType): Create the Enum types too.
24279
24280         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
24281
24282         * expression.cs (EvalConstantExpression): Get rid of completely.
24283
24284         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
24285         user-defined values and other cases.
24286
24287         (IsValidEnumLiteral): Helper function.
24288
24289         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
24290         out there in the case we had a literal FieldExpr.
24291
24292         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
24293
24294         (Literalize): Revamp a bit to take two arguments.
24295
24296         (EnumLiteral): New class which derives from Literal to wrap enum literals.
24297
24298 2001-11-06  Ravi Pratap  <ravi@ximian.com>
24299
24300         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
24301
24302         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
24303
24304         (Resolve): Use the above to ensure we have proper initializers.
24305
24306 2001-11-05  Ravi Pratap  <ravi@ximian.com>
24307
24308         * expression.cs (Expression::EvalConstantExpression): New method to 
24309         evaluate constant expressions.
24310
24311         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
24312
24313 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
24314
24315         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
24316         in an array.
24317
24318         (Binary.ResolveOperator): Handle operator != (object a, object b)
24319         and operator == (object a, object b);
24320
24321         (Binary.DoNumericPromotions): Indicate whether the numeric
24322         promotion was possible.
24323
24324         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
24325         Implement.  
24326
24327         Made the ArrayAccess implement interface IAssignMethod instead of
24328         IStackStore as the order in which arguments are passed reflects
24329         this.
24330
24331         * assign.cs: Instead of using expr.ExprClass to select the way of
24332         assinging, probe for the IStackStore/IAssignMethod interfaces.
24333
24334         * typemanager.cs: Load InitializeArray definition.
24335
24336         * rootcontext.cs (RootContext.MakeStaticData): Used to define
24337         static data that can be used to initialize arrays. 
24338
24339 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
24340
24341         * expression.cs: Handle operator== and operator!= for booleans.
24342
24343         (Conditioal.Reduce): Implement reducer for the ?: operator.
24344
24345         (Conditional.Resolve): Implement dead code elimination.
24346
24347         (Binary.Resolve): Catch string literals and return a new
24348         concatenated string.
24349
24350         (Unary.Reduce): Implement reduction of unary expressions.
24351
24352         * ecore.cs: Split out the expression core handling here.
24353
24354         (Expression.Reduce): New method used to perform constant folding
24355         and CSE.  This is needed to support constant-expressions. 
24356
24357         * statement.cs (Statement.EmitBoolExpression): Pass true and false
24358         targets, and optimize for !x.
24359
24360 2001-11-04  Ravi Pratap  <ravi@ximian.com>
24361
24362         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
24363         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
24364         set custom atttributes.
24365
24366         * literal.cs (Literal::GetValue): New abstract method to return the actual
24367         value of the literal, cast as an object.
24368
24369         (*Literal): Implement GetValue method.
24370
24371         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
24372         expressions to the arraylist but objects of type Argument.
24373
24374         * class.cs (TypeContainer::Emit): Emit our attributes too.
24375
24376         (Method::Emit, Constructor::Emit): Ditto.
24377
24378         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
24379         to be ignoring earlier.
24380
24381 2001-11-03  Ravi Pratap  <ravi@ximian.com>
24382
24383         * attribute.cs (AttributeSection::Define): Implement to do the business
24384         of constructing a CustomAttributeBuilder.
24385
24386         (Attribute): New trivial class. Increases readability of code.  
24387
24388         * cs-parser.jay : Update accordingly.
24389
24390         (positional_argument_list, named_argument_list, named_argument): New rules
24391
24392         (attribute_arguments): Use the above so that we are more correct.
24393
24394 2001-11-02  Ravi Pratap  <ravi@ximian.com>
24395
24396         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
24397         to perform all checks for a method with a params parameter.
24398
24399         (Invocation::OverloadResolve): Update to use the above method and therefore
24400         cope correctly with params method invocations.
24401
24402         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
24403         params too.
24404
24405         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
24406         constructors in our parent too because we can't afford to miss out on 
24407         protected ones ;-)
24408
24409         * attribute.cs (AttributeSection): New name for the class Attribute
24410
24411         Other trivial changes to improve readability.
24412
24413         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
24414         use the new class names.
24415
24416 2001-11-01  Ravi Pratap  <ravi@ximian.com>
24417
24418         * class.cs (Method::Define): Complete definition for params types too
24419
24420         (Indexer::Define): Ditto.
24421
24422         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
24423         Cope everywhere with a request for info about the array parameter.
24424
24425 2001-11-01  Ravi Pratap  <ravi@ximian.com>
24426
24427         * tree.cs (RecordNamespace): Fix up to check for the correct key.
24428
24429         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
24430         local_variable_type to extract the string corresponding to the type.
24431
24432         (local_variable_type): Fixup the action to use the new helper method.
24433
24434         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
24435         go.
24436
24437         * expression.cs : Clean out code which uses the above.
24438
24439 2001-10-31  Ravi Pratap  <ravi@ximian.com>
24440
24441         * typemanager.cs (RegisterMethod): Check if we already have an existing key
24442         and bale out if necessary by returning a false.
24443
24444         (RegisterProperty): Ditto.
24445
24446         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
24447         and print out appropriate error messages.
24448
24449         * interface.cs (everywhere): Ditto.
24450
24451         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
24452         location to constructor.
24453
24454         * class.cs (Property, Event, Indexer): Update accordingly.
24455
24456         * ../errors/cs111.cs : Added.
24457
24458         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
24459         of a method, as laid down by the spec.
24460
24461         (Invocation::OverloadResolve): Use the above method.
24462
24463 2001-10-31  Ravi Pratap  <ravi@ximian.com>
24464
24465         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
24466         now take a TypeContainer and a Parameters object.
24467
24468         (ParameterData): Modify return type of ParameterModifier method to be 
24469         Parameter.Modifier and not a string.
24470
24471         (ReflectionParameters, InternalParameters): Update accordingly.
24472
24473         * expression.cs (Argument::GetParameterModifier): Same here.
24474
24475         * support.cs (InternalParameters::ParameterType): Find a better way of determining
24476         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
24477         symbol in it at all so maybe this is only for now.
24478
24479 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24480
24481         * support.cs (InternalParameters): Constructor now takes an extra argument 
24482         which is the actual Parameters class.
24483
24484         (ParameterDesc): Update to provide info on ref/out modifiers.
24485
24486         * class.cs (everywhere): Update call to InternalParameters to pass in
24487         the second argument too.
24488
24489         * support.cs (ParameterData): Add ParameterModifier, which is a method 
24490         to return the modifier info [ref/out etc]
24491
24492         (InternalParameters, ReflectionParameters): Implement the above.
24493
24494         * expression.cs (Argument::ParameterModifier): Similar function to return
24495         info about the argument's modifiers.
24496
24497         (Invocation::OverloadResolve): Update to take into account matching modifiers 
24498         too.
24499
24500         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
24501         a new SetFormalParameters object which we pass to InternalParameters.
24502
24503 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24504
24505         * expression.cs (NewArray): Merge into the ArrayCreation class.
24506
24507 2001-10-29  Ravi Pratap  <ravi@ximian.com>
24508
24509         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
24510         NewUserdefinedArray into one as there wasn't much of a use in having
24511         two separate ones.
24512
24513         * expression.cs (Argument): Change field's name to ArgType from Type.
24514
24515         (Type): New readonly property which returns the proper type, taking into 
24516         account ref/out modifiers.
24517
24518         (everywhere): Adjust code accordingly for the above.
24519
24520         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
24521         whether we are emitting for a ref or out parameter.
24522
24523         * expression.cs (Argument::Emit): Use the above field to set the state.
24524
24525         (LocalVariableReference::Emit): Update to honour the flag and emit the
24526         right stuff.
24527
24528         * parameter.cs (Attributes): Set the correct flags for ref parameters.
24529
24530         * expression.cs (Argument::FullDesc): New function to provide a full desc.
24531
24532         * support.cs (ParameterData): Add method ParameterDesc to the interface.
24533
24534         (ReflectionParameters, InternalParameters): Implement the above method.
24535
24536         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
24537         reporting errors.
24538
24539         (Invocation::FullMethodDesc): Ditto. 
24540
24541 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
24542
24543         * cs-parser.jay: Add extra production for the second form of array
24544         creation. 
24545
24546         * expression.cs (ArrayCreation): Update to reflect the above
24547         change. 
24548
24549         * Small changes to prepare for Array initialization.
24550
24551 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
24552
24553         * typemanager.cs (ImplementsInterface): interface might be null;
24554         Deal with this problem;
24555
24556         Also, we do store negative hits on the cache (null values), so use
24557         this instead of calling t.GetInterfaces on the type everytime.
24558
24559 2001-10-28  Ravi Pratap  <ravi@ximian.com>
24560
24561         * typemanager.cs (IsBuiltinType): New method to help determine the same.
24562
24563         * expression.cs (New::DoResolve): Get rid of array creation code and instead
24564         split functionality out into different classes.
24565
24566         (New::FormArrayType): Move into NewBuiltinArray.
24567
24568         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
24569         quite useless.
24570
24571         (NewBuiltinArray): New class to handle creation of built-in arrays.
24572
24573         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
24574         account creation of one-dimensional arrays.
24575
24576         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
24577
24578         (NewUserdefinedArray::DoResolve): Implement.
24579
24580         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
24581
24582         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
24583         we maintain inside the TypeManager. This is necessary to perform lookups on the
24584         module builder.
24585
24586         (LookupType): Update to perform GetType on the module builders too.     
24587
24588         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
24589
24590         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
24591
24592 2001-10-23  Ravi Pratap  <ravi@ximian.com>
24593
24594         * expression.cs (New::DoResolve): Implement guts of array creation.
24595
24596         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
24597
24598 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
24599
24600         * expression.cs: Fix bug I introduced lsat night that broke
24601         Delegates. 
24602
24603         (Expression.Resolve): Report a 246 error (can not resolve name)
24604         if we find a SimpleName in the stream.
24605
24606         (Expression.ResolveLValue): Ditto.
24607
24608         (Expression.ResolveWithSimpleName): This function is a variant of
24609         ResolveName, this one allows SimpleNames to be returned without a
24610         warning.  The only consumer of SimpleNames is MemberAccess
24611
24612 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
24613
24614         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
24615         might arrive here.  I have my doubts that this is correct.
24616
24617         * statement.cs (Lock): Implement lock statement.
24618
24619         * cs-parser.jay: Small fixes to support `lock' and `using'
24620
24621         * cs-tokenizer.cs: Remove extra space
24622
24623         * driver.cs: New flag --checked, allows to turn on integer math
24624         checking. 
24625
24626         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
24627         Threading.Monitor.Exit 
24628
24629 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
24630
24631         * expression.cs (IndexerAccess::DoResolveLValue): Set the
24632         Expression Class to be IndexerAccess.
24633
24634         Notice that Indexer::DoResolve sets the eclass to Value.
24635
24636 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
24637
24638         * class.cs (TypeContainer::Emit): Emit code for indexers.
24639
24640         * assign.cs (IAssignMethod): New interface implemented by Indexers
24641         and Properties for handling assignment.
24642
24643         (Assign::Emit): Simplify and reuse code. 
24644
24645         * expression.cs (IndexerAccess, PropertyExpr): Implement
24646         IAssignMethod, clean up old code. 
24647
24648 2001-10-22  Ravi Pratap  <ravi@ximian.com>
24649
24650         * typemanager.cs (ImplementsInterface): New method to determine if a type
24651         implements a given interface. Provides a nice cache too.
24652
24653         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
24654         method.
24655
24656         (ConvertReferenceExplicit): Ditto.
24657
24658         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
24659         various methods, with correct names etc.
24660
24661         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
24662         Operator.UnaryNegation.
24663
24664         * cs-parser.jay (operator_declarator): Be a little clever in the case where
24665         we have a unary plus or minus operator.
24666
24667         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
24668         UnaryMinus.
24669
24670         * everywhere : update accordingly.
24671
24672         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
24673         respectively.
24674
24675         * class.cs (Method::Define): For the case where we are implementing a method
24676         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
24677         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
24678
24679 2001-10-21  Ravi Pratap  <ravi@ximian.com>
24680
24681         * interface.cs (FindMembers): Implement to work around S.R.E
24682         lameness.
24683
24684         * typemanager.cs (IsInterfaceType): Implement.
24685
24686         (FindMembers): Update to handle interface types too.
24687
24688         * expression.cs (ImplicitReferenceConversion): Re-write bits which
24689         use IsAssignableFrom as that is not correct - it doesn't work.
24690
24691         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
24692         and accordingly override EmitStatement.
24693
24694         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
24695         using the correct logic :-)
24696
24697 2001-10-19  Ravi Pratap  <ravi@ximian.com>
24698
24699         * ../errors/cs-11.cs : Add to demonstrate error -11 
24700
24701 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
24702
24703         * assign.cs (Assign::Resolve): Resolve right hand side first, and
24704         then pass this as a hint to ResolveLValue.
24705
24706         * expression.cs (FieldExpr): Add Location information
24707
24708         (FieldExpr::LValueResolve): Report assignment to readonly
24709         variable. 
24710
24711         (Expression::ExprClassFromMemberInfo): Pass location information.
24712
24713         (Expression::ResolveLValue): Add new method that resolves an
24714         LValue. 
24715
24716         (Expression::DoResolveLValue): Default invocation calls
24717         DoResolve. 
24718
24719         (Indexers): New class used to keep track of indexers in a given
24720         Type. 
24721
24722         (IStackStore): Renamed from LValue, as it did not really describe
24723         what this did.  Also ResolveLValue is gone from this interface and
24724         now is part of Expression.
24725
24726         (ElementAccess): Depending on the element access type
24727
24728         * typemanager.cs: Add `indexer_name_type' as a Core type
24729         (System.Runtime.CompilerServices.IndexerNameAttribute)
24730
24731         * statement.cs (Goto): Take a location.
24732
24733 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24734
24735         * delegate.cs (Delegate::VerifyDelegate): New method to verify
24736         if two delegates are compatible.
24737
24738         (NewDelegate::DoResolve): Update to take care of the case when
24739         we instantiate a delegate from another delegate.
24740
24741         * typemanager.cs (FindMembers): Don't even try to look up members
24742         of Delegate types for now.
24743
24744 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24745
24746         * delegate.cs (NewDelegate): New class to take care of delegate
24747         instantiation.
24748
24749         * expression.cs (New): Split the delegate related code out into 
24750         the NewDelegate class.
24751
24752         * delegate.cs (DelegateInvocation): New class to handle delegate 
24753         invocation.
24754
24755         * expression.cs (Invocation): Split out delegate related code into
24756         the DelegateInvocation class.
24757
24758 2001-10-17  Ravi Pratap  <ravi@ximian.com>
24759
24760         * expression.cs (New::DoResolve): Implement delegate creation fully
24761         and according to the spec.
24762
24763         (New::DoEmit): Update to handle delegates differently.
24764
24765         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
24766         because of which we were printing out arguments in reverse order !
24767
24768         * delegate.cs (VerifyMethod): Implement to check if the given method
24769         matches the delegate.
24770
24771         (FullDelegateDesc): Implement.
24772
24773         (VerifyApplicability): Implement.
24774
24775         * expression.cs (Invocation::DoResolve): Update to accordingly handle
24776         delegate invocations too.
24777
24778         (Invocation::Emit): Ditto.
24779
24780         * ../errors/cs1593.cs : Added.
24781
24782         * ../errors/cs1594.cs : Added.
24783
24784         * delegate.cs (InstanceExpression, TargetMethod): New properties.
24785
24786 2001-10-16  Ravi Pratap  <ravi@ximian.com>
24787
24788         * typemanager.cs (intptr_type): Core type for System.IntPtr
24789
24790         (InitCoreTypes): Update for the same.
24791
24792         (iasyncresult_type, asynccallback_type): Ditto.
24793
24794         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
24795         correct.
24796
24797         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
24798         too.
24799
24800         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
24801         the builders for the 4 members of a delegate type :-)
24802
24803         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
24804         type.
24805
24806         * expression.cs (New::DoResolve): Implement guts for delegate creation.
24807
24808         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
24809
24810 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
24811
24812         * statement.cs (Break::Emit): Implement.   
24813         (Continue::Emit): Implement.
24814
24815         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24816         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24817         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24818         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
24819         end loop
24820
24821         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
24822         properties that track the label for the current loop (begin of the
24823         loop and end of the loop).
24824
24825 2001-10-15  Ravi Pratap  <ravi@ximian.com>
24826
24827         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
24828         use of emitting anything at all.
24829
24830         * class.cs, rootcontext.cs : Get rid of calls to the same.
24831
24832         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
24833
24834         (Populate): Define the constructor correctly and set the implementation
24835         attributes.
24836
24837         * typemanager.cs (delegate_types): New hashtable to hold delegates that
24838         have been defined.
24839
24840         (AddDelegateType): Implement.
24841
24842         (IsDelegateType): Implement helper method.
24843
24844         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
24845
24846         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
24847         and accordingly handle it.
24848
24849         * delegate.cs (Populate): Take TypeContainer argument.
24850         Implement bits to define the Invoke method. However, I still haven't figured out
24851         how to take care of the native int bit :-(
24852
24853         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
24854         Qualify the name of the delegate, not its return type !
24855
24856         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
24857         conversion.
24858
24859         (StandardConversionExists): Checking for array types turns out to be recursive.
24860
24861         (ConvertReferenceExplicit): Implement array conversion.
24862
24863         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
24864
24865 2001-10-12  Ravi Pratap  <ravi@ximian.com>
24866
24867         * cs-parser.jay (delegate_declaration): Store the fully qualified
24868         name as it is a type declaration.
24869
24870         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
24871         readonly.
24872
24873         (DefineDelegate): Renamed from Define. Does the same thing essentially,
24874         as TypeContainer::DefineType.
24875
24876         (Populate): Method in which all the definition of the various methods (Invoke)
24877         etc is done.
24878
24879         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
24880         see.
24881
24882         (CloseDelegate): Finally creates the delegate.
24883
24884         * class.cs (TypeContainer::DefineType): Update to define delegates.
24885         (Populate, Emit and CloseType): Do the same thing here too.
24886
24887         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
24888         delegates in all these operations.
24889
24890 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
24891
24892         * expression.cs: LocalTemporary: a new expression used to
24893         reference a temporary that has been created.
24894
24895         * assign.cs: Handle PropertyAccess back here, so that we can
24896         provide the proper semantic access to properties.
24897
24898         * expression.cs (Expression::ConvertReferenceExplicit): Implement
24899         a few more explicit conversions. 
24900
24901         * modifiers.cs: `NEW' modifier maps to HideBySig.
24902
24903         * expression.cs (PropertyExpr): Make this into an
24904         ExpressionStatement, and support the EmitStatement code path. 
24905
24906         Perform get/set error checking, clean up the interface.
24907
24908         * assign.cs: recognize PropertyExprs as targets, and if so, turn
24909         them into toplevel access objects.
24910
24911 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
24912
24913         * expression.cs: PropertyExpr::PropertyExpr: use work around the
24914         SRE.
24915
24916         * typemanager.cs: Keep track here of our PropertyBuilders again to
24917         work around lameness in SRE.
24918
24919 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
24920
24921         * expression.cs (LValue::LValueResolve): New method in the
24922         interface, used to perform a second resolution pass for LValues. 
24923
24924         (This::DoResolve): Catch the use of this in static methods.
24925
24926         (This::LValueResolve): Implement.
24927
24928         (This::Store): Remove warning, assigning to `this' in structures
24929         is 
24930
24931         (Invocation::Emit): Deal with invocation of
24932         methods on value types.  We need to pass the address to structure
24933         methods rather than the object itself.  (The equivalent code to
24934         emit "this" for structures leaves the entire structure on the
24935         stack instead of a pointer to it). 
24936
24937         (ParameterReference::DoResolve): Compute the real index for the
24938         argument based on whether the method takes or not a `this' pointer
24939         (ie, the method is static).
24940
24941         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
24942         value types returned from functions when we need to invoke a
24943         method on the sturcture.
24944
24945
24946 2001-10-11  Ravi Pratap  <ravi@ximian.com>
24947
24948         * class.cs (TypeContainer::DefineType): Method to actually do the business of
24949         defining the type in the Modulebuilder or Typebuilder. This is to take
24950         care of nested types which need to be defined on the TypeBuilder using
24951         DefineNestedMethod.
24952
24953         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
24954         methods in RootContext, only ported to be part of TypeContainer.
24955
24956         (TypeContainer::GetInterfaceOrClass): Ditto.
24957
24958         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
24959
24960         * interface.cs (Interface::DefineInterface): New method. Does exactly
24961         what RootContext.CreateInterface did earlier, only it takes care of nested types 
24962         too.
24963
24964         (Interface::GetInterfaces): Move from RootContext here and port.
24965
24966         (Interface::GetInterfaceByName): Same here.
24967
24968         * rootcontext.cs (ResolveTree): Re-write.
24969
24970         (PopulateTypes): Re-write.
24971
24972         * class.cs (TypeContainer::Populate): Populate nested types too.
24973         (TypeContainer::Emit): Emit nested members too.
24974
24975         * typemanager.cs (AddUserType): Do not make use of the FullName property,
24976         instead just use the name argument passed in as it is already fully
24977         qualified.
24978
24979         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
24980         to TypeContainer mapping to see if a type is user-defined.
24981
24982         * class.cs (TypeContainer::CloseType): Implement. 
24983
24984         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
24985         the default constructor.
24986
24987         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
24988         twice.
24989
24990         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
24991
24992         * interface.cs (CloseType): Create the type here.
24993
24994         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
24995         the hierarchy.
24996
24997         Remove all the methods which are now in TypeContainer.
24998
24999 2001-10-10  Ravi Pratap  <ravi@ximian.com>
25000
25001         * delegate.cs (Define): Re-write bits to define the delegate
25002         correctly.
25003
25004 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
25005
25006         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
25007
25008         * expression.cs (ImplicitReferenceConversion): handle null as well
25009         as a source to convert to any reference type.
25010
25011         * statement.cs (Return): Perform any implicit conversions to
25012         expected return type.  
25013
25014         Validate use of return statement.  
25015
25016         * codegen.cs (EmitContext): Pass the expected return type here.
25017
25018         * class.cs (Method, Constructor, Property): Pass expected return
25019         type to EmitContext.
25020
25021 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
25022
25023         * expression.cs: Make DoResolve take an EmitContext instead of a
25024         TypeContainer.
25025
25026         Replaced `l' and `location' for `loc', for consistency.
25027
25028         (Error, Warning): Remove unneeded Tc argument.
25029
25030         * assign.cs, literal.cs, constant.cs: Update to new calling
25031         convention. 
25032
25033         * codegen.cs: EmitContext now contains a flag indicating whether
25034         code is being generated in a static method or not.
25035
25036         * cs-parser.jay: DecomposeQI, new function that replaces the old
25037         QualifiedIdentifier.  Now we always decompose the assembled
25038         strings from qualified_identifier productions into a group of
25039         memberaccesses.
25040
25041 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
25042
25043         * rootcontext.cs: Deal with field-less struct types correctly now
25044         by passing the size option to Define Type.
25045
25046         * class.cs: Removed hack that created one static field. 
25047
25048 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
25049
25050         * statement.cs: Moved most of the code generation here. 
25051
25052 2001-10-09  Ravi Pratap  <ravi@ximian.com>
25053
25054         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
25055         seem very right.
25056
25057         (ElementAccess): Remove useless bits for now - keep checks as the spec
25058         says.
25059
25060 2001-10-08  Ravi Pratap  <ravi@ximian.com>
25061
25062         * expression.cs (ElementAccess::DoResolve): Remove my crap code
25063         and start performing checks according to the spec.
25064
25065 2001-10-07  Ravi Pratap  <ravi@ximian.com>
25066
25067         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
25068         rank_specifiers instead.
25069
25070         (rank_specifiers): Change the order in which the rank specifiers are stored
25071
25072         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
25073
25074         * expression.cs (ElementAccess): Implement the LValue interface too.
25075
25076 2001-10-06  Ravi Pratap  <ravi@ximian.com>
25077
25078         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
25079         except that user defined conversions are not included.
25080
25081         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
25082         perform the conversion of the return type, if necessary.
25083
25084         (New::DoResolve): Check whether we are creating an array or an object
25085         and accordingly do the needful.
25086
25087         (New::Emit): Same here.
25088
25089         (New::DoResolve): Implement guts of array creation.
25090
25091         (New::FormLookupType): Helper function.
25092
25093 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
25094
25095         * codegen.cs: Removed most of the code generation here, and move the
25096         corresponding code generation bits to the statement classes. 
25097
25098         Added support for try/catch/finalize and throw.
25099
25100         * cs-parser.jay: Added support for try/catch/finalize.
25101
25102         * class.cs: Catch static methods having the flags override,
25103         virtual or abstract.
25104
25105         * expression.cs (UserCast): This user cast was not really doing
25106         what it was supposed to do.  Which is to be born in fully resolved
25107         state.  Parts of the resolution were being performed at Emit time! 
25108
25109         Fixed this code.
25110
25111 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
25112
25113         * expression.cs: Implicity convert the result from UserCast.
25114
25115 2001-10-05  Ravi Pratap  <ravi@ximian.com>
25116
25117         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
25118         prevented it from working correctly. 
25119
25120         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
25121         merely ConvertImplicit.
25122
25123 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
25124
25125         * typemanager.cs: Make the LookupTypeContainer function static,
25126         and not per-instance.  
25127
25128         * class.cs: Make static FindMembers (the one that takes a Type
25129         argument). 
25130
25131         * codegen.cs: Add EmitForeach here.
25132
25133         * cs-parser.jay: Make foreach a toplevel object instead of the
25134         inline expansion, as we need to perform semantic analysis on it. 
25135
25136 2001-10-05  Ravi Pratap  <ravi@ximian.com>
25137
25138         * expression.cs (Expression::ImplicitUserConversion): Rename to
25139         UserDefinedConversion.
25140
25141         (Expression::UserDefinedConversion): Take an extra argument specifying 
25142         whether we look for explicit user conversions too.
25143
25144         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
25145
25146         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
25147
25148         (ExplicitUserConversion): Make it a call to UserDefinedConversion
25149         with the appropriate arguments.
25150
25151         * cs-parser.jay (cast_expression): Record location too.
25152
25153         * expression.cs (Cast): Record location info.
25154
25155         (Expression::ConvertExplicit): Take location argument.
25156
25157         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
25158         to determine if we are doing explicit conversions.
25159
25160         (UserCast::Emit): Update accordingly.
25161
25162         (Expression::ConvertExplicit): Report an error if everything fails.
25163
25164         * ../errors/cs0030.cs : Add.
25165
25166 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
25167
25168         * modifiers.cs: If the ABSTRACT keyword is present, also set the
25169         virtual and newslot bits. 
25170
25171         * class.cs (TypeContainer::RegisterRequiredImplementations):
25172         Record methods we need.
25173
25174         (TypeContainer::MakeKey): Helper function to make keys for
25175         MethodBases, since the Methodbase key is useless.
25176
25177         (TypeContainer::Populate): Call RegisterRequiredImplementations
25178         before defining the methods.   
25179
25180         Create a mapping for method_builders_to_methods ahead of time
25181         instead of inside a tight loop.
25182
25183         (::RequireMethods):  Accept an object as the data to set into the
25184         hashtable so we can report interface vs abstract method mismatch.
25185
25186 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
25187
25188         * report.cs: Make all of it static.
25189
25190         * rootcontext.cs: Drop object_type and value_type computations, as
25191         we have those in the TypeManager anyways.
25192
25193         Drop report instance variable too, now it is a global.
25194
25195         * driver.cs: Use try/catch on command line handling.
25196
25197         Add --probe option to debug the error reporting system with a test
25198         suite. 
25199
25200         * report.cs: Add support for exiting program when a probe
25201         condition is reached.
25202
25203 2001-10-03  Ravi Pratap  <ravi@ximian.com>
25204
25205         * expression.cs (Binary::DoNumericPromotions): Fix the case when
25206         we do a forcible conversion regardless of type, to check if 
25207         ForceConversion returns a null.
25208
25209         (Binary::error19): Use location to report error.
25210
25211         (Unary::error23): Use location here too.
25212
25213         * ../errors/cs0019.cs : Check in.
25214
25215         * ../errors/cs0023.cs : Check in.
25216
25217         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
25218         case of a non-null MethodInfo object with a length of 0 !
25219
25220         (Binary::ResolveOperator): Flag error if overload resolution fails to find
25221         an applicable member - according to the spec :-)
25222         Also fix logic to find members in base types.
25223
25224         (Unary::ResolveOperator): Same here.
25225
25226         (Unary::report23): Change name to error23 and make first argument a TypeContainer
25227         as I was getting thoroughly confused between this and error19 :-)
25228
25229         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
25230         (::FindMostEncompassedType): Implement.
25231         (::FindMostEncompassingType): Implement.
25232         (::StandardConversionExists): Implement.
25233
25234         (UserImplicitCast): Re-vamp. We now need info about most specific
25235         source and target types so that we can do the necessary conversions.
25236
25237         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
25238         mathematical union with no duplicates.
25239
25240 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
25241
25242         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
25243         in order from base classes to child classes, so that we can in
25244         child classes look up in our parent for method names and
25245         attributes (required for handling abstract, virtual, new, override
25246         constructs: we need to instrospect our base class, and if we dont
25247         populate the classes in order, the introspection might be
25248         incorrect.  For example, a method could query its parent before
25249         the parent has any methods and would determine that the parent has
25250         no abstract methods (while it could have had them)).
25251
25252         (RootContext::CreateType): Record the order in which we define the
25253         classes.
25254
25255 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
25256
25257         * class.cs (TypeContainer::Populate): Also method definitions can
25258         fail now, keep track of this.
25259
25260         (TypeContainer::FindMembers): Implement support for
25261         DeclaredOnly/noDeclaredOnly flag.
25262
25263         (Constructor::Emit) Return the ConstructorBuilder.
25264
25265         (Method::Emit) Return the MethodBuilder. 
25266         Check for abstract or virtual methods to be public.
25267
25268         * rootcontext.cs (RootContext::CreateType): Register all the
25269         abstract methods required for the class to be complete and the
25270         interface methods that must be implemented. 
25271
25272         * cs-parser.jay: Report error 501 (method requires body if it is
25273         not marked abstract or extern).
25274
25275         * expression.cs (TypeOf::Emit): Implement.
25276
25277         * typemanager.cs: runtime_handle_type, new global type.
25278
25279         * class.cs (Property::Emit): Generate code for properties.
25280
25281 2001-10-02  Ravi Pratap  <ravi@ximian.com>
25282
25283         * expression.cs (Unary::ResolveOperator): Find operators on base type
25284         too - we now conform exactly to the spec.
25285
25286         (Binary::ResolveOperator): Same here.
25287
25288         * class.cs (Operator::Define): Fix minor quirk in the tests.
25289
25290         * ../errors/cs0215.cs : Added.
25291
25292         * ../errors/cs0556.cs : Added.
25293
25294         * ../errors/cs0555.cs : Added.
25295
25296 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
25297
25298         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
25299         single integer which is really efficient
25300
25301 2001-10-01  Ravi Pratap  <ravi@ximian.com>
25302
25303         *  expression.cs (Expression::ImplicitUserConversion): Use location
25304         even in the case when we are examining True operators.
25305  
25306         * class.cs (Operator::Define): Perform extensive checks to conform
25307         with the rules for operator overloading in the spec.
25308
25309         * expression.cs (Expression::ImplicitReferenceConversion): Implement
25310         some of the other conversions mentioned in the spec.
25311
25312         * typemanager.cs (array_type): New static member for the System.Array built-in
25313         type.
25314
25315         (cloneable_interface): For System.ICloneable interface.
25316
25317         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
25318         we start resolving the tree and populating types.
25319
25320         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
25321  
25322 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
25323
25324         * expression.cs (Expression::ExprClassFromMemberInfo,
25325         Expression::Literalize): Create literal expressions from
25326         FieldInfos which are literals.
25327
25328         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
25329         type casts, because they were wrong.  The test suite in tests
25330         caught these ones.
25331
25332         (ImplicitNumericConversion): ushort to ulong requires a widening
25333         cast. 
25334
25335         Int32 constant to long requires widening cast as well.
25336
25337         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
25338         for integers because the type on the stack is not i4.
25339
25340 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
25341
25342         * expression.cs (report118): require location argument. 
25343
25344         * parameter.cs: Do not dereference potential null value.
25345
25346         * class.cs: Catch methods that lack the `new' keyword when
25347         overriding a name.  Report warnings when `new' is used without
25348         anything being there to override.
25349
25350         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
25351
25352         * class.cs: Only add constructor to hashtable if it is non-null
25353         (as now constructors can fail on define).
25354
25355         (TypeManager, Class, Struct): Take location arguments.
25356
25357         Catch field instance initialization in structs as errors.
25358
25359         accepting_filter: a new filter for FindMembers that is static so
25360         that we dont create an instance per invocation.
25361
25362         (Constructor::Define): Catch errors where a struct constructor is
25363         parameterless 
25364
25365         * cs-parser.jay: Pass location information for various new
25366         constructs. 
25367
25368         * delegate.cs (Delegate): take a location argument.
25369
25370         * driver.cs: Do not call EmitCode if there were problesm in the
25371         Definition of the types, as many Builders wont be there. 
25372
25373         * decl.cs (Decl::Decl): Require a location argument.
25374
25375         * cs-tokenizer.cs: Handle properly hex constants that can not fit
25376         into integers, and find the most appropiate integer for it.
25377
25378         * literal.cs: Implement ULongLiteral.
25379
25380         * rootcontext.cs: Provide better information about the location of
25381         failure when CreateType fails.
25382
25383 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
25384
25385         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
25386         as well.
25387
25388         * expression.cs (Binary::CheckShiftArguments): Add missing type
25389         computation.
25390         (Binary::ResolveOperator): Add type to the logical and and logical
25391         or, Bitwise And/Or and Exclusive Or code paths, it was missing
25392         before.
25393
25394         (Binary::DoNumericPromotions): In the case where either argument
25395         is ulong (and most signed types combined with ulong cause an
25396         error) perform implicit integer constant conversions as well.
25397
25398 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
25399
25400         * expression.cs (UserImplicitCast): Method should always be
25401         non-null. 
25402         (Invocation::BetterConversion): Simplified test for IntLiteral.
25403
25404         (Expression::ImplicitNumericConversion): Split this routine out.
25405         Put the code that performs implicit constant integer conversions
25406         here. 
25407
25408         (Expression::Resolve): Become a wrapper around DoResolve so we can
25409         check eclass and type being set after resolve.
25410
25411         (Invocation::Badness): Remove this dead function
25412
25413         (Binary::ResolveOperator): Do not compute the expensive argumnets
25414         unless we have a union for it.
25415
25416         (Probe::Emit): Is needs to do an isinst and then
25417         compare against null.
25418
25419         (::CanConvert): Added Location argument.  If the Location argument
25420         is null (Location.Null), then we do not report errors.  This is
25421         used by the `probe' mechanism of the Explicit conversion.  We do
25422         not want to generate an error for something that the user
25423         explicitly requested to be casted.  But the pipeline for an
25424         explicit cast first tests for potential implicit casts.
25425
25426         So for now, if the Location is null, it means `Probe only' to
25427         avoid adding another argument.   Might have to revise this
25428         strategy later.
25429
25430         (ClassCast): New class used to type cast objects into arbitrary
25431         classes (used in Explicit Reference Conversions).
25432
25433         Implement `as' as well.
25434
25435         Reverted all the patches from Ravi below: they were broken:
25436
25437                 * The use of `level' as a mechanism to stop recursive
25438                   invocations is wrong.  That was there just to catch the
25439                   bug with a strack trace but not as a way of addressing
25440                   the problem.
25441
25442                   To fix the problem we have to *understand* what is going
25443                   on and the interactions and come up with a plan, not
25444                   just get things going.
25445
25446                 * The use of the type conversion cache that I proposed
25447                   last night had an open topic: How does this work across
25448                   protection domains.  A user defined conversion might not
25449                   be public in the location where we are applying the
25450                   conversion, a different conversion might be selected
25451                   (ie, private A->B (better) but public B->A (worse),
25452                   inside A, A->B applies, but outside it, B->A will
25453                   apply).
25454
25455                 * On top of that (ie, even if the above is solved),
25456                   conversions in a cache need to be abstract.  Ie, `To
25457                   convert from an Int to a Short use an OpcodeCast', not
25458                   `To convert from an Int to a Short use the OpcodeCast on
25459                   the variable 5' (which is what this patch was doing).
25460
25461 2001-09-28  Ravi Pratap  <ravi@ximian.com>
25462
25463         * expression.cs (Invocation::ConversionExists): Re-write to use
25464         the conversion cache
25465
25466         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
25467         cache all conversions done, not just user-defined ones.
25468
25469         (Invocation::BetterConversion): The real culprit. Use ConversionExists
25470         to determine if a conversion exists instead of acutually trying to 
25471         perform the conversion. It's faster too.
25472
25473         (Expression::ConvertExplicit): Modify to use ConversionExists to check
25474         and only then attempt the implicit conversion.
25475
25476 2001-09-28  Ravi Pratap  <ravi@ximian.com>
25477
25478         * expression.cs (ConvertImplicit): Use a cache for conversions
25479         already found. Check level of recursion and bail out if necessary.
25480
25481 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
25482
25483         * typemanager.cs (string_concat_string_string, string_concat_object_object):
25484         Export standard methods that we expect for string operations.
25485
25486         * statement.cs (Block::UsageWarning): Track usage of variables and
25487         report the errors for not used variables.
25488
25489         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
25490         operator. 
25491
25492 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25493
25494         * codegen.cs: remove unnneded code 
25495
25496         * expression.cs: Removed BuiltinTypeAccess class
25497
25498         Fix the order in which implicit conversions are
25499         done.  
25500
25501         The previous fixed dropped support for boxed conversions (adding a
25502         test to the test suite now)
25503
25504         (UserImplicitCast::CanConvert): Remove test for source being null,
25505         that code is broken.  We should not feed a null to begin with, if
25506         we do, then we should track the bug where the problem originates
25507         and not try to cover it up here.
25508
25509         Return a resolved expression of type UserImplicitCast on success
25510         rather than true/false.  Ravi: this is what I was talking about,
25511         the pattern is to use a static method as a "constructor" for
25512         objects. 
25513
25514         Also, do not create arguments until the very last minute,
25515         otherwise we always create the arguments even for lookups that
25516         will never be performed. 
25517
25518         (UserImplicitCast::Resolve): Eliminate, objects of type
25519         UserImplicitCast are born in a fully resolved state. 
25520
25521         * typemanager.cs (InitCoreTypes): Init also value_type
25522         (System.ValueType). 
25523
25524         * expression.cs (Cast::Resolve): First resolve the child expression.
25525
25526         (LValue): Add new method AddressOf to be used by
25527         the `&' operator.  
25528
25529         Change the argument of Store to take an EmitContext instead of an
25530         ILGenerator, because things like FieldExpr need to be able to call
25531         their children expression to generate the instance code. 
25532
25533         (Expression::Error, Expression::Warning): Sugar functions for
25534         reporting errors.
25535
25536         (Expression::MemberLookup): Accept a TypeContainer instead of a
25537         Report as the first argument.
25538
25539         (Expression::ResolvePrimary): Killed.  I still want to improve
25540         this as currently the code is just not right.
25541
25542         (Expression::ResolveMemberAccess): Simplify, but it is still
25543         wrong. 
25544
25545         (Unary::Resolve): Catch errors in AddressOf operators.
25546
25547         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
25548         index to a byte for the short-version, or the compiler will choose
25549         the wrong Emit call, which generates the wrong data.
25550
25551         (ParameterReference::Emit, ::Store): same.
25552
25553         (FieldExpr::AddressOf): Implement.
25554
25555         * typemanager.cs: TypeManager: made public variable instead of
25556         property.
25557
25558         * driver.cs: document --fatal.
25559
25560         * report.cs (ErrorMessage, WarningMessage): new names for the old
25561         Error and Warning classes.
25562
25563         * cs-parser.jay (member_access): Turn built-in access to types
25564         into a normal simplename
25565
25566 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25567
25568         * expression.cs (Invocation::BetterConversion): Fix to cope
25569         with q being null, since this was introducing a bug.
25570
25571         * expression.cs (ConvertImplicit): Do built-in conversions first.
25572
25573 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25574
25575         * expression.cs (UserImplicitCast::Resolve): Fix bug.
25576
25577 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25578
25579         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
25580         I had introduced long ago (what's new ?).
25581
25582         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
25583         the work of all the checking. 
25584         (ConvertImplicit): Call CanConvert and only then create object if necessary.
25585         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
25586
25587         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
25588         that is the right way. 
25589
25590         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
25591         overloading resolution. Use everywhere instead of cutting and pasting code.
25592
25593         (Binary::ResolveOperator): Use MakeUnionSet.
25594
25595         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
25596         we have to convert to bool types. Not complete yet.
25597
25598 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25599
25600         * typemanager.cs (TypeManager::CSharpName): support ushort.
25601
25602         * expression.cs (Expression::TryImplicitIntConversion): Attempts
25603         to provide an expression that performsn an implicit constant int
25604         conversion (section 6.1.6).
25605         (Expression::ConvertImplicitRequired): Reworked to include
25606         implicit constant expression conversions.
25607
25608         (Expression::ConvertNumericExplicit): Finished.
25609
25610         (Invocation::Emit): If InstanceExpression is null, then it means
25611         that we perform a call on this.
25612
25613 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25614
25615         * expression.cs (Unary::Emit): Remove some dead code.
25616         (Probe): Implement Resolve and Emit for `is'.
25617         (Expression::ConvertImplicitRequired): Attempt to do constant
25618         expression conversions here.  Maybe should be moved to
25619         ConvertImplicit, but I am not sure.
25620         (Expression::ImplicitLongConstantConversionPossible,
25621         Expression::ImplicitIntConstantConversionPossible): New functions
25622         that tell whether is it possible to apply an implicit constant
25623         expression conversion.
25624
25625         (ConvertNumericExplicit): Started work on explicit numeric
25626         conversions.
25627
25628         * cs-parser.jay: Update operator constants.
25629
25630         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
25631         (Parameters::GetSignature): Hook up VerifyArgs here.
25632         (Parameters::VerifyArgs): Verifies that no two arguments have the
25633         same name. 
25634
25635         * class.cs (Operator): Update the operator names to reflect the
25636         ones that the spec expects (as we are just stringizing the
25637         operator names).
25638
25639         * expression.cs (Unary::ResolveOperator): Fix bug: Use
25640         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
25641         previous usage did only work for our methods.
25642         (Expression::ConvertImplicit): Handle decimal implicit numeric
25643         conversions as well.
25644         (Expression::InternalTypeConstructor): Used to invoke constructors
25645         on internal types for default promotions.
25646
25647         (Unary::Emit): Implement special handling for the pre/post
25648         increment/decrement for overloaded operators, as they need to have
25649         the same semantics as the other operators.
25650
25651         (Binary::ResolveOperator): ditto.
25652         (Invocation::ConversionExists): ditto.
25653         (UserImplicitCast::Resolve): ditto.
25654
25655 2001-09-26  Ravi Pratap  <ravi@ximian.com>
25656
25657         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
25658         operator, return after emitting body. Regression tests pass again !
25659
25660         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
25661         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
25662         (Invocation::OverloadResolve): Ditto.
25663         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
25664
25665         * everywhere : update calls to the above methods accordingly.
25666
25667 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25668
25669         * assign.cs (Assign): Make it inherit from ExpressionStatement.
25670
25671         * expression.cs (ExpressionStatement): New base class used for
25672         expressions that can appear in statements, so that we can provide
25673         an alternate path to generate expression that do not leave a value
25674         on the stack.
25675
25676         (Expression::Emit, and all the derivatives): We no longer return
25677         whether a value is left on the stack or not.  Every expression
25678         after being emitted leaves a single value on the stack.
25679
25680         * codegen.cs (EmitContext::EmitStatementExpression): Use the
25681         facilties of ExpressionStatement if possible.
25682
25683         * cs-parser.jay: Update statement_expression.
25684
25685 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
25686
25687         * driver.cs: Change the wording of message
25688
25689 2001-09-25  Ravi Pratap  <ravi@ximian.com>
25690
25691         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
25692         the type of the expression to the return type of the method if
25693         we have an overloaded operator match ! The regression tests pass again !
25694         (Unary::ResolveOperator): Ditto.
25695
25696         * expression.cs (Invocation::ConversionExists): Correct the member lookup
25697         to find "op_Implicit", not "implicit" ;-)
25698         (UserImplicitCast): New class to take care of user-defined implicit conversions.
25699         (ConvertImplicit, ForceConversion): Take TypeContainer argument
25700
25701         * everywhere : Correct calls to the above accordingly.
25702
25703         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
25704         (ConvertImplicit): Do user-defined conversion if it exists.
25705
25706 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
25707
25708         * assign.cs: track location.
25709         (Resolve): Use implicit conversions on assignment.
25710
25711         * literal.cs: Oops.  Not good, Emit of short access values should
25712         pass (Bytes) or the wrong argument will be selected.
25713
25714         * expression.cs (Unary::Emit): Emit code for -expr.
25715
25716         (Unary::ResolveOperator): Handle `Substract' for non-constants
25717         (substract from zero from the non-constants).
25718         Deal with Doubles as well. 
25719
25720         (Expression::ConvertImplicitRequired): New routine that reports an
25721         error if no implicit conversion exists. 
25722
25723         (Invocation::OverloadResolve): Store the converted implicit
25724         expressions if we make them
25725
25726 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25727
25728         * class.cs (ConstructorInitializer): Take a Location argument.
25729         (ConstructorBaseInitializer): Same here.
25730         (ConstructorThisInitializer): Same here.
25731
25732         * cs-parser.jay : Update all calls accordingly.
25733
25734         * expression.cs (Unary, Binary, New): Take location argument.
25735         Update accordingly everywhere.
25736
25737         * cs-parser.jay : Update all calls to the above to take a location
25738         argument.
25739
25740         * class.cs : Ditto.
25741
25742 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25743
25744         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
25745         (Invocation::BetterConversion): Same here
25746         (Invocation::ConversionExists): Ditto.
25747
25748         (Invocation::ConversionExists): Implement.
25749
25750 2001-09-22  Ravi Pratap  <ravi@ximian.com>
25751
25752         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
25753         Also take an additional TypeContainer argument.
25754
25755         * All over : Pass in TypeContainer as argument to OverloadResolve.
25756
25757         * typemanager.cs (CSharpName): Update to check for the string type and return
25758         that too.
25759
25760         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
25761         a given method.
25762
25763 2001-09-21  Ravi Pratap  <ravi@ximian.com>
25764
25765         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
25766         (Invocation::BetterFunction): Implement.
25767         (Invocation::BetterConversion): Implement.
25768         (Invocation::ConversionExists): Skeleton, no implementation yet.
25769
25770         Okay, things work fine !
25771
25772 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
25773
25774         * typemanager.cs: declare and load enum_type, delegate_type and
25775         void_type. 
25776
25777         * expression.cs (Expression::Emit): Now emit returns a value that
25778         tells whether a value is left on the stack or not.  This strategy
25779         might be reveted tomorrow with a mechanism that would address
25780         multiple assignments.
25781         (Expression::report118): Utility routine to report mismatches on
25782         the ExprClass.
25783
25784         (Unary::Report23): Report impossible type/operator combination
25785         utility function.
25786
25787         (Unary::IsIncrementableNumber): Whether the type can be
25788         incremented or decremented with add.
25789         (Unary::ResolveOperator): Also allow enumerations to be bitwise
25790         complemented. 
25791         (Unary::ResolveOperator): Implement ++, !, ~,
25792
25793         (Invocation::Emit): Deal with new Emit convetion.
25794
25795         * All Expression derivatives: Updated their Emit method to return
25796         whether they leave values on the stack or not.
25797
25798         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
25799         stack for expressions that are statements. 
25800
25801 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25802
25803         * expression.cs (LValue): New interface.  Must be implemented by
25804         LValue objects.
25805         (LocalVariableReference, ParameterReference, FieldExpr): Implement
25806         LValue interface.
25807
25808         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
25809         interface for generating code, simplifies the code.
25810
25811 2001-09-20  Ravi Pratap  <ravi@ximian.com>
25812
25813         * expression.cs (everywhere): Comment out return statements in ::Resolve
25814         methods to avoid the warnings.
25815
25816 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25817
25818         * driver.cs (parse): Report error 2001 if we can not open the
25819         source file.
25820
25821         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
25822         not resolve it.
25823
25824         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
25825         object. 
25826
25827         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
25828         otherwise nested blocks end up with the same index.
25829
25830         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
25831
25832         * expression.cs:  Instead of having FIXMEs in the Resolve
25833         functions, throw exceptions so it is obvious that we are facing a
25834         bug. 
25835
25836         * cs-parser.jay (invocation_expression): Pass Location information.
25837
25838         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
25839         Use a basename for those routines because .NET does not like paths
25840         on them. 
25841
25842         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
25843         already defined.
25844
25845 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
25846
25847         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
25848         are loading the correct data types (throws an exception if not).
25849         (TypeManager::InitCoreTypes): Use CoreLookupType
25850
25851         * expression.cs (Unary::ResolveOperator): return the child
25852         expression for expressions which are just +expr.
25853         (Unary::ResolveOperator): Return negative literals for -LITERAL
25854         expressions (otherwise they are Unary {Literal}).
25855         (Invocation::Badness): Take into account `Implicit constant
25856         expression conversions'.
25857
25858         * literal.cs (LongLiteral): Implement long literal class.
25859         (IntLiteral): export the `Value' of the intliteral. 
25860
25861 2001-09-19  Ravi Pratap  <ravi@ximian.com>
25862
25863         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
25864
25865         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
25866         instead of 'Operator'
25867
25868         * expression.cs (Binary::ResolveOperator): Update accordingly.
25869         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
25870         and 'Minus'
25871
25872         * cs-parser.jay (unary_expression): Update to use the new names.
25873
25874         * gen-treedump.cs (GetUnary): Same here.
25875
25876         * expression.cs (Unary::Resolve): Implement.
25877         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
25878         operators are found instead of making noise ;-)
25879         (Unary::ResolveOperator): New method to do precisely the same thing which
25880         Binary::ResolveOperator does for Binary expressions.
25881         (Unary.method, .Arguments): Add.
25882         (Unary::OperName): Implement.   
25883         (Unary::ForceConversion): Copy and Paste !
25884
25885         * class.cs (Operator::Define): Fix a small bug for the case when we have 
25886         a unary operator.
25887
25888         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
25889         for the inbuilt operators. Only overloading works for now ;-)
25890
25891 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
25892
25893         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
25894         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
25895
25896         * expression.cs (This::Emit): Implement. 
25897         (This::Resolve): Implement.
25898         (TypeOf:Resolve): Implement.
25899         (Expression::ResolveSimpleName): Add an implicit this to instance
25900         field references. 
25901         (MemberAccess::Resolve): Deal with Parameters and Fields. 
25902         Bind instance variable to Field expressions.
25903         (FieldExpr::Instance): New field used to track the expression that
25904         represents the object instance.
25905         (FieldExpr::Resolve): Track potential errors from MemberLookup not
25906         binding 
25907         (FieldExpr::Emit): Implement.
25908
25909         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
25910         the last instruction contains a return opcode to avoid generating
25911         the last `ret' instruction (this generates correct code, and it is
25912         nice to pass the peverify output).
25913
25914         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
25915         initializer for static and instance variables.
25916         (Constructor::Emit): Allow initializer to be null in the case of
25917         static constructors.  Only emit initializer for instance
25918         constructors. 
25919
25920         (TypeContainer::FindMembers): Return a null array if there are no
25921         matches.
25922
25923         Also fix the code for the MemberTypes.Method branch, as it was not
25924         scanning that for operators (or tried to access null variables before).
25925
25926         * assign.cs (Assign::Emit): Handle instance and static fields. 
25927
25928         * TODO: Updated.
25929
25930         * driver.cs: Stop compilation if there are parse errors.
25931
25932         * cs-parser.jay (constructor_declaration): Provide default base
25933         initializer for non-static constructors.
25934         (constructor_declarator): Do not provide a default base
25935         initializers if none was specified.
25936         Catch the fact that constructors should not have parameters.
25937
25938         * class.cs: Do not emit parent class initializers for static
25939         constructors, that should be flagged as an error.
25940
25941 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25942
25943         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
25944         Move back code into TypeContainer::Populate.
25945
25946 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25947
25948         * class.cs (TypeContainer::AddConstructor): Fix the check to
25949         compare against Name, not Basename. 
25950         (Operator::OpType): Change Plus and Minus to Add and Subtract.
25951
25952         * cs-parser.jay : Update accordingly.
25953
25954         * class.cs (TypeContainer::FindMembers): For the case where we are searching
25955         for methods, don't forget to look into the operators too.
25956         (RegisterMethodBuilder): Helper method to take care of this for
25957         methods, constructors and operators.
25958         (Operator::Define): Completely revamp.
25959         (Operator.OperatorMethod, MethodName): New fields.
25960         (TypeContainer::Populate): Move the registering of builders into
25961         RegisterMethodBuilder.
25962         (Operator::Emit): Re-write.
25963
25964         * expression.cs (Binary::Emit): Comment out code path to emit method
25965         invocation stuff for the case when we have a user defined operator. I am
25966         just not able to get it right !
25967
25968 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25969
25970         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
25971         argument. 
25972
25973         (Expression::MemberLookup): Provide a version that allows to
25974         specify the MemberTypes and BindingFlags. 
25975
25976         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
25977         so it was not fetching variable information from outer blocks.
25978
25979         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
25980         Beforefieldinit as it was buggy.
25981
25982         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
25983         that Ravi put here.  
25984
25985         * class.cs (Constructor::Emit): Only emit if block is not null.
25986         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
25987         deal with this by semantically definining it as if the user had
25988         done it.
25989
25990         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
25991         constructors as we now "emit" them at a higher level.
25992
25993         (TypeContainer::DefineDefaultConstructor): Used to define the
25994         default constructors if none was provided.
25995
25996         (ConstructorInitializer): Add methods Resolve and Emit. 
25997
25998         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
25999
26000 2001-09-17  Ravi Pratap  <ravi@ximian.com>
26001
26002         * class.cs (TypeContainer::EmitDefaultConstructor): Register
26003         the default constructor builder with our hashtable for methodbuilders
26004         to methodcores.
26005
26006         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
26007         and argument_count is 0 in which case we have a match.
26008         (Binary::ResolveOperator): More null checking and miscellaneous coding
26009         style cleanup.
26010
26011 2001-09-17  Ravi Pratap  <ravi@ximian.com>
26012
26013         * rootcontext.cs (IsNameSpace): Compare against null.
26014
26015         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
26016
26017         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
26018         and Unary::Operator.
26019
26020         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
26021         accordingly.
26022
26023         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
26024         we have overloaded operators.
26025         (Binary::ResolveOperator): Implement the part which does the operator overload
26026         resolution.
26027
26028         * class.cs (Operator::Emit): Implement.
26029         (TypeContainer::Emit): Emit the operators we have too.
26030
26031         * expression.cs (Binary::Emit): Update to emit the appropriate code for
26032         the case when we have a user-defined operator.
26033
26034 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
26035
26036         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
26037
26038 2001-09-16  Ravi Pratap  <ravi@ximian.com>
26039
26040         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
26041         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
26042         (Constructor::Emit): Implement.
26043         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
26044         if we have no work to do. 
26045         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
26046         Emit method.
26047
26048         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
26049         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
26050
26051         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
26052         of parent.parent.
26053
26054 2001-09-15  Ravi Pratap  <ravi@ximian.com>
26055
26056         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
26057         in the source.
26058         (Tree::RecordNamespace): Method to do what the name says ;-)
26059         (Tree::Namespaces): Property to get at the namespaces hashtable.
26060
26061         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
26062         keep track.
26063
26064         * rootcontext.cs (IsNamespace): Fixed it :-)
26065
26066 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
26067
26068         * class.cs (TypeContainer::FindMembers): Add support for
26069         constructors. 
26070         (MethodCore): New class that encapsulates both the shared aspects
26071         of a Constructor and a Method.  
26072         (Method, Constructor): Factored pieces into MethodCore.
26073
26074         * driver.cs: Added --fatal which makes errors throw exceptions.
26075         Load System assembly as well as part of the standard library.
26076
26077         * report.cs: Allow throwing exceptions on errors for debugging.
26078
26079         * modifiers.cs: Do not use `parent', instead use the real type
26080         container to evaluate permission settings.
26081
26082         * class.cs: Put Ravi's patch back in.  He is right, and we will
26083         have to cope with the
26084
26085 2001-09-14  Ravi Pratap  <ravi@ximian.com>
26086
26087         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
26088         FamORAssem, not FamANDAssem.
26089
26090 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
26091
26092         * driver.cs: Added --parse option that only parses its input files
26093         and terminates.
26094
26095         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
26096         incorrect.  IsTopLevel is not used to tell whether an object is
26097         root_types or not (that can be achieved by testing this ==
26098         root_types).  But to see if this is a top-level *class* (not
26099         necessarly our "toplevel" container). 
26100
26101 2001-09-14  Ravi Pratap  <ravi@ximian.com>
26102
26103         * enum.cs (Enum::Define): Modify to call the Lookup method on the
26104         parent instead of a direct call to GetType.
26105
26106 2001-09-14  Ravi Pratap  <ravi@ximian.com>
26107
26108         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
26109         Modifiers.TypeAttr. This should just be a call to that method.
26110
26111         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
26112         object so that we can determine if we are top-level or not.
26113
26114         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
26115         TypeContainer too.
26116
26117         * enum.cs (Enum::Define): Ditto.
26118
26119         * modifiers.cs (FieldAttr): Re-write.
26120
26121         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
26122         (TypeContainer::HaveStaticConstructor): New property to provide access
26123         to precisely that info.
26124
26125         * modifiers.cs (MethodAttr): Re-write.
26126         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
26127
26128         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
26129         of top-level types as claimed.
26130
26131 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
26132
26133         * expression.cs (MemberLookup): Fruitless attempt to lookup
26134         constructors.  Maybe I need to emit default constructors?  That
26135         might be it (currently .NET emits this for me automatically).
26136         (Invocation::OverloadResolve): Cope with Arguments == null.
26137         (Invocation::EmitArguments): new function, shared by the new
26138         constructor and us.
26139         (Invocation::Emit): Handle static and instance methods.  Emit
26140         proper call instruction for virtual or non-virtual invocations.
26141         (New::Emit): Implement.
26142         (New::Resolve): Implement.
26143         (MemberAccess:Resolve): Implement.
26144         (MethodGroupExpr::InstanceExpression): used conforming to the spec
26145         to track instances.
26146         (FieldExpr::Resolve): Set type.
26147
26148         * support.cs: Handle empty arguments.
26149                 
26150         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
26151         SimpleLookup): Auxiliary routines to help parse a qualifier
26152         identifier.  
26153
26154         Update qualifier_identifier rule.
26155
26156         * codegen.cs: Removed debugging messages.
26157
26158         * class.cs: Make this a global thing, this acts just as a "key" to
26159         objects that we might have around.
26160
26161         (Populate): Only initialize method_builders_to_methods once.
26162
26163         * expression.cs (PropertyExpr): Initialize type from the
26164         PropertyType. 
26165
26166         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
26167         Resolve pattern.  Attempt to implicitly convert value to boolean.
26168         Emit code.
26169
26170         * expression.cs: Set the type for the int32/int32 argument case.
26171         (Binary::ResolveOperator): Set the return type to boolean for
26172         comparission operators
26173
26174         * typemanager.cs: Remove debugging print code.
26175
26176         (Invocation::Resolve): resolve type.
26177
26178         * class.cs: Allocate a MemberInfo of the correct size, as the code
26179         elsewhere depends on the test to reflect the correct contents.
26180
26181         (Method::) Keep track of parameters, due to System.Reflection holes
26182
26183         (TypeContainer::Populate): Keep track of MethodBuilders to Method
26184         mapping here.
26185
26186         (TypeContainer::FindMembers): Use ArrayList and then copy an array
26187         of the exact size and return that.
26188
26189         (Class::LookupMethodByBuilder): New function that maps
26190         MethodBuilders to its methods.  Required to locate the information
26191         on methods because System.Reflection bit us again.
26192
26193         * support.cs: New file, contains an interface ParameterData and
26194         two implementations: ReflectionParameters and InternalParameters
26195         used to access Parameter information.  We will need to grow this
26196         as required.
26197
26198         * expression.cs (Invocation::GetParameterData): implement a cache
26199         and a wrapper around the ParameterData creation for methods. 
26200         (Invocation::OverloadResolve): Use new code.
26201
26202 2001-09-13  Ravi Pratap  <ravi@ximian.com>
26203
26204         * class.cs (TypeContainer::EmitField): Remove and move into 
26205         (Field::Define): here and modify accordingly.
26206         (Field.FieldBuilder): New member.
26207         (TypeContainer::Populate): Update accordingly.
26208         (TypeContainer::FindMembers): Implement.
26209
26210 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
26211
26212         * statement.cs: (VariableInfo::VariableType): New field to be
26213         initialized with the full type once it is resolved. 
26214
26215 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
26216
26217         * parameter.cs (GetParameterInfo): Use a type cache to compute
26218         things only once, and to reuse this information
26219
26220         * expression.cs (LocalVariableReference::Emit): Implement.
26221         (OpcodeCast::Emit): fix.
26222
26223         (ParameterReference::Resolve): Implement.
26224         (ParameterReference::Emit): Implement.
26225
26226         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
26227         that are expressions need to stay as Expressions.
26228
26229         * typemanager.cs (CSharpName): Returns the C# name of a type if
26230         possible. 
26231
26232         * expression.cs (Expression::ConvertImplicit): New function that
26233         implements implicit type conversions.
26234
26235         (Expression::ImplicitReferenceConversion): Implements implicit
26236         reference conversions.
26237
26238         (EmptyCast): New type for transparent casts.
26239
26240         (OpcodeCast): New type for casts of types that are performed with
26241         a sequence of bytecodes.
26242
26243         (BoxedCast): New type used for casting value types into reference
26244         types.  Emits a box opcode.
26245
26246         (Binary::DoNumericPromotions): Implements numeric promotions of
26247         and computation of the Binary::Type.
26248
26249         (Binary::EmitBranchable): Optimization.
26250
26251         (Binary::Emit): Implement code emission for expressions.
26252
26253         * typemanager.cs (TypeManager): Added two new core types: sbyte
26254         and byte.
26255
26256 2001-09-12  Ravi Pratap  <ravi@ximian.com>
26257
26258         * class.cs (TypeContainer::FindMembers): Method which does exactly
26259         what Type.FindMembers does, only we don't have to use reflection. No
26260         implementation yet.
26261
26262         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
26263         typecontainer objects as we need to get at them.
26264         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
26265
26266         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
26267         typecontainer object.
26268
26269         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
26270         of just a Report object.
26271
26272 2001-09-11  Ravi Pratap  <ravi@ximian.com>
26273
26274         * class.cs (Event::Define): Go back to using the prefixes "add_" and
26275         "remove_"
26276         (TypeContainer::Populate): Now define the delegates of the type too.
26277         (TypeContainer.Delegates): Property to access the list of delegates defined
26278         in the type.
26279
26280         * delegates.cs (Delegate::Define): Implement partially.
26281
26282         * modifiers.cs (TypeAttr): Handle more flags.
26283
26284 2001-09-11  Ravi Pratap  <ravi@ximian.com>
26285
26286         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
26287         and not <=
26288         (Operator::Define): Re-write logic to get types by using the LookupType method
26289         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
26290         (Indexer::Define): Ditto.
26291         (Event::Define): Ditto.
26292         (Property::Define): Ditto.
26293
26294 2001-09-10  Ravi Pratap  <ravi@ximian.com>
26295
26296         * class.cs (TypeContainer::Populate): Now define operators too. 
26297         (TypeContainer.Operators): New property to access the list of operators
26298         in a type.
26299         (Operator.OperatorMethodBuilder): New member to hold the method builder
26300         for the operator we are defining.
26301         (Operator::Define): Implement.
26302
26303 2001-09-10  Ravi Pratap  <ravi@ximian.com>
26304
26305         * class.cs (Event::Define): Make the prefixes of the accessor methods
26306         addOn_ and removeOn_ 
26307
26308         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
26309         of the location being passed in too. Ideally, this should go later since all
26310         error reporting should be done through the Report object.
26311
26312         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
26313         (Populate): Iterate thru the indexers we have and define them too.
26314         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
26315         for the get and set accessors.
26316         (Indexer::Define): Implement.
26317
26318 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
26319
26320         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
26321         my previous implementation, did not work.
26322
26323         * typemanager.cs: Add a couple of missing types (the longs).
26324
26325         * literal.cs: Use TypeManager.bool_type instead of getting it.
26326
26327         * expression.cs (EventExpr): New kind of expressions.
26328         (Expressio::ExprClassFromMemberInfo): finish
26329
26330 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
26331
26332         * assign.cs: Emit stores to static fields differently.
26333
26334 2001-09-08  Ravi Pratap  <ravi@ximian.com>
26335
26336         * Merge in changes and adjust code to tackle conflicts. Backed out my
26337         code in Assign::Resolve ;-) 
26338
26339 2001-09-08  Ravi Pratap  <ravi@ximian.com>
26340
26341         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
26342         instead Report.Error and also pass in the location.
26343         (CSharpParser::Lexer): New readonly property to return the reference
26344         to the Tokenizer object.
26345         (declare_local_variables): Use Report.Error with location instead of plain 
26346         old error.
26347         (CheckDef): Ditto.
26348
26349         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
26350         (Operator.CheckBinaryOperator): Ditto.
26351
26352         * cs-parser.jay (operator_declarator): Update accordingly.
26353
26354         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
26355         (CheckBinaryOperator): Same here.
26356
26357         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
26358         on the name without any prefixes of namespace names etc. This is because we
26359         already might have something already fully qualified like 
26360         'System.Console.WriteLine'
26361
26362         * assign.cs (Resolve): Begin implementation. Stuck ;-)
26363
26364 2001-09-07  Ravi Pratap  <ravi@ximian.com>
26365
26366         * cs-tokenizer.cs (location): Return a string which also contains
26367         the file name.
26368
26369         * expression.cs (ElementAccess): New class for expressions of the
26370         type 'element access.'
26371         (BaseAccess): New class for expressions of the type 'base access.'
26372         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
26373         respectively.
26374
26375         * cs-parser.jay (element_access): Implement action.
26376         (base_access): Implement actions.
26377         (checked_expression, unchecked_expression): Implement.
26378
26379         * cs-parser.jay (local_variable_type): Correct and implement.
26380         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
26381
26382         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
26383
26384         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
26385         name and the specifiers.
26386
26387         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
26388
26389         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
26390         making them all public ;-)
26391
26392         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
26393         class anyways.
26394
26395 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
26396
26397         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
26398         PropertyExprs.
26399         (FieldExpr, PropertyExprs): New resolved expressions.
26400         (SimpleName::MemberStaticCheck): Perform static checks for access
26401         to non-static fields on static methods. Maybe this should be
26402         generalized for MemberAccesses. 
26403         (SimpleName::ResolveSimpleName): More work on simple name
26404         resolution. 
26405
26406         * cs-parser.jay (primary_expression/qualified_identifier): track
26407         the parameter index.
26408
26409         * codegen.cs (CodeGen::Save): Catch save exception, report error.
26410         (EmitContext::EmitBoolExpression): Chain to expression generation
26411         instead of temporary hack.
26412         (::EmitStatementExpression): Put generic expression code generation.
26413
26414         * assign.cs (Assign::Emit): Implement variable assignments to
26415         local variables, parameters and fields.
26416
26417 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
26418
26419         * statement.cs (Block::GetVariableInfo): New method, returns the
26420         VariableInfo for a variable name in a block.
26421         (Block::GetVariableType): Implement in terms of GetVariableInfo
26422
26423         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
26424         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
26425
26426 2001-09-06  Ravi Pratap  <ravi@ximian.com>
26427
26428         * cs-parser.jay (operator_declaration): Continue on my quest : update
26429         to take attributes argument.
26430         (event_declaration): Ditto.
26431         (enum_declaration): Ditto.
26432         (indexer_declaration): Ditto.
26433
26434         * class.cs (Operator::Operator): Update constructor accordingly.
26435         (Event::Event): Ditto.
26436
26437         * delegate.cs (Delegate::Delegate): Same here.
26438
26439         * enum.cs (Enum::Enum): Same here.
26440
26441 2001-09-05  Ravi Pratap  <ravi@ximian.com>
26442
26443         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
26444
26445         * ../tests/cs0658.cs : New file to demonstrate error 0658.
26446
26447         * attribute.cs (Attributes): New class to encapsulate all attributes which were
26448         being passed around as an arraylist.
26449         (Attributes::AddAttribute): Method to add attribute sections.
26450
26451         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
26452         (struct_declaration): Update accordingly.
26453         (constant_declaration): Update.
26454         (field_declaration): Update.
26455         (method_header): Update.
26456         (fixed_parameter): Update.
26457         (parameter_array): Ditto.
26458         (property_declaration): Ditto.
26459         (destructor_declaration): Ditto.
26460
26461         * class.cs (Struct::Struct): Update constructors accordingly.
26462         (Class::Class): Ditto.
26463         (Field::Field): Ditto.
26464         (Method::Method): Ditto.
26465         (Property::Property): Ditto.
26466         (TypeContainer::OptAttribute): update property's return type.
26467
26468         * interface.cs (Interface.opt_attributes): New member.
26469         (Interface::Interface): Update to take the extra Attributes argument.
26470
26471         * parameter.cs (Parameter::Parameter): Ditto.
26472
26473         * constant.cs (Constant::Constant): Ditto.
26474
26475         * interface.cs (InterfaceMemberBase): New OptAttributes field.
26476         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
26477         the attributes as a parameter.
26478         (InterfaceProperty): Update constructor call.
26479         (InterfaceEvent): Ditto.
26480         (InterfaceMethod): Ditto.
26481         (InterfaceIndexer): Ditto.
26482
26483         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
26484         pass the attributes too.
26485         (interface_event_declaration): Ditto.
26486         (interface_property_declaration): Ditto.
26487         (interface_method_declaration): Ditto.
26488         (interface_declaration): Ditto.
26489
26490 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
26491
26492         * class.cs (Method::Define): Track the "static Main" definition to
26493         create an entry point. 
26494
26495         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
26496         EntryPoint if we find it. 
26497
26498         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
26499         (EmitContext::ig): Make this variable public.
26500
26501         * driver.cs: Make the default output file be the first file name
26502         with the .exe extension.  
26503
26504         Detect empty compilations
26505
26506         Handle various kinds of output targets.  Handle --target and
26507         rename -t to --dumper.
26508
26509         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
26510         methods inherited from Expression return now an Expression.  This
26511         will is used during the tree rewriting as we resolve them during
26512         semantic analysis.
26513
26514         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
26515         the spec.  Missing entirely is the information about
26516         accessability of elements of it.
26517
26518         (Expression::ExprClassFromMemberInfo): New constructor for
26519         Expressions that creates a fully initialized Expression based on
26520         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
26521         a Type.
26522
26523         (Invocation::Resolve): Begin implementing resolution of invocations.
26524
26525         * literal.cs (StringLiteral):  Implement Emit.
26526
26527 2001-09-05  Ravi Pratap  <ravi@ximian.com>
26528
26529         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
26530         member.
26531
26532 2001-09-04  Ravi Pratap  <ravi@ximian.com>
26533
26534         * cs-parser.jay (attribute_arguments): Implement actions.
26535         (attribute): Fix bug in production. Implement action.
26536         (attribute_list): Implement.
26537         (attribute_target): Implement.
26538         (attribute_target_specifier, opt_target_specifier): Implement
26539         (CheckAttributeTarget): New method to check if the attribute target
26540         is valid.
26541         (attribute_section): Implement.
26542         (opt_attributes): Implement.
26543
26544         * attribute.cs : New file to handle attributes.
26545         (Attribute): Class to hold attribute info.
26546
26547         * cs-parser.jay (opt_attribute_target_specifier): Remove production
26548         (attribute_section): Modify production to use 2 different rules to 
26549         achieve the same thing. 1 s/r conflict down !
26550         Clean out commented, useless, non-reducing dimension_separator rules.
26551
26552         * class.cs (TypeContainer.attributes): New member to hold list
26553         of attributes for a type.
26554         (Struct::Struct): Modify to take one more argument, the attribute list.
26555         (Class::Class): Ditto.
26556         (Field::Field): Ditto.
26557         (Method::Method): Ditto.
26558         (Property::Property): Ditto.
26559
26560         * cs-parser.jay (struct_declaration): Update constructor call to
26561         pass in the attributes too.
26562         (class_declaration): Ditto.
26563         (constant_declaration): Ditto.
26564         (field_declaration): Ditto.
26565         (method_header): Ditto.
26566         (fixed_parameter): Ditto.
26567         (parameter_array): Ditto.
26568         (property_declaration): Ditto.
26569
26570         * constant.cs (Constant::Constant): Update constructor similarly.
26571         Use System.Collections.
26572
26573         * parameter.cs (Parameter::Parameter): Update as above.
26574
26575 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26576
26577         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
26578         (TypeContainer.delegates): New member to hold list of delegates.
26579
26580         * cs-parser.jay (delegate_declaration): Implement the action correctly 
26581         this time as I seem to be on crack ;-)
26582
26583 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
26584
26585         * rootcontext.cs (RootContext::IsNamespace): new function, used to
26586         tell whether an identifier represents a namespace.
26587
26588         * expression.cs (NamespaceExpr): A namespace expression, used only
26589         temporarly during expression resolution.
26590         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
26591         utility functions to resolve names on expressions.
26592
26593 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
26594
26595         * codegen.cs: Add hook for StatementExpressions. 
26596
26597         * class.cs: Fix inverted test for static flag in methods.
26598
26599 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26600
26601         * class.cs (Operator::CheckUnaryOperator): Correct error number used
26602         to make it coincide with MS' number.
26603         (Operator::CheckBinaryOperator): Ditto.
26604
26605         * ../errors/errors.txt : Remove error numbers added earlier.
26606
26607         * ../errors/cs1019.cs : Test case for error # 1019
26608
26609         * ../errros/cs1020.cs : Test case for error # 1020
26610
26611         * cs-parser.jay : Clean out commented cruft.
26612         (dimension_separators, dimension_separator): Comment out. Ostensibly not
26613         used anywhere - non-reducing rule.
26614         (namespace_declarations): Non-reducing rule - comment out.
26615
26616         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
26617         with TypeContainer::AddEnum.
26618
26619         * delegate.cs : New file for delegate handling classes.
26620         (Delegate): Class for declaring delegates.
26621
26622         * makefile : Update.
26623
26624         * cs-parser.jay (delegate_declaration): Implement.
26625
26626 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
26627
26628         * class.cs (Event::Define): Implement.
26629         (Event.EventBuilder): New member.
26630
26631         * class.cs (TypeContainer::Populate): Update to define all enums and events
26632         we have.
26633         (Events): New property for the events arraylist we hold. Shouldn't we move to using
26634         readonly fields for all these cases ?
26635
26636 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26637
26638         * class.cs (Property): Revamp to use the convention of making fields readonly.
26639         Accordingly modify code elsewhere.
26640
26641         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
26642         the Define method of the Property class.
26643
26644         * class.cs : Clean up applied patch and update references to variables etc. Fix 
26645         trivial bug.
26646         (TypeContainer::Populate): Update to define all the properties we have. Also
26647         define all enumerations.
26648
26649         * enum.cs (Define): Implement.
26650
26651 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26652
26653         * cs-parser.jay (overloadable_operator): The semantic value is an
26654         enum of the Operator class.
26655         (operator_declarator): Implement actions.
26656         (operator_declaration): Implement.
26657
26658         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
26659         validity of definitions.
26660         (Operator::CheckBinaryOperator): Static method to check for binary operators
26661         (TypeContainer::AddOperator): New method to add an operator to a type.
26662
26663         * cs-parser.jay (indexer_declaration): Added line to actually call the
26664         AddIndexer method so it gets added ;-)
26665
26666         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
26667         already taken care of by the MS compiler ?  
26668
26669 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26670
26671         * class.cs (Operator): New class for operator declarations.
26672         (Operator::OpType): Enum for the various operators.
26673
26674 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26675
26676         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
26677         ostensibly handle this in semantic analysis.
26678
26679         * cs-parser.jay (general_catch_clause): Comment out
26680         (specific_catch_clauses, specific_catch_clause): Ditto.
26681         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
26682         (catch_args, opt_catch_args): New productions.
26683         (catch_clause): Rewrite to use the new productions above
26684         (catch_clauses): Modify accordingly.
26685         (opt_catch_clauses): New production to use in try_statement
26686         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
26687         and re-write the code in the actions to extract the specific and
26688         general catch clauses by being a little smart ;-)
26689
26690         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
26691         Hooray, try and catch statements parse fine !
26692
26693 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26694
26695         * statement.cs (Block::GetVariableType): Fix logic to extract the type
26696         string from the hashtable of variables.
26697
26698         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
26699         I end up making that mistake ;-)
26700         (catch_clauses): Fixed gross error which made Key and Value of the 
26701         DictionaryEntry the same : $1 !!
26702
26703 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26704
26705         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
26706
26707         * cs-parser.jay (event_declaration): Correct to remove the semicolon
26708         when the add and remove accessors are specified. 
26709
26710 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26711
26712         * cs-parser.jay (IndexerDeclaration): New helper class to hold
26713         information about indexer_declarator.
26714         (indexer_declarator): Implement actions.
26715         (parsing_indexer): New local boolean used to keep track of whether
26716         we are parsing indexers or properties. This is necessary because 
26717         implicit_parameters come into picture even for the get accessor in the 
26718         case of an indexer.
26719         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
26720
26721         * class.cs (Indexer): New class for indexer declarations.
26722         (TypeContainer::AddIndexer): New method to add an indexer to a type.
26723         (TypeContainer::indexers): New member to hold list of indexers for the
26724         type.
26725
26726 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26727
26728         * cs-parser.jay (add_accessor_declaration): Implement action.
26729         (remove_accessor_declaration): Implement action.
26730         (event_accessors_declaration): Implement
26731         (variable_declarators): swap statements for first rule - trivial.
26732
26733         * class.cs (Event): New class to hold information about event
26734         declarations.
26735         (TypeContainer::AddEvent): New method to add an event to a type
26736         (TypeContainer::events): New member to hold list of events.
26737
26738         * cs-parser.jay (event_declaration): Implement actions.
26739
26740 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26741
26742         * cs-parser.jay (dim_separators): Implement. Make it a string
26743         concatenating all the commas together, just as they appear.
26744         (opt_dim_separators): Modify accordingly
26745         (rank_specifiers): Update accordingly. Basically do the same
26746         thing - instead, collect the brackets here.
26747         (opt_rank_sepcifiers): Modify accordingly.
26748         (array_type): Modify to actually return the complete type string
26749         instead of ignoring the rank_specifiers.
26750         (expression_list): Implement to collect the expressions
26751         (variable_initializer): Implement. We make it a list of expressions
26752         essentially so that we can handle the array_initializer case neatly too.
26753         (variable_initializer_list): Implement.
26754         (array_initializer): Make it a list of variable_initializers
26755         (opt_array_initializer): Modify accordingly.
26756
26757         * expression.cs (New::NType): Add enumeration to help us
26758         keep track of whether we have an object/delegate creation
26759         or an array creation.
26760         (New:NewType, New::Rank, New::Indices, New::Initializers): New
26761         members to hold data about array creation.
26762         (New:New): Modify to update NewType
26763         (New:New): New Overloaded contructor for the array creation
26764         case.
26765
26766         * cs-parser.jay (array_creation_expression): Implement to call
26767         the overloaded New constructor.
26768
26769 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
26770
26771         * class.cs (TypeContainer::Constructors): Return member
26772         constructors instead of returning null.
26773
26774 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
26775
26776         * typemanager.cs (InitCoreTypes): Initialize the various core
26777         types after we have populated the type manager with the user
26778         defined types (this distinction will be important later while
26779         compiling corlib.dll)
26780
26781         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
26782         on Expression Classification.  Now all expressions have a method
26783         `Resolve' and a method `Emit'.
26784
26785         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
26786         generation from working.     Also add some temporary debugging
26787         code. 
26788
26789 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
26790
26791         * codegen.cs: Lots of code generation pieces.  This is only the
26792         beginning, will continue tomorrow with more touches of polish.  We
26793         handle the fundamentals of if, while, do, for, return.  Others are
26794         trickier and I need to start working on invocations soon.
26795
26796         * gen-treedump.cs: Bug fix, use s.Increment here instead of
26797         s.InitStatement. 
26798
26799         * codegen.cs (EmitContext): New struct, used during code
26800         emission to keep a context.   Most of the code generation will be
26801         here. 
26802
26803         * cs-parser.jay: Add embedded blocks to the list of statements of
26804         this block.  So code generation proceeds in a top down fashion.
26805
26806 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
26807
26808         * statement.cs: Add support for multiple child blocks.
26809
26810 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
26811
26812         * codegen.cs (EmitCode): New function, will emit the code for a
26813         Block of code given a TypeContainer and its ILGenerator. 
26814
26815         * statement.cs (Block): Standard public readonly optimization.
26816         (Block::Block constructors): Link children. 
26817         (Block::Child): Child Linker.
26818         (Block::EmitVariables): Emits IL variable declarations.
26819
26820         * class.cs: Drop support for MethodGroups here, delay until
26821         Semantic Analysis.
26822         (Method::): Applied the same simplification that I did before, and
26823         move from Properties to public readonly fields.
26824         (Method::ParameterTypes): Returns the parameter types for the
26825         function, and implements a cache that will be useful later when I
26826         do error checking and the semantic analysis on the methods is
26827         performed.
26828         (Constructor::GetCallingConvention): Renamed from CallingConvetion
26829         and made a method, optional argument tells whether this is a class
26830         or a structure to apply the `has-this' bit.
26831         (Method::GetCallingConvention): Implement, returns the calling
26832         convention. 
26833         (Method::Define): Defines the type, a second pass is performed
26834         later to populate the methods.
26835
26836         (Constructor::ParameterTypes): implement a cache similar to the
26837         one on Method::ParameterTypes, useful later when we do semantic
26838         analysis. 
26839
26840         (TypeContainer::EmitMethod):  New method.  Emits methods.
26841
26842         * expression.cs: Removed MethodGroup class from here.
26843
26844         * parameter.cs (Parameters::GetCallingConvention): new method.
26845
26846 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
26847
26848         * class.cs (TypeContainer::Populate): Drop RootContext from the
26849         argument. 
26850
26851         (Constructor::CallingConvention): Returns the calling convention.
26852         (Constructor::ParameterTypes): Returns the constructor parameter
26853         types. 
26854
26855         (TypeContainer::AddConstructor): Keep track of default constructor
26856         and the default static constructor.
26857
26858         (Constructor::) Another class that starts using `public readonly'
26859         instead of properties. 
26860
26861         (Constructor::IsDefault): Whether this is a default constructor. 
26862
26863         (Field::) use readonly public fields instead of properties also.
26864
26865         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
26866         track of static constructors;  If none is used, turn on
26867         BeforeFieldInit in the TypeAttributes. 
26868
26869         * cs-parser.jay (opt_argument_list): now the return can be null
26870         for the cases where there are no arguments. 
26871
26872         (constructor_declarator): If there is no implicit `base' or
26873         `this', then invoke the default parent constructor. 
26874
26875         * modifiers.cs (MethodAttr): New static function maps a set of
26876         modifiers flags into a MethodAttributes enum
26877         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
26878         MethodAttr, TypeAttr to represent the various mappings where the
26879         modifiers are used.
26880         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
26881
26882 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
26883
26884         * parameter.cs (GetParameterInfo): Fix bug where there would be no
26885         method arguments.
26886
26887         * interface.cs (PopulateIndexer): Implemented the code generator
26888         for interface indexers.
26889
26890 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
26891
26892         * interface.cs (InterfaceMemberBase): Now we track the new status
26893         here.  
26894
26895         (PopulateProperty): Implement property population.  Woohoo!  Got
26896         Methods and Properties going today. 
26897
26898         Removed all the properties for interfaces, and replaced them with
26899         `public readonly' fields. 
26900
26901 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
26902
26903         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
26904         initialize their hashtables/arraylists only when they are needed
26905         instead of doing this always.
26906
26907         * parameter.cs: Handle refs and out parameters.
26908
26909         * cs-parser.jay: Use an ArrayList to construct the arguments
26910         instead of the ParameterCollection, and then cast that to a
26911         Parameter[] array.
26912
26913         * parameter.cs: Drop the use of ParameterCollection and use
26914         instead arrays of Parameters.
26915
26916         (GetParameterInfo): Use the Type, not the Name when resolving
26917         types. 
26918
26919 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
26920
26921         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
26922         and instead use public readonly fields.
26923
26924         * class.cs: Put back walking code for type containers.
26925
26926 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
26927
26928         * class.cs (MakeConstant): Code to define constants.
26929
26930         * rootcontext.cs (LookupType): New function.  Used to locate types 
26931
26932
26933 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
26934
26935         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
26936         this System.Reflection code is.  Kudos to Microsoft
26937
26938         * typemanager.cs: Implement a type cache and avoid loading all
26939         types at boot time.  Wrap in LookupType the internals.  This made
26940         the compiler so much faster.  Wow.  I rule!
26941
26942         * driver.cs: Make sure we always load mscorlib first (for
26943         debugging purposes, nothing really important).
26944
26945         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
26946         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
26947
26948         * rootcontext.cs: Lookup types on their namespace;  Lookup types
26949         on namespaces that have been imported using the `using' keyword.
26950
26951         * class.cs (TypeContainer::TypeAttr): Virtualize.
26952         (Class::TypeAttr): Return attributes suitable for this bad boy.
26953         (Struct::TypeAttr): ditto.
26954         Handle nested classes.
26955         (TypeContainer::) Remove all the type visiting code, it is now
26956         replaced with the rootcontext.cs code
26957
26958         * rootcontext.cs (GetClassBases): Added support for structs. 
26959
26960 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
26961
26962         * interface.cs, statement.cs, class.cs, parameter.cs,
26963         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
26964         Drop use of TypeRefs, and use strings instead.
26965
26966 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
26967
26968         * rootcontext.cs: 
26969
26970         * class.cs (Struct::Struct): set the SEALED flags after
26971         checking the modifiers.
26972         (TypeContainer::TypeAttr): new property, returns the
26973         TypeAttributes for a class.  
26974
26975         * cs-parser.jay (type_list): Oops, list production was creating a
26976         new list of base types.
26977
26978         * rootcontext.cs (StdLib): New property.
26979         (GetInterfaceTypeByName): returns an interface by type name, and
26980         encapsulates error handling here.
26981         (GetInterfaces): simplified.
26982         (ResolveTree): Encapsulated all the tree resolution here.
26983         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
26984         types. 
26985
26986         * driver.cs: Add support for --nostdlib, to avoid loading the
26987         default assemblies.
26988         (Main): Do not put tree resolution here. 
26989
26990         * rootcontext.cs: Beginning of the class resolution.
26991
26992 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
26993
26994         * rootcontext.cs: Provide better error reporting. 
26995
26996         * cs-parser.jay (interface_base): set our $$ to be interfaces.
26997
26998         * rootcontext.cs (CreateInterface): Handle the case where there
26999         are no parent interfaces.
27000
27001         (CloseTypes): Routine to flush types at the end.
27002         (CreateInterface): Track types.
27003         (GetInterfaces): Returns an array of Types from the list of
27004         defined interfaces.
27005
27006         * typemanager.c (AddUserType): Mechanism to track user types (puts
27007         the type on the global type hash, and allows us to close it at the
27008         end). 
27009
27010 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
27011
27012         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
27013         RecordInterface instead.
27014
27015         * cs-parser.jay: Updated to reflect changes above.
27016
27017         * decl.cs (Definition): Keep track of the TypeBuilder type that
27018         represents this type here.  Not sure we will use it in the long
27019         run, but wont hurt for now.
27020
27021         * driver.cs: Smaller changes to accomodate the new code.
27022
27023         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
27024         when done. 
27025
27026         * rootcontext.cs (CreateInterface):  New method, used to create
27027         the System.TypeBuilder type for interfaces.
27028         (ResolveInterfaces): new entry point to resolve the interface
27029         hierarchy. 
27030         (CodeGen): Property, used to keep track of the code generator.
27031
27032 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
27033
27034         * cs-parser.jay: Add a second production for delegate_declaration
27035         with `VOID'.
27036
27037         (enum_body): Put an opt_comma here instead of putting it on
27038         enum_body or enum_member_declarations so we can handle trailing
27039         commas on enumeration members.  Gets rid of a shift/reduce.
27040
27041         (type_list): Need a COMMA in the middle.
27042
27043         (indexer_declaration): Tell tokenizer to recognize get/set
27044
27045         * Remove old targets.
27046
27047         * Re-add the parser target.
27048
27049 2001-07-13  Simon Cozens <simon@simon-cozens.org>
27050
27051         * cs-parser.jay: Add precendence rules for a number of operators
27052         ot reduce the number of shift/reduce conflicts in the grammar.
27053
27054 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
27055
27056         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
27057         and put it here.
27058
27059         Get rid of old crufty code.
27060
27061         * rootcontext.cs: Use this to keep track of the parsed
27062         representation and the defined types available to the program. 
27063
27064         * gen-treedump.cs: adjust for new convention.
27065
27066         * type.cs: Split out the type manager, and the assembly builder
27067         from here. 
27068
27069         * typemanager.cs: the type manager will live here now.
27070
27071         * cil-codegen.cs: And the code generator here. 
27072
27073 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
27074
27075         * makefile: Fixed up for easy making.
27076
27077 2001-07-13  Simon Cozens <simon@simon-cozens.org>
27078
27079         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
27080         the 
27081
27082         (unary_expression): Expand pre_increment_expression and
27083         post_decrement_expression to reduce a shift/reduce.
27084
27085 2001-07-11  Simon Cozens
27086
27087         * cs-tokenizer.cs: Hex numbers should begin with a 0.
27088
27089         Improve allow_keyword_as_indent name.
27090
27091 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
27092
27093         * Adjustments for Beta2. 
27094
27095 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
27096
27097         * decl.cs: Added `Define' abstract method.
27098         (InTransit): new property, used to catch recursive definitions. 
27099
27100         * interface.cs: Implement `Define'. 
27101
27102         * modifiers.cs: Map Modifiers.constants to
27103         System.Reflection.TypeAttribute flags.
27104
27105         * class.cs: Keep track of types and user-defined types.
27106         (BuilderInit): New method for creating an assembly
27107         (ResolveType): New function to launch the resolution process, only
27108         used by interfaces for now.
27109
27110         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
27111         that are inserted into the name space. 
27112
27113 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
27114
27115         * ARGH.  I have screwed up my tree so many times due to the use of
27116         rsync rather than using CVS.  Going to fix this at once. 
27117
27118         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
27119         load types.
27120
27121 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
27122
27123         * Experiment successful: Use System.Type rather that our own
27124         version of Type.  
27125
27126 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
27127
27128         * cs-parser.jay: Removed nsAliases from here.
27129
27130         Use new namespaces, handle `using XXX;' 
27131
27132         * namespace.cs: Reimplemented namespace handling, use a recursive
27133         definition of the class.  Now we can keep track of using clauses
27134         and catch invalid using clauses.
27135
27136 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
27137
27138         * gen-treedump.cs: Adapted for all the renaming.
27139
27140         * expression.cs (Expression): this class now has a Type property
27141         which returns an expression Type.
27142
27143         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
27144         `Type', as this has a different meaning now in the base
27145
27146 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
27147
27148         * interface.cs, class.cs: Removed from all the sources the
27149         references to signature computation, as we can not do method
27150         signature computation during the parsing time, as we are not
27151         trying to solve at that point distinguishing:
27152
27153         class X {
27154                 void a (Blah x) {}
27155                 void a (NS.Blah x) {}
27156         }
27157
27158         Which depending on the context might be valid or not, as we do not
27159         know if Blah is the same thing as NS.Blah at that point.
27160
27161         * Redid everything so the code uses TypeRefs now instead of
27162         Types.  TypeRefs are just temporary type placeholders, that need
27163         to be resolved.  They initially have a pointer to a string and the
27164         current scope in which they are used.  This is used later by the
27165         compiler to resolve the reference to an actual Type. 
27166
27167         * DeclSpace is no longer a CIR.Type, and neither are
27168         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
27169         are all DeclSpaces, but no Types. 
27170
27171         * type.cs (TypeRefManager): This implements the TypeRef manager,
27172         which keeps track of all the types that need to be resolved after
27173         the parsing has finished. 
27174
27175 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
27176
27177         * ARGH.  We are going to have to store `foreach' as a class rather
27178         than resolving it, as we need to verify error 1579 after name
27179         resolution.   *OR* we could keep a flag that says `This request to
27180         IEnumerator comes from a foreach statement' which we can then use
27181         to generate the error.
27182
27183 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
27184
27185         * class.cs (TypeContainer.AddMethod): we now add methods to the
27186         MethodGroup instead of the method hashtable.  
27187
27188         * expression.cs: Add MethodGroup abstraction, which gets us one
27189         step closer to the specification in the way we handle method
27190         declarations.  
27191
27192         * cs-parser.jay (primary_expression): qualified_identifier now
27193         tried to match up an identifier to a local variable reference or
27194         to a parameter reference.
27195
27196         current_local_parameters is now a parser global variable that
27197         points to the current parameters for the block, used during name
27198         lookup.
27199
27200         (property_declaration): Now creates an implicit `value' argument to
27201         the set accessor.
27202
27203 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
27204
27205         * parameter.cs: Do not use `param' arguments as part of the
27206         signature, per the spec.
27207
27208 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
27209
27210         * decl.cs: Base class for classes, structs and interfaces.  This
27211         is the "Declaration Space" 
27212
27213         * cs-parser.jay: Use CheckDef for checking declaration errors
27214         instead of having one on each function.
27215
27216         * class.cs: Factor out some code for handling error handling in
27217         accordance to the "Declarations" section in the "Basic Concepts"
27218         chapter in the ECMA C# spec.
27219
27220         * interface.cs: Make all interface member classes derive from
27221         InterfaceMemberBase.
27222
27223 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
27224
27225         * Many things: all interfaces are parsed and generated in
27226         gen-treedump.  Support for member variables, constructors,
27227         destructors, properties, constants is there.
27228
27229         Beginning of the IL backend, but very little done, just there for
27230         testing purposes. 
27231
27232 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
27233
27234         * cs-parser.jay: Fix labeled statement.
27235
27236         * cs-tokenizer.cs (escape): Escape " and ' always.
27237         ref_line, ref_name: keep track of the line/filename as instructed
27238         by #line by the compiler.
27239         Parse #line.
27240
27241 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
27242
27243         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
27244         to match the values in System.CodeDOM.
27245
27246         Divid renamed to Divide.
27247
27248         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
27249         statements. 
27250         (Statements.set): remove.
27251
27252         * System.CodeDOM/CodeCatchClause.cs: always have a valid
27253         statements. 
27254
27255         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
27256         falseStatements always have valid values. 
27257
27258         * cs-parser.jay: Use System.CodeDOM now.
27259